* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-02-06 13:10 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-02-06 13:10 UTC (permalink / raw
To: gentoo-commits
commit: c94ec69ec2f161bf41324586e4adccdee1262562
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 6 13:09:32 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 6 13:09:32 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c94ec69e
Merge commit 'v2.2.0_alpha20' into multilib
bin/isolated-functions.sh | 12 +-
bin/repoman | 1 +
man/emerge.1 | 24 +-
man/make.conf.5 | 8 +-
man/portage.5 | 3 +-
man/repoman.1 | 5 +-
pym/_emerge/BinpkgFetcher.py | 4 +-
pym/_emerge/EbuildBuild.py | 17 +-
pym/_emerge/EbuildFetcher.py | 6 +
pym/_emerge/Package.py | 35 ++-
pym/_emerge/actions.py | 46 ++-
pym/_emerge/depgraph.py | 508 +++++++++++---------
pym/_emerge/resolver/output.py | 116 +++--
pym/_emerge/resolver/slot_collision.py | 85 +++-
pym/portage/__init__.py | 1 +
pym/portage/_selinux.py | 6 +-
pym/portage/cache/ebuild_xattr.py | 6 +-
pym/portage/dbapi/_MergeProcess.py | 8 +-
pym/portage/dbapi/bintree.py | 48 +-
pym/portage/dep/__init__.py | 151 ++++++-
.../package/ebuild/_config/KeywordsManager.py | 203 ++++++--
pym/portage/package/ebuild/_config/MaskManager.py | 59 +++-
pym/portage/package/ebuild/config.py | 50 ++-
pym/portage/package/ebuild/doebuild.py | 35 ++-
pym/portage/package/ebuild/fetch.py | 1 +
pym/portage/process.py | 5 +
pym/portage/tests/dep/testCheckRequiredUse.py | 112 +++++-
.../test_lazy_import_portage_baseline.py | 1 +
pym/portage/tests/lint/test_import_modules.py | 40 ++
pym/portage/tests/resolver/ResolverPlayground.py | 18 +-
pym/portage/tests/resolver/test_depclean.py | 40 ++
...ated_atoms.py => test_old_dep_chain_display.py} | 16 +-
pym/portage/tests/resolver/test_required_use.py | 26 +-
pym/portage/tests/resolver/test_slot_collisions.py | 20 +-
pym/portage/update.py | 14 +-
pym/repoman/checks.py | 13 +-
pym/repoman/errors.py | 3 +-
37 files changed, 1309 insertions(+), 437 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-02-08 18:12 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-02-08 18:12 UTC (permalink / raw
To: gentoo-commits
commit: 07a2f8e3e0d03bb488a9f15ea4eac7e269c7c099
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 8 18:12:24 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Feb 8 18:12:24 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=07a2f8e3
Merge commit 'v2.2.0_alpha22' into multilib
bin/ebuild.sh | 14 ++++++++++----
man/ebuild.5 | 4 ++--
pym/portage/cache/sqlite.py | 23 +++++++++++++++--------
pym/portage/dep/__init__.py | 2 +-
pym/portage/dep/dep_check.py | 19 +++++++++++++++----
pym/portage/tests/dep/test_paren_reduce.py | 4 +++-
6 files changed, 46 insertions(+), 20 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-02-10 18:12 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-02-10 18:12 UTC (permalink / raw
To: gentoo-commits
commit: fe27fedc76de4cb436cee6421f8966d89c3cdcc9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 10 18:11:56 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Feb 10 18:11:56 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=fe27fedc
Merge commit 'v2.2.0_alpha23' into multilib
man/emerge.1 | 10 ++++++----
pym/_emerge/depgraph.py | 3 ++-
pym/portage/cache/ebuild_xattr.py | 13 +++++++------
pym/portage/debug.py | 10 ++++++++--
pym/portage/dep/dep_check.py | 8 ++++----
pym/repoman/herdbase.py | 11 +++++++++--
6 files changed, 36 insertions(+), 19 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-02-16 20:15 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-02-16 20:15 UTC (permalink / raw
To: gentoo-commits
commit: 583b1dbc4d40488759f9683d281dba9b05793491
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 16 20:14:41 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Feb 16 20:14:41 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=583b1dbc
Merge commit 'v2.2.0_alpha24' into multilib
bin/egencache | 37 ++++-
bin/repoman | 1 +
cnf/sets/portage.conf | 2 +-
man/ebuild.1 | 6 +-
man/emerge.1 | 17 ++-
pym/_emerge/EbuildExecuter.py | 3 +-
pym/_emerge/Scheduler.py | 3 +-
pym/_emerge/create_depgraph_params.py | 16 ++-
pym/_emerge/depgraph.py | 256 +++++++++++++++++++++++-------
pym/_emerge/help.py | 7 +-
pym/_emerge/resolver/output.py | 10 +-
pym/portage/dbapi/bintree.py | 16 ++-
pym/portage/dbapi/vartree.py | 14 ++-
pym/portage/dep/dep_check.py | 35 +++--
pym/portage/getbinpkg.py | 8 +-
pym/portage/tests/resolver/test_depth.py | 233 +++++++++++++++++++++++++++
pym/repoman/checks.py | 2 +-
17 files changed, 561 insertions(+), 105 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-02-25 13:45 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-02-25 13:45 UTC (permalink / raw
To: gentoo-commits
commit: 0cd661019f7dd3d52c26b507c1dc87ec78c07965
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Feb 25 13:44:35 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Feb 25 13:44:35 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=0cd66101
Merge commit 'v2.2.0_alpha25' into multilib
bin/ebuild.sh | 14 +++-------
bin/egencache | 8 +++++
bin/isolated-functions.sh | 4 +-
bin/misc-functions.sh | 4 +-
doc/package/ebuild/eapi/4.docbook | 2 +-
man/ebuild.5 | 2 +-
man/emerge.1 | 13 ++++++---
pym/_emerge/BinpkgVerifier.py | 6 +++-
pym/_emerge/Scheduler.py | 1 +
pym/_emerge/SubProcess.py | 3 +-
pym/_emerge/actions.py | 19 +++++++++++--
pym/_emerge/help.py | 15 +++++++---
pym/_emerge/main.py | 43 +++++++++++++++++++++++++----
pym/_emerge/unmerge.py | 4 +-
pym/portage/dep/__init__.py | 6 +++-
pym/portage/mail.py | 38 ++++++++++++++++++--------
pym/portage/tests/resolver/test_depth.py | 15 ++++++++++
pym/repoman/checks.py | 2 +-
18 files changed, 146 insertions(+), 53 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-03-03 19:53 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-03-03 19:53 UTC (permalink / raw
To: gentoo-commits
commit: 7d6007f4aef60e2b51e1f3412d52a49d53fb3bb4
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 3 19:53:00 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Mar 3 19:53:00 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7d6007f4
Merge commit 'v2.2.0_alpha26' into multilib
bin/ebuild | 51 +++++++++++++++++++++++++------------
bin/ebuild-helpers/4/dodoc | 49 +-----------------------------------
bin/ebuild-helpers/dodoc | 8 +++--
bin/ebuild-helpers/doins | 17 +++++++++++-
bin/repoman | 2 +
man/repoman.1 | 3 ++
pym/_emerge/actions.py | 53 ++++++++++++++++++++++++++++-----------
pym/_emerge/depgraph.py | 13 +++++++++-
pym/portage/dbapi/vartree.py | 57 +++++++++++++++++++++++++++++++++--------
pym/repoman/checks.py | 16 ++++++++++-
runtests.sh | 2 +-
11 files changed, 172 insertions(+), 99 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-03-17 17:58 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-03-17 17:58 UTC (permalink / raw
To: gentoo-commits
commit: 99708ef674f479ef0a9ad4ad4629df8c41bbae5a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 17 17:57:52 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Mar 17 17:57:52 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=99708ef6
Merge commit 'v2.2.0_alpha27' into multilib
bin/ebuild-ipc.py | 15 +++-----
man/emerge.1 | 6 ++--
pym/_emerge/AbstractEbuildProcess.py | 5 +++
pym/_emerge/AbstractPollTask.py | 11 +++++-
pym/_emerge/MetadataRegen.py | 15 ++++----
pym/_emerge/PollScheduler.py | 39 ++++++++++++++++----
pym/_emerge/QueueScheduler.py | 5 ++-
pym/_emerge/Scheduler.py | 24 ++++++++++--
pym/_emerge/depgraph.py | 9 ++++-
pym/_emerge/help.py | 7 +++-
pym/_emerge/main.py | 29 +++++++++++++--
pym/_emerge/unmerge.py | 31 +++++++++-------
pym/portage/dbapi/porttree.py | 2 -
pym/portage/dbapi/vartree.py | 63 +++++++++++++-------------------
pym/portage/eclass_cache.py | 17 +--------
pym/portage/package/ebuild/config.py | 25 +++++++------
pym/portage/package/ebuild/doebuild.py | 7 +++-
pym/portage/util/__init__.py | 23 ++++++++++--
18 files changed, 210 insertions(+), 123 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-03-19 19:39 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-03-19 19:39 UTC (permalink / raw
To: gentoo-commits
commit: 40319971cb692ac8e197031f2e133341a6192c0e
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 19 19:38:45 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Mar 19 19:38:45 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=40319971
Merge commit 'v2.2.0_alpha28' into multilib
bin/ebuild-ipc.py | 55 ++++++++++++++++++++++++-------
cnf/make.conf | 2 +-
man/make.conf.5 | 4 +-
pym/_emerge/AbstractPollTask.py | 3 ++
pym/_emerge/AsynchronousLock.py | 12 +++++++
pym/_emerge/AsynchronousTask.py | 15 +++++++--
pym/_emerge/Binpkg.py | 9 ++---
pym/_emerge/CompositeTask.py | 48 +++++++++++++++++++++++++---
pym/_emerge/EbuildBuild.py | 5 +--
pym/_emerge/EbuildExecuter.py | 4 +-
pym/_emerge/EbuildIpcDaemon.py | 29 ++++++++++++++---
pym/_emerge/FakeVartree.py | 4 +-
pym/_emerge/FifoIpcDaemon.py | 6 +--
pym/_emerge/PackageVirtualDbapi.py | 6 ++--
pym/_emerge/PipeReader.py | 6 +--
pym/_emerge/Scheduler.py | 20 +++++++++---
pym/_emerge/SubProcess.py | 8 +----
pym/_emerge/TaskSequence.py | 5 +--
pym/_emerge/resolver/slot_collision.py | 4 +-
pym/portage/dbapi/vartree.py | 8 -----
pym/portage/dep/dep_check.py | 9 +++--
21 files changed, 181 insertions(+), 81 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-03-28 17:24 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-03-28 17:24 UTC (permalink / raw
To: gentoo-commits
commit: 9de771380d94ef3c292d4f38f46728f35bdf8937
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 28 17:23:36 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 28 17:23:36 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9de77138
Merge v2.2.0_alpha29
bin/ebuild.sh | 20 +-
bin/emerge-webrsync | 6 +-
bin/portageq | 26 ++-
man/emerge.1 | 2 +-
pym/_emerge/AbstractEbuildProcess.py | 6 +-
pym/_emerge/AsynchronousTask.py | 4 +-
pym/_emerge/Binpkg.py | 20 +-
pym/_emerge/BlockerDB.py | 17 +-
pym/_emerge/EbuildBuild.py | 13 +-
pym/_emerge/EbuildMerge.py | 49 ++--
pym/_emerge/EbuildPhase.py | 31 ++-
pym/_emerge/FakeVartree.py | 18 +-
pym/_emerge/MergeListItem.py | 36 +--
pym/_emerge/MiscFunctionsProcess.py | 5 +-
pym/_emerge/PackageMerge.py | 17 +-
pym/_emerge/PollScheduler.py | 49 ++-
pym/_emerge/Scheduler.py | 27 +--
pym/_emerge/TaskSequence.py | 1 +
pym/_emerge/actions.py | 10 +-
pym/_emerge/depgraph.py | 8 +-
pym/_emerge/help.py | 4 +-
pym/_emerge/main.py | 36 ++-
pym/portage/dbapi/_MergeProcess.py | 191 +++++++++++-
pym/portage/dbapi/vartree.py | 313 ++++++++-----------
pym/portage/exception.py | 17 +-
.../package/ebuild/_config/special_env_vars.py | 12 +-
pym/portage/util/env_update.py | 20 +-
27 files changed, 572 insertions(+), 386 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-04-16 10:17 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-04-16 10:17 UTC (permalink / raw
To: gentoo-commits
commit: 41616039243b89884444fd837b43860bad4c529f
Author: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Gentoo <DOT> Org>
AuthorDate: Sun Apr 3 17:30:33 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Apr 3 17:30:33 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=41616039
Merge branch 'master' of git+ssh://git.overlays.gentoo.org/proj/portage
bin/repoman | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-04-16 10:17 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-04-16 10:17 UTC (permalink / raw
To: gentoo-commits
commit: 23d94a7d58046368d0a1a3f1abb375b0a700e509
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 16 10:16:58 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 16 10:16:58 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=23d94a7d
Merge commit 'v2.2.0_alpha30' into multilib
bin/ebuild-helpers/doins | 9 +++-
bin/repoman | 53 +++++++++++---------
cnf/make.globals | 5 ++-
man/make.conf.5 | 10 +++-
pym/_emerge/Scheduler.py | 10 +++-
pym/_emerge/main.py | 8 ++-
pym/_emerge/resolver/output.py | 4 +-
pym/portage/const.py | 6 +-
pym/portage/dbapi/porttree.py | 3 +
pym/portage/dep/__init__.py | 8 ++-
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/doebuild.py | 2 +-
pym/portage/package/ebuild/fetch.py | 12 ++--
pym/portage/tests/dep/testExtractAffectingUSE.py | 5 ++-
14 files changed, 90 insertions(+), 48 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-05-07 18:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-05-07 18:38 UTC (permalink / raw
To: gentoo-commits
commit: 531d14c05c3105b7e90023b4b73cc43c24a70b66
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat May 7 18:37:39 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat May 7 18:37:39 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=531d14c0
Merge commit 'v2.2.0_alpha31' into multilib
bin/ebuild | 6 +-
bin/ebuild-helpers/doins | 5 +-
bin/ebuild.sh | 49 ++-
bin/isolated-functions.sh | 4 +-
bin/misc-functions.sh | 86 ++--
bin/repoman | 49 +--
man/emerge.1 | 43 ++-
man/portage.5 | 20 +-
man/repoman.1 | 12 +-
pym/_emerge/DepPriority.py | 10 +-
pym/_emerge/DepPriorityNormalRange.py | 4 +-
pym/_emerge/DepPrioritySatisfiedRange.py | 3 +-
pym/_emerge/Dependency.py | 9 +-
pym/_emerge/EbuildPhase.py | 7 +-
pym/_emerge/Package.py | 3 +-
pym/_emerge/RootConfig.py | 10 +-
pym/_emerge/Scheduler.py | 65 ---
pym/_emerge/UnmergeDepPriority.py | 6 +-
pym/_emerge/actions.py | 145 ++++--
pym/_emerge/create_depgraph_params.py | 7 +-
pym/_emerge/depgraph.py | 609 ++++++++++++++++++----
pym/_emerge/emergelog.py | 10 +-
pym/_emerge/help.py | 69 +++-
pym/_emerge/main.py | 162 +++++-
pym/_emerge/resolver/backtracking.py | 15 +-
pym/portage/dbapi/bintree.py | 8 +-
pym/portage/dbapi/cpv_expand.py | 26 +-
pym/portage/manifest.py | 4 +-
pym/portage/package/ebuild/doebuild.py | 37 +-
pym/portage/tests/resolver/ResolverPlayground.py | 4 +-
pym/portage/tests/resolver/test_autounmask.py | 33 ++-
pym/portage/tests/resolver/test_rebuild.py | 138 +++++
pym/repoman/checks.py | 5 +
runtests.sh | 4 +-
34 files changed, 1275 insertions(+), 392 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-05-14 9:59 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-05-14 9:59 UTC (permalink / raw
To: gentoo-commits
commit: 4e63915f19eefb5a1c8dc109d0e49619aba7ad79
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat May 14 09:58:36 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat May 14 09:58:36 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=4e63915f
Merge commit 'v2.2.0_alpha33' into multilib
bin/ebuild.sh | 2 +-
cnf/make.globals | 2 +-
man/emerge.1 | 2 +
man/make.conf.5 | 11 +-
pym/_emerge/EbuildPhase.py | 20 +-
pym/_emerge/FakeVartree.py | 17 +-
pym/_emerge/Scheduler.py | 45 ++-
pym/_emerge/actions.py | 75 +---
pym/_emerge/depgraph.py | 85 ++---
pym/_emerge/help.py | 5 +-
pym/_emerge/main.py | 1 -
pym/_emerge/unmerge.py | 20 +-
pym/portage/cache/sqlite.py | 7 +-
pym/portage/cache/volatile.py | 3 +-
pym/portage/const.py | 7 +-
pym/portage/dbapi/_MergeProcess.py | 36 ++-
pym/portage/dbapi/_expand_new_virt.py | 72 +++
pym/portage/dbapi/cpv_expand.py | 13 +-
pym/portage/dbapi/porttree.py | 38 +-
pym/portage/dbapi/vartree.py | 498 +++++++++++---------
pym/portage/dep/dep_check.py | 15 +-
pym/portage/package/ebuild/config.py | 6 +-
pym/portage/package/ebuild/doebuild.py | 15 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 65 ++-
.../util/_dyn_libs/PreservedLibsRegistry.py | 69 ++-
25 files changed, 692 insertions(+), 437 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-05-22 9:42 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-05-22 9:42 UTC (permalink / raw
To: gentoo-commits
commit: 1d305fca5d8176643852103f9fe12e587558c322
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun May 22 09:41:33 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun May 22 09:41:33 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1d305fca
Merge commit 'v2.2.0_alpha34' into multilib
bin/etc-update | 6 +-
bin/glsa-check | 4 +-
cnf/make.conf.sparc.diff | 2 +-
doc/package/ebuild/eapi/4.docbook | 4 +-
make.conf.txt | 719 --------------------
man/ebuild.5 | 4 +-
man/emerge.1 | 18 +-
man/make.conf.5 | 2 +-
pym/_emerge/AsynchronousLock.py | 45 ++-
pym/_emerge/AsynchronousTask.py | 5 +-
pym/_emerge/Binpkg.py | 3 +-
pym/_emerge/BinpkgFetcher.py | 7 +-
pym/_emerge/EbuildBuild.py | 3 +-
pym/_emerge/EbuildBuildDir.py | 29 +-
pym/_emerge/EbuildMerge.py | 20 +-
pym/_emerge/EbuildPhase.py | 32 +-
pym/_emerge/actions.py | 3 +-
pym/_emerge/depgraph.py | 479 +++++++++++---
pym/_emerge/help.py | 21 +-
pym/_emerge/main.py | 17 +-
pym/_emerge/resolver/backtracking.py | 7 +-
pym/_emerge/resolver/output_helpers.py | 4 +-
pym/_emerge/unmerge.py | 10 +-
pym/portage/cvstree.py | 6 +-
pym/portage/dbapi/vartree.py | 247 +++++--
pym/portage/mail.py | 11 +-
pym/portage/output.py | 4 +-
pym/portage/package/ebuild/getmaskingstatus.py | 7 +-
pym/portage/tests/ebuild/test_config.py | 4 +-
pym/portage/tests/locks/test_asynchronous_lock.py | 95 +++-
pym/portage/tests/resolver/ResolverPlayground.py | 18 +-
pym/portage/tests/resolver/test_autounmask.py | 51 ++-
.../tests/resolver/test_circular_dependencies.py | 3 +-
pym/portage/tests/resolver/test_multirepo.py | 3 +
.../tests/resolver/test_old_dep_chain_display.py | 2 +
pym/portage/tests/resolver/test_simple.py | 2 +-
pym/portage/tests/resolver/test_slot_collisions.py | 3 +-
pym/portage/update.py | 4 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 13 +-
pym/portage/util/digraph.py | 10 +-
pym/portage/util/movefile.py | 5 +-
pym/portage/xml/metadata.py | 4 +-
42 files changed, 962 insertions(+), 974 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-05-26 17:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-05-26 17:55 UTC (permalink / raw
To: gentoo-commits
commit: 1a3d8d5a2faefc40233fcaffbbc82e6f5967f7c6
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu May 26 17:55:15 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu May 26 17:55:15 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1a3d8d5a
Merge commit 'v2.2.0_alpha36' into multilib
bin/ebuild.sh | 7 +
bin/regenworld | 6 +-
bin/repoman | 2 +-
man/make.conf.5 | 3 +
pym/_emerge/Blocker.py | 12 +-
pym/_emerge/DepPriority.py | 2 +-
pym/_emerge/DepPrioritySatisfiedRange.py | 31 +--
pym/_emerge/EbuildMerge.py | 3 +-
pym/_emerge/EbuildPhase.py | 2 +-
pym/_emerge/FakeVartree.py | 13 +-
pym/_emerge/Package.py | 59 +++-
pym/_emerge/PackageUninstall.py | 102 +++++-
pym/_emerge/Scheduler.py | 24 +-
pym/_emerge/Task.py | 31 +-
pym/_emerge/actions.py | 30 ++-
pym/_emerge/depgraph.py | 129 +++++---
pym/_emerge/unmerge.py | 64 +++-
pym/portage/const.py | 2 +-
pym/portage/dbapi/_MergeProcess.py | 34 ++-
pym/portage/dbapi/vartree.py | 84 +++--
pym/portage/package/ebuild/doebuild.py | 121 ++++---
pym/portage/tests/locks/test_asynchronous_lock.py | 6 +-
pym/portage/tests/resolver/ResolverPlayground.py | 81 +++++-
pym/portage/tests/resolver/test_depth.py | 8 +-
pym/portage/tests/resolver/test_merge_order.py | 386 +++++++++++++++++++++
pym/portage/util/__init__.py | 29 +-
26 files changed, 968 insertions(+), 303 deletions(-)
diff --cc bin/ebuild.sh
index ec575b9,37a3084..0f95faa
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@@ -1144,17 -1071,17 +1144,24 @@@ dyn_compile()
trap abort_compile SIGINT SIGQUIT
+ if hasq distcc $FEATURES && hasq distcc-pump $FEATURES ; then
+ if [[ -z $INCLUDE_SERVER_PORT ]] || [[ ! -w $INCLUDE_SERVER_PORT ]] ; then
+ eval $(/usr/bin/pump --startup)
+ trap "/usr/bin/pump --shutdown" EXIT
+ fi
+ fi
+
ebuild_phase pre_src_compile
- vecho ">>> Compiling source in $PWD ..."
+ vecho ">>> Compiling source in ${PWD}$(_get_abi_string) ..."
ebuild_phase src_compile
+
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.compiled."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .compiled.${LOOP_ABI}'"
+ fi
+ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
+ done
+ is_ebuild && { rm "${T}"/environment || die ; }
>> "$PORTAGE_BUILDDIR/.compiled" || \
die "Failed to create $PORTAGE_BUILDDIR/.compiled"
vecho ">>> Source compiled."
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-05-28 13:14 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-05-28 13:14 UTC (permalink / raw
To: gentoo-commits
commit: 48cf4874fb23281bc3679a6b5247167b51e86c1c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat May 28 13:13:14 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat May 28 13:13:14 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=48cf4874
Merge commit 'v2.2.0_alpha37' into multilib
bin/etc-update | 2 +-
man/emerge.1 | 2 +-
pym/_emerge/AsynchronousLock.py | 10 ++--
pym/_emerge/BlockerDB.py | 9 ++-
pym/_emerge/FakeVartree.py | 12 ++++-
pym/_emerge/depgraph.py | 31 +++++++----
pym/_emerge/unmerge.py | 2 +-
pym/portage/dbapi/_MergeProcess.py | 9 +++
pym/portage/dbapi/vartree.py | 105 +++++++++++++++++++-----------------
9 files changed, 107 insertions(+), 75 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-06-07 15:44 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-06-07 15:44 UTC (permalink / raw
To: gentoo-commits
commit: aea59c668e3c30f8b9769dec16482919514150eb
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 7 15:44:09 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Jun 7 15:44:09 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=aea59c66
Merge commit 'v2.2.0_alpha38' into multilib
NEWS | 11 +++
RELEASE-NOTES | 9 ++
bin/ebuild | 1 -
bin/etc-update | 7 +-
bin/portageq | 57 ++++++++++++--
cnf/etc-update.conf | 4 +
man/ebuild.5 | 6 ++
man/emerge.1 | 6 +-
pym/_emerge/Binpkg.py | 22 ++----
pym/_emerge/MergeListItem.py | 2 +-
pym/_emerge/Package.py | 3 +-
pym/_emerge/PackageArg.py | 5 +-
pym/_emerge/Scheduler.py | 75 +-----------------
pym/_emerge/actions.py | 7 +-
pym/_emerge/create_world_atom.py | 12 ++-
pym/_emerge/depgraph.py | 72 +++++++++++++++---
pym/_emerge/emergelog.py | 5 +-
pym/_emerge/help.py | 6 +-
pym/_emerge/main.py | 28 ++++---
pym/_emerge/resolver/circular_dependency.py | 4 +-
pym/portage/__init__.py | 35 +++++++-
pym/portage/_sets/base.py | 10 ++-
pym/portage/_sets/files.py | 6 +-
pym/portage/dbapi/_MergeProcess.py | 9 ++-
pym/portage/dbapi/__init__.py | 20 +++---
pym/portage/dbapi/bintree.py | 9 ++-
pym/portage/dbapi/dep_expand.py | 25 ++++--
pym/portage/dbapi/porttree.py | 63 +++++++++-------
pym/portage/dbapi/vartree.py | 81 +++++++++-----------
pym/portage/dep/dep_check.py | 11 ++-
pym/portage/getbinpkg.py | 2 +-
.../package/ebuild/_config/KeywordsManager.py | 3 +-
pym/portage/package/ebuild/_config/MaskManager.py | 3 +-
pym/portage/package/ebuild/_config/helper.py | 5 +-
pym/portage/package/ebuild/config.py | 10 ++-
pym/portage/package/ebuild/doebuild.py | 4 +-
pym/portage/package/ebuild/getmaskingreason.py | 42 ++++++++---
pym/portage/package/ebuild/getmaskingstatus.py | 7 +-
pym/portage/repository/config.py | 30 +++++---
pym/portage/tests/resolver/test_merge_order.py | 36 +++++++++-
pym/portage/tests/util/test_digraph.py | 12 ++--
pym/portage/util/__init__.py | 11 ++-
pym/portage/util/mtimedb.py | 8 ++-
pym/repoman/checks.py | 5 +-
44 files changed, 495 insertions(+), 294 deletions(-)
diff --cc pym/portage/__init__.py
index 2436a8e,515a9a7..4f71f4e
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@@ -1,8 -1,8 +1,8 @@@
# portage.py -- core Portage functionality
- # Copyright 1998-2010 Gentoo Foundation
+ # Copyright 1998-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-VERSION="HEAD"
+VERSION="2.2_rc67-r8"
# ===========================================================================
# START OF IMPORTS -- START OF IMPORTS -- START OF IMPORTS -- START OF IMPORT
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-06-16 16:54 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-06-16 16:54 UTC (permalink / raw
To: gentoo-commits
commit: b286d42bd10fc263092bbe675a318e2ec29faa29
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 16 16:53:49 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Jun 16 16:53:49 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b286d42b
Merge commit 'v2.2.0_alpha41' into multilib
bin/ebuild.sh | 14 ++-
man/portage.5 | 51 +++++++-
pym/_emerge/AbstractEbuildProcess.py | 26 +++-
pym/_emerge/BinpkgFetcher.py | 2 +-
pym/_emerge/EbuildFetcher.py | 6 +-
pym/_emerge/EbuildMetadataPhase.py | 4 +-
pym/_emerge/Scheduler.py | 7 +-
pym/_emerge/SubProcess.py | 20 ++--
pym/_emerge/depgraph.py | 146 +++++++++++++++-------
pym/_emerge/resolver/circular_dependency.py | 3 +-
pym/_emerge/resolver/slot_collision.py | 30 +++--
pym/_emerge/unmerge.py | 12 ++-
pym/portage/__init__.py | 2 +-
pym/portage/dbapi/bintree.py | 28 +++--
pym/portage/dbapi/virtual.py | 6 +-
pym/portage/dep/__init__.py | 50 +++++---
pym/portage/locks.py | 9 +-
pym/portage/package/ebuild/config.py | 2 +-
pym/portage/package/ebuild/digestgen.py | 22 +++-
pym/portage/package/ebuild/getmaskingreason.py | 13 ++-
pym/portage/package/ebuild/getmaskingstatus.py | 38 ++----
pym/portage/{package => tests/dbapi}/__init__.py | 2 +-
pym/portage/tests/{bin => dbapi}/__test__ | 0
pym/portage/tests/dbapi/test_fakedbapi.py | 58 +++++++++
pym/portage/tests/dep/testExtractAffectingUSE.py | 4 +-
pym/portage/tests/dep/test_use_reduce.py | 12 +-
pym/portage/tests/ebuild/test_spawn.py | 2 +-
pym/portage/tests/locks/test_lock_nonblock.py | 46 +++++++
pym/portage/tests/resolver/test_merge_order.py | 33 +++++
pym/portage/util/__init__.py | 4 +-
30 files changed, 472 insertions(+), 180 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-07-05 17:34 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-07-05 17:34 UTC (permalink / raw
To: gentoo-commits
commit: 725033094da621d2b319f8666b2af7f3b7cb3465
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 5 17:33:39 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Jul 5 17:33:39 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=72503309
Merge commit 'v2.2.0_alpha43' into multilib
RELEASE-NOTES | 2 +-
bin/ebuild | 23 +++-
bin/ebuild-helpers/ecompress | 6 +-
bin/emaint | 45 +++++-
bin/misc-functions.sh | 11 ++
bin/portageq | 13 +-
bin/repoman | 37 ++++-
cnf/make.globals | 2 +-
man/ebuild.5 | 5 +-
man/env-update.1 | 3 +-
man/make.conf.5 | 9 +-
man/portage.5 | 7 +
man/repoman.1 | 4 +
pym/_emerge/EbuildPhase.py | 10 ++
pym/_emerge/Package.py | 33 ++++-
pym/_emerge/UseFlagDisplay.py | 8 +-
pym/_emerge/depgraph.py | 21 ++-
pym/_emerge/resolver/circular_dependency.py | 24 ++-
pym/_emerge/resolver/output.py | 13 +-
pym/portage/checksum.py | 15 ++-
pym/portage/const.py | 2 +-
pym/portage/dbapi/vartree.py | 30 ++--
pym/portage/dep/__init__.py | 4 +-
pym/portage/package/ebuild/_config/UseManager.py | 170 +++++++++++++-------
.../package/ebuild/_config/special_env_vars.py | 6 +
pym/portage/package/ebuild/config.py | 57 +++++++-
pym/portage/package/ebuild/doebuild.py | 141 ++++++++++++++++-
pym/portage/package/ebuild/prepare_build_dirs.py | 14 ++-
pym/portage/repository/config.py | 3 +
pym/portage/tests/util/test_varExpand.py | 35 ++++-
pym/portage/util/__init__.py | 51 +++----
pym/portage/util/_dyn_libs/LinkageMapELF.py | 30 +++-
pym/portage/util/env_update.py | 14 +-
33 files changed, 667 insertions(+), 181 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-07-15 13:24 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-07-15 13:24 UTC (permalink / raw
To: gentoo-commits
commit: da552fc0c4f609e87df0fefb4d3e953b814d0a43
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 15 13:23:43 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jul 15 13:23:43 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=da552fc0
Merge v2.2.0_alpha45
bin/binhost-snapshot | 6 +-
bin/ebuild-helpers/doman | 8 +-
bin/ebuild-helpers/prepall | 6 +-
bin/ebuild-helpers/prepallman | 4 +-
bin/ebuild-helpers/prepinfo | 4 +-
bin/ebuild-helpers/prepman | 4 +-
bin/ebuild-helpers/prepstrip | 24 ++--
bin/ebuild.sh | 131 ++++++++++----------
bin/egencache | 41 ++++---
bin/emerge-webrsync | 4 +-
bin/filter-bash-environment.py | 12 +-
bin/isolated-functions.sh | 22 +++-
bin/misc-functions.sh | 22 ++--
bin/repoman | 15 +--
cnf/logrotate.d/elog-save-summary | 3 +-
man/ebuild.5 | 8 +-
man/make.conf.5 | 6 +-
pym/_emerge/AbstractEbuildProcess.py | 10 +-
pym/_emerge/Binpkg.py | 15 ++-
pym/_emerge/BinpkgVerifier.py | 8 +-
pym/_emerge/EbuildFetcher.py | 21 ++--
pym/_emerge/EbuildMetadataPhase.py | 4 +-
pym/_emerge/EbuildPhase.py | 38 +++---
pym/_emerge/JobStatusDisplay.py | 8 +-
pym/_emerge/Scheduler.py | 1 -
pym/_emerge/UseFlagDisplay.py | 7 +-
pym/_emerge/actions.py | 26 +++--
pym/_emerge/depgraph.py | 103 ++++++++++------
pym/_emerge/emergelog.py | 18 ++--
pym/_emerge/is_valid_package_atom.py | 18 ++-
pym/_emerge/main.py | 8 +-
pym/_emerge/resolver/circular_dependency.py | 48 ++++----
pym/_emerge/resolver/output_helpers.py | 4 +-
pym/_emerge/resolver/slot_collision.py | 44 ++++++-
pym/portage/__init__.py | 37 +-----
pym/portage/_ensure_encodings.py | 132 --------------------
pym/portage/cache/flat_hash.py | 19 ++-
pym/portage/cache/flat_list.py | 18 ++-
pym/portage/checksum.py | 9 +-
pym/portage/const.py | 1 +
pym/portage/cvstree.py | 6 +-
pym/portage/dbapi/_MergeProcess.py | 6 +-
pym/portage/dbapi/bintree.py | 5 +-
pym/portage/dbapi/cpv_expand.py | 6 +-
pym/portage/dbapi/porttree.py | 5 +-
pym/portage/dbapi/vartree.py | 39 +++---
pym/portage/dispatch_conf.py | 6 +-
pym/portage/elog/messages.py | 7 +-
pym/portage/elog/mod_save.py | 38 ++++---
pym/portage/elog/mod_save_summary.py | 48 +++++--
pym/portage/env/loaders.py | 6 +-
pym/portage/glsa.py | 8 +-
pym/portage/manifest.py | 11 +-
pym/portage/news.py | 6 +-
pym/portage/output.py | 10 +-
.../package/ebuild/_config/LocationsManager.py | 6 +-
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 11 +-
.../package/ebuild/deprecated_profile_check.py | 6 +-
pym/portage/package/ebuild/digestcheck.py | 18 ++-
pym/portage/package/ebuild/doebuild.py | 46 +++++---
pym/portage/package/ebuild/fetch.py | 10 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 55 +++++++--
pym/portage/repository/config.py | 10 +-
pym/portage/tests/ebuild/test_spawn.py | 6 +-
.../test_lazy_import_portage_baseline.py | 2 +-
pym/portage/tests/resolver/test_slot_collisions.py | 18 +++
pym/portage/update.py | 12 +-
pym/portage/util/ExtractKernelVersion.py | 6 +-
pym/portage/util/__init__.py | 39 +++++--
pym/portage/util/env_update.py | 4 +-
pym/repoman/checks.py | 34 ++++--
pym/repoman/errors.py | 2 +
pym/repoman/utilities.py | 6 +-
74 files changed, 753 insertions(+), 665 deletions(-)
diff --cc bin/ebuild.sh
index 18c88d5,2ef40cb..b5b6a79
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@@ -162,14 -162,12 +163,14 @@@ use()
# Make sure we have this USE flag in IUSE
elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE ]] ; then
- [[ $u =~ $PORTAGE_IUSE ]] || \
- eqawarn "QA Notice: USE Flag '${u}' not" \
- "in IUSE for ${CATEGORY}/${PF}"
+ if [[ $u != multilib ]]; then
+ [[ $u =~ $PORTAGE_IUSE ]] || \
+ eqawarn "QA Notice: USE Flag '${u}' not" \
+ "in IUSE for ${CATEGORY}/${PF}"
+ fi
fi
- if hasq ${u} ${USE} ; then
+ if has ${u} ${USE} ; then
return ${found}
else
return $((!found))
@@@ -766,13 -742,12 +767,13 @@@ dyn_unpack()
fi
if [ "${newstuff}" == "yes" ]; then
# We don't necessarily have privileges to do a full dyn_clean here.
- rm -rf "${PORTAGE_BUILDDIR}"/{.setuped,.unpacked,.prepared,.configured,.compiled,.tested,.installed,.packaged,build-info}
+ rm -rf "${PORTAGE_BUILDDIR}"/{.setuped*,.unpacked*,.prepared*,.configured*,.compiled*,.tested*,.installed*,.packaged*,build-info}
- if ! hasq keepwork $FEATURES ; then
+ if ! has keepwork $FEATURES ; then
rm -rf "${WORKDIR}"
fi
+ rm -rf "${D}".*
if [ -d "${T}" ] && \
- ! hasq keeptemp $FEATURES ; then
+ ! has keeptemp $FEATURES ; then
rm -rf "${T}" && mkdir "${T}"
fi
fi
@@@ -816,18 -783,18 +817,18 @@@ dyn_clean()
chflags -R nosunlnk,nouunlnk "${PORTAGE_BUILDDIR}" 2>/dev/null
fi
- rm -rf "${PORTAGE_BUILDDIR}/image" "${PORTAGE_BUILDDIR}/homedir"
- rm -f "${PORTAGE_BUILDDIR}/.installed"
+ rm -rf "${PORTAGE_BUILDDIR}"/image* "${PORTAGE_BUILDDIR}/homedir"
+ rm -f "${PORTAGE_BUILDDIR}"/.installed*
if [[ $EMERGE_FROM = binary ]] || \
- ! hasq keeptemp $FEATURES && ! hasq keepwork $FEATURES ; then
+ ! has keeptemp $FEATURES && ! has keepwork $FEATURES ; then
rm -rf "${T}"
fi
- if [[ $EMERGE_FROM = binary ]] || ! hasq keepwork $FEATURES; then
+ if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended,setuped,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
- "$PORTAGE_BUILDDIR"/.die_hooks \
+ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
+ "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*} \
+ "$PORTAGE_BUILDDIR"/.{die_hooks,abi} \
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
"$PORTAGE_BUILDDIR"/.exit_status
@@@ -1029,17 -996,9 +1030,17 @@@ dyn_prepare()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ "${PORTAGE_BUILDDIR}"/.prepared.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already prepared for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.prepared.${LOOP_ABI}' to force prepare."
+ continue
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to prepare; then
cd "${WORKDIR}"
@@@ -1076,17 -1027,9 +1077,17 @@@ dyn_configure()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ ${PORTAGE_BUILDDIR}/.configured.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already configured for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.configured.${LOOP_ABI}' to force configuration."
+ continue
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to configure; then
cd "${WORKDIR}"
@@@ -1124,17 -1060,9 +1125,17 @@@ dyn_compile()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ ${PORTAGE_BUILDDIR}/.compiled.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already compiled for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.compiled.${LOOP_ABI}' to force compilation."
+ continue
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to compile; then
cd "${WORKDIR}"
@@@ -1240,14 -1144,10 +1241,14 @@@ dyn_install()
trap "abort_install" SIGINT SIGQUIT
ebuild_phase pre_src_install
rm -rf "${PORTAGE_BUILDDIR}/image"
+ is_auto-multilib && rm -rf "${PORTAGE_BUILDDIR}"/image.${ABI}
mkdir "${PORTAGE_BUILDDIR}/image"
+ for LOOP_ABI in $(get_abi_list); do
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
if [[ -d $S ]] ; then
cd "${S}"
- elif hasq $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to install; then
cd "${WORKDIR}"
@@@ -1341,23 -1212,6 +1342,23 @@@
then
>> DEBUGBUILD
fi
+
+ else
+ cd "${PORTAGE_BUILDDIR}"
- if [[ $EMERGE_FROM = binary ]] || ! hasq keepwork $FEATURES; then
++ if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
+ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,exit_status,logid,unpacked,prepared} \
+ "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
+ "$PORTAGE_BUILDDIR"/.die_hooks
+
+# rm -rf "${PORTAGE_BUILDDIR}/build-info"
+ rm -rf "${WORKDIR}"
+ fi
+
+ if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
+ find "${PORTAGE_BUILDDIR}" -type d ! -regex "^${WORKDIR}" | sort -r | tr "\n" "\0" | $XARGS -0 rmdir &>/dev/null
+ fi
+ fi
+
trap - SIGINT SIGQUIT
}
@@@ -2009,9 -1857,6 +2010,9 @@@ filter_readonly_variables()
${PORTAGE_MUTABLE_FILTERED_VARS}
"
fi
- if hasq --filter-metadata $* ; then
++ if has --filter-metadata $* ; then
+ filtered_vars+=" ${PORTAGE_READONLY_METADATA} filter_opts"
+ fi
"${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" || die "filter-bash-environment.py failed"
}
@@@ -2377,8 -2222,8 +2378,8 @@@ ebuild_main()
nofetch)
ebuild_phase_with_hooks pkg_nofetch
;;
- prerm|postrm|postinst|config|info)
+ config|info)
- if hasq "$EBUILD_SH_ARGS" config info && \
+ if has "$EBUILD_SH_ARGS" config info && \
! declare -F "pkg_$EBUILD_SH_ARGS" >/dev/null ; then
ewarn "pkg_${EBUILD_SH_ARGS}() is not defined: '${EBUILD##*/}'"
fi
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-07-21 19:18 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-07-21 19:18 UTC (permalink / raw
To: gentoo-commits
commit: 2a700978cad3adb6261821d5a95528de4d711b56
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 21 19:18:39 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Jul 21 19:18:39 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2a700978
Merge commit 'v2.2.0_alpha46' into multilib
bin/ebuild.sh | 3 +-
bin/isolated-functions.sh | 3 +-
bin/portageq | 3 +-
man/emerge.1 | 8 +--
pym/_emerge/Binpkg.py | 7 ++-
pym/_emerge/EbuildBuild.py | 32 +++++++-
pym/_emerge/EbuildFetcher.py | 123 +++++++++++++++++++++++---
pym/_emerge/Scheduler.py | 49 +++++------
pym/_emerge/actions.py | 8 +-
pym/_emerge/depgraph.py | 11 ---
pym/_emerge/help.py | 9 +--
pym/_emerge/main.py | 3 +-
pym/portage/dbapi/vartree.py | 3 +-
pym/portage/package/ebuild/doebuild.py | 1 +
pym/portage/util/_dyn_libs/LinkageMapELF.py | 58 +++++++++++--
15 files changed, 234 insertions(+), 87 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-07-28 17:07 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-07-28 17:07 UTC (permalink / raw
To: gentoo-commits
commit: 6047c312b9e02bfb205783476ac3e61d5295a20b
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 28 17:07:19 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Jul 28 17:07:19 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6047c312
Merge commit 'v2.2.0_alpha47' into multilib
pym/_emerge/BinpkgFetcher.py | 2 +
pym/_emerge/SpawnProcess.py | 14 ++-
pym/_emerge/actions.py | 10 ++-
pym/_emerge/main.py | 10 ++-
pym/portage/_sets/dbapi.py | 20 +--
pym/portage/_sets/libs.py | 21 ++-
pym/portage/dbapi/vartree.py | 20 ++-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 176 +++++++++++++++++++--------
8 files changed, 191 insertions(+), 82 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-08-01 16:53 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-08-01 16:53 UTC (permalink / raw
To: gentoo-commits
commit: cf5851aab90ecfd4546083e65d13edc6d576923d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Aug 1 16:53:10 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Aug 1 16:53:10 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=cf5851aa
Merge commit 'v2.2.0_alpha49' into multilib
NEWS | 6 ++
pym/_emerge/depgraph.py | 8 ++-
pym/_emerge/resolver/output.py | 9 ++-
pym/portage/dbapi/vartree.py | 128 +++++++++++++++++++++++++++++++---
pym/portage/package/ebuild/config.py | 2 +-
5 files changed, 139 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-08-05 12:29 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-08-05 12:29 UTC (permalink / raw
To: gentoo-commits
commit: e72ea5bf97883849db2ea371998ffe57ab3ecdda
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 5 12:29:37 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Aug 5 12:29:37 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e72ea5bf
Merge commit 'v2.2.0_alpha50' into multilib
bin/ebuild.sh | 4 +++-
pym/_emerge/depgraph.py | 2 +-
pym/_emerge/main.py | 8 +-------
pym/portage/dbapi/vartree.py | 36 +++++++++++++++++++++++++++++-------
4 files changed, 34 insertions(+), 16 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-08-16 12:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-08-16 12:20 UTC (permalink / raw
To: gentoo-commits
commit: f80075060915ae64f2d152166bc87f45d3ca1d79
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 16 12:20:20 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Aug 16 12:20:20 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f8007506
Merge commit 'v2.2.0_alpha51' into multilib
bin/portageq | 62 ++++++++++++---
bin/repoman | 25 ++++++
man/portage.5 | 1 +
man/repoman.1 | 3 +
pym/_emerge/Package.py | 6 --
pym/_emerge/Scheduler.py | 7 ++
pym/_emerge/actions.py | 91 +++++++++++-----------
pym/_emerge/depgraph.py | 12 ++--
pym/portage/dbapi/porttree.py | 5 -
pym/portage/dbapi/vartree.py | 44 +++++++++++
pym/portage/elog/mod_save.py | 25 ++++++-
pym/portage/elog/mod_save_summary.py | 18 ++++-
pym/portage/package/ebuild/config.py | 3 +
pym/portage/package/ebuild/doebuild.py | 27 ++++++-
pym/portage/package/ebuild/fetch.py | 11 +++-
pym/portage/package/ebuild/getmaskingstatus.py | 4 -
pym/portage/package/ebuild/prepare_build_dirs.py | 17 ++++-
pym/portage/repository/config.py | 2 +-
pym/repoman/checks.py | 2 +-
19 files changed, 275 insertions(+), 90 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-09-09 13:03 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-09-09 13:03 UTC (permalink / raw
To: gentoo-commits
commit: 34687a7f50063b4c1b6221b023b6ff20dc636e63
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Sep 9 13:01:59 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Sep 9 13:01:59 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=34687a7f
merge v2.2.0_alpha54
bin/dispatch-conf | 6 +-
bin/ebuild | 8 +-
bin/ebuild-helpers/dosym | 6 +
bin/ebuild.sh | 41 +---
bin/egencache | 32 ++-
bin/isolated-functions.sh | 7 +-
bin/repoman | 46 ++--
cnf/make.globals | 3 +
cnf/metadata.dtd | 99 +++++++
man/egencache.1 | 4 +
man/emerge.1 | 14 +-
man/make.conf.5 | 21 ++-
man/repoman.1 | 3 +-
pym/_emerge/AsynchronousLock.py | 13 +
pym/_emerge/BinpkgEnvExtractor.py | 2 +-
pym/_emerge/BlockerCache.py | 10 +-
pym/_emerge/EbuildBuild.py | 2 +-
pym/_emerge/EbuildPhase.py | 7 +-
pym/_emerge/PipeReader.py | 7 +-
pym/_emerge/PollScheduler.py | 3 +
pym/_emerge/Scheduler.py | 6 +-
pym/_emerge/SpawnProcess.py | 16 +-
pym/_emerge/actions.py | 27 ++-
pym/_emerge/depgraph.py | 155 +++++------
pym/_emerge/help.py | 18 +-
pym/_emerge/main.py | 62 ++++-
pym/_emerge/search.py | 26 ++-
pym/portage/__init__.py | 32 ++-
pym/portage/_sets/__init__.py | 9 +-
pym/portage/const.py | 3 +-
pym/portage/data.py | 3 +
pym/portage/dbapi/vartree.py | 88 ++++--
pym/portage/elog/messages.py | 6 +-
pym/portage/elog/mod_echo.py | 13 +
pym/portage/elog/mod_save.py | 3 +-
pym/portage/elog/mod_save_summary.py | 3 +-
pym/portage/getbinpkg.py | 2 +-
pym/portage/news.py | 7 +-
pym/portage/output.py | 12 +-
.../package/ebuild/_config/LocationsManager.py | 10 +-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/config.py | 11 +
pym/portage/package/ebuild/doebuild.py | 127 ++++++++-
pym/portage/package/ebuild/prepare_build_dirs.py | 6 +-
pym/portage/repository/config.py | 16 +-
pym/portage/tests/__init__.py | 34 ++-
.../tests/ebuild/test_array_fromfile_eof.py | 12 +-
pym/portage/tests/ebuild/test_doebuild_spawn.py | 4 +-
pym/portage/tests/ebuild/test_pty_eof.py | 13 +
pym/portage/tests/{dbapi => emerge}/__init__.py | 0
pym/portage/tests/{bin => emerge}/__test__ | 0
pym/portage/tests/emerge/test_simple.py | 294 ++++++++++++++++++++
.../test_lazy_import_portage_baseline.py | 2 +-
pym/portage/tests/process/test_poll.py | 10 +-
pym/portage/tests/{dbapi => repoman}/__init__.py | 0
pym/portage/tests/{bin => repoman}/__test__ | 0
pym/portage/tests/repoman/test_simple.py | 160 +++++++++++
pym/portage/tests/resolver/ResolverPlayground.py | 84 +++++-
pym/portage/tests/resolver/test_rebuild.py | 65 +++--
pym/portage/tests/runTests | 2 +-
pym/portage/update.py | 16 +-
pym/portage/util/ExtractKernelVersion.py | 2 +
pym/portage/util/__init__.py | 13 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 1 +
.../util/_dyn_libs/PreservedLibsRegistry.py | 22 +-
pym/portage/util/_pty.py | 9 +-
pym/portage/util/env_update.py | 42 ++--
pym/portage/util/mtimedb.py | 8 +-
pym/portage/xml/metadata.py | 49 +++-
pym/portage/xpak.py | 11 +-
pym/repoman/utilities.py | 2 +-
runtests.sh | 2 +-
72 files changed, 1458 insertions(+), 398 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-09-11 14:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-09-11 14:33 UTC (permalink / raw
To: gentoo-commits
commit: 375a9f2a59b734492d3d105f9272f1d2b9829fb4
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 11 14:33:01 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Sep 11 14:33:01 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=375a9f2a
Merge commit 'v2.2.0_alpha55' into multilib
bin/egencache | 29 +++++++++++++++++----
pym/_emerge/depgraph.py | 8 +++++-
pym/portage/__init__.py | 40 +++++++++++++++++--------------
pym/portage/cache/volatile.py | 8 ++++-
pym/portage/dbapi/porttree.py | 33 +++++++++++++++++++++----
pym/portage/getbinpkg.py | 15 +++++++++--
pym/portage/tests/emerge/test_simple.py | 1 -
7 files changed, 97 insertions(+), 37 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-01 13:56 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-01 13:56 UTC (permalink / raw
To: gentoo-commits
commit: e3101f17239f2f3f410e93fc3369c4692d6af7b3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 1 13:54:17 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Oct 1 13:54:17 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e3101f17
Merge v2.2.0_alpha58
bin/bashrc-functions.sh | 140 ++
bin/ebuild | 27 +-
bin/ebuild.sh | 2150 ++--------------------
bin/isolated-functions.sh | 163 +--
bin/phase-functions.sh | 1163 ++++++++++++
bin/phase-helpers.sh | 626 +++++++
bin/repoman | 43 +-
bin/save-ebuild-env.sh | 97 +
man/portage.5 | 4 +
pym/_emerge/EbuildFetcher.py | 6 +-
pym/_emerge/depgraph.py | 141 +-
pym/_emerge/search.py | 5 +-
pym/portage/dbapi/porttree.py | 9 +-
pym/portage/dep/__init__.py | 8 +
pym/portage/manifest.py | 178 ++-
pym/portage/package/ebuild/config.py | 13 +
pym/portage/package/ebuild/digestcheck.py | 50 +-
pym/portage/package/ebuild/digestgen.py | 17 +-
pym/portage/package/ebuild/doebuild.py | 39 +-
pym/portage/package/ebuild/fetch.py | 4 +-
pym/portage/repository/config.py | 216 ++-
pym/portage/tests/ebuild/test_config.py | 65 +
pym/portage/tests/repoman/test_simple.py | 7 +-
pym/portage/tests/resolver/ResolverPlayground.py | 28 +-
pym/portage/tests/resolver/test_multislot.py | 16 +-
pym/portage/tests/resolver/test_virtual_slot.py | 93 +
pym/portage/util/__init__.py | 4 +-
pym/repoman/checks.py | 1 +
28 files changed, 2844 insertions(+), 2469 deletions(-)
diff --cc bin/ebuild.sh
index 26cb611,7b77c10..aebdb17
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@@ -5,6 -5,48 +5,49 @@@
PORTAGE_BIN_PATH="${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"
PORTAGE_PYM_PATH="${PORTAGE_PYM_PATH:-/usr/lib/portage/pym}"
+ ROOTPATH=${ROOTPATH##:}
+ ROOTPATH=${ROOTPATH%%:}
+ PREROOTPATH=${PREROOTPATH##:}
+ PREROOTPATH=${PREROOTPATH%%:}
+ PATH=$PORTAGE_BIN_PATH/ebuild-helpers:$PREROOTPATH${PREROOTPATH:+:}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${ROOTPATH:+:}$ROOTPATH
+ export PATH
+
+ # Prevent aliases from causing portage to act inappropriately.
+ # Make sure it's before everything so we don't mess aliases that follow.
+ unalias -a
+
+ source "${PORTAGE_BIN_PATH}/isolated-functions.sh" || exit 1
++source "${PORTAGE_BIN_PATH}/auto-multilib.sh" || exit 1
+
+ if [[ $EBUILD_PHASE != depend ]] ; then
+ source "${PORTAGE_BIN_PATH}/phase-functions.sh" || die
+ source "${PORTAGE_BIN_PATH}/save-ebuild-env.sh" || die
+ source "${PORTAGE_BIN_PATH}/phase-helpers.sh" || die
+ source "${PORTAGE_BIN_PATH}/bashrc-functions.sh" || die
+ else
+ # These dummy functions are for things that are likely to be called
+ # in global scope, even though they are completely useless during
+ # the "depend" phase.
+ for x in diropts docompress exeopts get_KV insopts \
+ keepdir KV_major KV_micro KV_minor KV_to_int \
+ libopts register_die_hook register_success_hook \
+ remove_path_entry set_unless_changed strip_duplicate_slashes \
+ unset_unless_changed use_with use_enable ; do
+ eval "${x}() { : ; }"
+ done
+ # These dummy functions return false, in order to ensure that
+ # `use multislot` is false for the "depend" phase.
+ for x in use useq usev ; do
+ eval "${x}() { return 1; }"
+ done
+ # These functions die because calls to them during the "depend" phase
+ # are considered to be severe QA violations.
+ for x in best_version has_version portageq ; do
+ eval "${x}() { die \"\${FUNCNAME} calls are not allowed in global scope\"; }"
+ done
+ unset x
+ fi
+
if [[ $PORTAGE_SANDBOX_COMPAT_LEVEL -lt 22 ]] ; then
# Ensure that /dev/std* streams have appropriate sandbox permission for
# bug #288863. This can be removed after sandbox is fixed and portage
@@@ -59,1353 -94,72 +95,73 @@@ qa_call()
[[ $shopts != $(shopt) ]] &&
eqawarn "QA Notice: Global shell options changed and were not restored while calling '$*'"
[[ "$IFS" != "$OLDIFS" ]] &&
- eqawarn "QA Notice: Global IFS changed and was not restored while calling '$*'"
- return $retval
- }
-
- EBUILD_SH_ARGS="$*"
-
- shift $#
-
- # Prevent aliases from causing portage to act inappropriately.
- # Make sure it's before everything so we don't mess aliases that follow.
- unalias -a
-
- # Unset some variables that break things.
- unset GZIP BZIP BZIP2 CDPATH GREP_OPTIONS GREP_COLOR GLOBIGNORE
-
- source "${PORTAGE_BIN_PATH}/isolated-functions.sh" &>/dev/null
- source "${PORTAGE_BIN_PATH}/auto-multilib.sh" &>/dev/null
-
- [[ $PORTAGE_QUIET != "" ]] && export PORTAGE_QUIET
-
- # sandbox support functions; defined prior to profile.bashrc srcing, since the profile might need to add a default exception (/usr/lib64/conftest fex)
- _sb_append_var() {
- local _v=$1 ; shift
- local var="SANDBOX_${_v}"
- [[ -z $1 || -n $2 ]] && die "Usage: add$(echo ${_v} | \
- LC_ALL=C tr [:upper:] [:lower:]) <colon-delimited list of paths>"
- export ${var}="${!var:+${!var}:}$1"
- }
- # bash-4 version:
- # local var="SANDBOX_${1^^}"
- # addread() { _sb_append_var ${0#add} "$@" ; }
- addread() { _sb_append_var READ "$@" ; }
- addwrite() { _sb_append_var WRITE "$@" ; }
- adddeny() { _sb_append_var DENY "$@" ; }
- addpredict() { _sb_append_var PREDICT "$@" ; }
-
- addwrite "${PORTAGE_TMPDIR}"
- addread "/:${PORTAGE_TMPDIR}"
- [[ -n ${PORTAGE_GPG_DIR} ]] && addpredict "${PORTAGE_GPG_DIR}"
-
- # Avoid sandbox violations in temporary directories.
- if [[ -w $T ]] ; then
- export TEMP=$T
- export TMP=$T
- export TMPDIR=$T
- elif [[ $SANDBOX_ON = 1 ]] ; then
- for x in TEMP TMP TMPDIR ; do
- [[ -n ${!x} ]] && addwrite "${!x}"
- done
- unset x
- fi
-
- # the sandbox is disabled by default except when overridden in the relevant stages
- export SANDBOX_ON=0
-
- lchown() {
- chown -h "$@"
- }
-
- lchgrp() {
- chgrp -h "$@"
- }
-
- esyslog() {
- # Custom version of esyslog() to take care of the "Red Star" bug.
- # MUST follow functions.sh to override the "" parameter problem.
- return 0
- }
-
- useq() {
- has $EBUILD_PHASE prerm postrm || eqawarn \
- "QA Notice: The 'useq' function is deprecated (replaced by 'use')"
- use ${1}
- }
-
- usev() {
- if use ${1}; then
- echo "${1#!}"
- return 0
- fi
- return 1
- }
-
- use() {
- local u=$1
- local found=0
-
- # if we got something like '!flag', then invert the return value
- if [[ ${u:0:1} == "!" ]] ; then
- u=${u:1}
- found=1
- fi
-
- if [[ $EBUILD_PHASE = depend ]] ; then
- # TODO: Add a registration interface for eclasses to register
- # any number of phase hooks, so that global scope eclass
- # initialization can by migrated to phase hooks in new EAPIs.
- # Example: add_phase_hook before pkg_setup $ECLASS_pre_pkg_setup
- #if [[ -n $EAPI ]] && ! has "$EAPI" 0 1 2 3 ; then
- # die "use() called during invalid phase: $EBUILD_PHASE"
- #fi
- true
-
- # Make sure we have this USE flag in IUSE
- elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE ]] ; then
- if [[ $u != multilib ]]; then
- [[ $u =~ $PORTAGE_IUSE ]] || \
- eqawarn "QA Notice: USE Flag '${u}' not" \
- "in IUSE for ${CATEGORY}/${PF}"
- fi
- fi
-
- if has ${u} ${USE} ; then
- return ${found}
- else
- return $((!found))
- fi
- }
-
- # Return true if given package is installed. Otherwise return false.
- # Takes single depend-type atoms.
- has_version() {
- if [ "${EBUILD_PHASE}" == "depend" ]; then
- die "portageq calls (has_version calls portageq) are not allowed in the global scope"
- fi
-
- if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
- "$PORTAGE_BIN_PATH"/ebuild-ipc has_version "$ROOT" "$1"
- else
- PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \
- "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/portageq" has_version "${ROOT}" "$1"
- fi
- local retval=$?
- case "${retval}" in
- 0|1)
- return ${retval}
- ;;
- *)
- die "unexpected portageq exit code: ${retval}"
- ;;
- esac
- }
-
- portageq() {
- if [ "${EBUILD_PHASE}" == "depend" ]; then
- die "portageq calls are not allowed in the global scope"
- fi
-
- PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \
- "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/portageq" "$@"
- }
-
-
- # ----------------------------------------------------------------------------
- # ----------------------------------------------------------------------------
- # ----------------------------------------------------------------------------
-
-
- # Returns the best/most-current match.
- # Takes single depend-type atoms.
- best_version() {
- if [ "${EBUILD_PHASE}" == "depend" ]; then
- die "portageq calls (best_version calls portageq) are not allowed in the global scope"
- fi
-
- if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
- "$PORTAGE_BIN_PATH"/ebuild-ipc best_version "$ROOT" "$1"
- else
- PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \
- "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/portageq" 'best_version' "${ROOT}" "$1"
- fi
- local retval=$?
- case "${retval}" in
- 0|1)
- return ${retval}
- ;;
- *)
- die "unexpected portageq exit code: ${retval}"
- ;;
- esac
- }
-
- use_with() {
- if [ -z "$1" ]; then
- echo "!!! use_with() called without a parameter." >&2
- echo "!!! use_with <USEFLAG> [<flagname> [value]]" >&2
- return 1
- fi
-
- if ! has "${EAPI:-0}" 0 1 2 3 ; then
- local UW_SUFFIX=${3+=$3}
- else
- local UW_SUFFIX=${3:+=$3}
- fi
- local UWORD=${2:-$1}
-
- if use $1; then
- echo "--with-${UWORD}${UW_SUFFIX}"
- else
- echo "--without-${UWORD}"
- fi
- return 0
- }
-
- use_enable() {
- if [ -z "$1" ]; then
- echo "!!! use_enable() called without a parameter." >&2
- echo "!!! use_enable <USEFLAG> [<flagname> [value]]" >&2
- return 1
- fi
-
- if ! has "${EAPI:-0}" 0 1 2 3 ; then
- local UE_SUFFIX=${3+=$3}
- else
- local UE_SUFFIX=${3:+=$3}
- fi
- local UWORD=${2:-$1}
-
- if use $1; then
- echo "--enable-${UWORD}${UE_SUFFIX}"
- else
- echo "--disable-${UWORD}"
- fi
- return 0
- }
-
- register_die_hook() {
- local x
- for x in $* ; do
- has $x $EBUILD_DEATH_HOOKS || \
- export EBUILD_DEATH_HOOKS="$EBUILD_DEATH_HOOKS $x"
- done
- }
-
- register_success_hook() {
- local x
- for x in $* ; do
- has $x $EBUILD_SUCCESS_HOOKS || \
- export EBUILD_SUCCESS_HOOKS="$EBUILD_SUCCESS_HOOKS $x"
- done
- }
-
- # Ensure that $PWD is sane whenever possible, to protect against
- # exploitation of insecure search path for python -c in ebuilds.
- # See bug #239560.
- if ! has "$EBUILD_PHASE" clean cleanrm depend help ; then
- cd "$PORTAGE_BUILDDIR" || \
- die "PORTAGE_BUILDDIR does not exist: '$PORTAGE_BUILDDIR'"
- fi
-
- #if no perms are specified, dirs/files will have decent defaults
- #(not secretive, but not stupid)
- umask 022
- export DESTTREE=/usr
- export INSDESTTREE=""
- export _E_EXEDESTTREE_=""
- export _E_DOCDESTTREE_=""
- export INSOPTIONS="-m0644"
- export EXEOPTIONS="-m0755"
- export LIBOPTIONS="-m0644"
- export DIROPTIONS="-m0755"
- export MOPREFIX=${PN}
- declare -a PORTAGE_DOCOMPRESS=( /usr/share/{doc,info,man} )
- declare -a PORTAGE_DOCOMPRESS_SKIP=( /usr/share/doc/${PF}/html )
-
- # adds ".keep" files so that dirs aren't auto-cleaned
- keepdir() {
- dodir "$@"
- local x
- if [ "$1" == "-R" ] || [ "$1" == "-r" ]; then
- shift
- find "$@" -type d -printf "${D}%p/.keep_${CATEGORY}_${PN}-${SLOT}\n" \
- | tr "\n" "\0" | \
- while read -r -d $'\0' ; do
- >> "$REPLY" || \
- die "Failed to recursively create .keep files"
- done
- else
- for x in "$@"; do
- >> "${D}${x}/.keep_${CATEGORY}_${PN}-${SLOT}" || \
- die "Failed to create .keep in ${D}${x}"
- done
- fi
- }
-
- unpack() {
- local srcdir
- local x
- local y
- local myfail
- local eapi=${EAPI:-0}
- [ -z "$*" ] && die "Nothing passed to the 'unpack' command"
-
- for x in "$@"; do
- vecho ">>> Unpacking ${x} to ${PWD}"
- y=${x%.*}
- y=${y##*.}
-
- if [[ ${x} == "./"* ]] ; then
- srcdir=""
- elif [[ ${x} == ${DISTDIR%/}/* ]] ; then
- die "Arguments to unpack() cannot begin with \${DISTDIR}."
- elif [[ ${x} == "/"* ]] ; then
- die "Arguments to unpack() cannot be absolute"
- else
- srcdir="${DISTDIR}/"
- fi
- [[ ! -s ${srcdir}${x} ]] && die "${x} does not exist"
-
- _unpack_tar() {
- if [ "${y}" == "tar" ]; then
- $1 -c -- "$srcdir$x" | tar xof -
- assert_sigpipe_ok "$myfail"
- else
- local cwd_dest=${x##*/}
- cwd_dest=${cwd_dest%.*}
- $1 -c -- "${srcdir}${x}" > "${cwd_dest}" || die "$myfail"
- fi
- }
-
- myfail="failure unpacking ${x}"
- case "${x##*.}" in
- tar)
- tar xof "$srcdir$x" || die "$myfail"
- ;;
- tgz)
- tar xozf "$srcdir$x" || die "$myfail"
- ;;
- tbz|tbz2)
- ${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d} -c -- "$srcdir$x" | tar xof -
- assert_sigpipe_ok "$myfail"
- ;;
- ZIP|zip|jar)
- # unzip will interactively prompt under some error conditions,
- # as reported in bug #336285
- ( while true ; do echo n || break ; done ) | \
- unzip -qo "${srcdir}${x}" || die "$myfail"
- ;;
- gz|Z|z)
- _unpack_tar "gzip -d"
- ;;
- bz2|bz)
- _unpack_tar "${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d}"
- ;;
- 7Z|7z)
- local my_output
- my_output="$(7z x -y "${srcdir}${x}")"
- if [ $? -ne 0 ]; then
- echo "${my_output}" >&2
- die "$myfail"
- fi
- ;;
- RAR|rar)
- unrar x -idq -o+ "${srcdir}${x}" || die "$myfail"
- ;;
- LHa|LHA|lha|lzh)
- lha xfq "${srcdir}${x}" || die "$myfail"
- ;;
- a)
- ar x "${srcdir}${x}" || die "$myfail"
- ;;
- deb)
- # Unpacking .deb archives can not always be done with
- # `ar`. For instance on AIX this doesn't work out. If
- # we have `deb2targz` installed, prefer it over `ar` for
- # that reason. We just make sure on AIX `deb2targz` is
- # installed.
- if type -P deb2targz > /dev/null; then
- y=${x##*/}
- local created_symlink=0
- if [ ! "$srcdir$x" -ef "$y" ] ; then
- # deb2targz always extracts into the same directory as
- # the source file, so create a symlink in the current
- # working directory if necessary.
- ln -sf "$srcdir$x" "$y" || die "$myfail"
- created_symlink=1
- fi
- deb2targz "$y" || die "$myfail"
- if [ $created_symlink = 1 ] ; then
- # Clean up the symlink so the ebuild
- # doesn't inadvertently install it.
- rm -f "$y"
- fi
- mv -f "${y%.deb}".tar.gz data.tar.gz || die "$myfail"
- else
- ar x "$srcdir$x" || die "$myfail"
- fi
- ;;
- lzma)
- _unpack_tar "lzma -d"
- ;;
- xz)
- if has $eapi 0 1 2 ; then
- vecho "unpack ${x}: file format not recognized. Ignoring."
- else
- _unpack_tar "xz -d"
- fi
- ;;
- *)
- vecho "unpack ${x}: file format not recognized. Ignoring."
- ;;
- esac
- done
- # Do not chmod '.' since it's probably ${WORKDIR} and PORTAGE_WORKDIR_MODE
- # should be preserved.
- find . -mindepth 1 -maxdepth 1 ! -type l -print0 | \
- ${XARGS} -0 chmod -fR a+rX,u+w,g-w,o-w
- }
-
- strip_duplicate_slashes() {
- if [[ -n $1 ]] ; then
- local removed=$1
- while [[ ${removed} == *//* ]] ; do
- removed=${removed//\/\///}
- done
- echo ${removed}
- fi
- }
-
- hasg() {
- local x s=$1
- shift
- for x ; do [[ ${x} == ${s} ]] && echo "${x}" && return 0 ; done
- return 1
- }
- hasgq() { hasg "$@" >/dev/null ; }
- econf() {
- local x
-
- local phase_func=$(_ebuild_arg_to_phase "$EAPI" "$EBUILD_PHASE")
- if [[ -n $phase_func ]] ; then
- if has "$EAPI" 0 1 ; then
- [[ $phase_func != src_compile ]] && \
- eqawarn "QA Notice: econf called in" \
- "$phase_func instead of src_compile"
- else
- [[ $phase_func != src_configure ]] && \
- eqawarn "QA Notice: econf called in" \
- "$phase_func instead of src_configure"
- fi
- fi
-
- : ${ECONF_SOURCE:=.}
- if [ -x "${ECONF_SOURCE}/configure" ]; then
- if [[ -n $CONFIG_SHELL && \
- "$(head -n1 "$ECONF_SOURCE/configure")" =~ ^'#!'[[:space:]]*/bin/sh([[:space:]]|$) ]] ; then
- sed -e "1s:^#![[:space:]]*/bin/sh:#!$CONFIG_SHELL:" -i "$ECONF_SOURCE/configure" || \
- die "Substition of shebang in '$ECONF_SOURCE/configure' failed"
- fi
- if [ -e /usr/share/gnuconfig/ ]; then
- find "${WORKDIR}" -type f '(' \
- -name config.guess -o -name config.sub ')' -print0 | \
- while read -r -d $'\0' x ; do
- vecho " * econf: updating ${x/${WORKDIR}\/} with /usr/share/gnuconfig/${x##*/}"
- cp -f /usr/share/gnuconfig/"${x##*/}" "${x}"
- done
- fi
-
- # EAPI=4 adds --disable-dependency-tracking to econf
- if ! has "$EAPI" 0 1 2 3 3_pre2 && \
- "${ECONF_SOURCE}/configure" --help 2>/dev/null | \
- grep -q disable-dependency-tracking ; then
- set -- --disable-dependency-tracking "$@"
- fi
-
- # if the profile defines a location to install libs to aside from default, pass it on.
- # if the ebuild passes in --libdir, they're responsible for the conf_libdir fun.
- local CONF_LIBDIR LIBDIR_VAR="LIBDIR_${ABI}"
- if [[ -n ${ABI} && -n ${!LIBDIR_VAR} ]] ; then
- CONF_LIBDIR=${!LIBDIR_VAR}
- fi
- if [[ -n ${CONF_LIBDIR} ]] && ! hasgq --libdir=\* "$@" ; then
- export CONF_PREFIX=$(hasg --exec-prefix=\* "$@")
- [[ -z ${CONF_PREFIX} ]] && CONF_PREFIX=$(hasg --prefix=\* "$@")
- : ${CONF_PREFIX:=/usr}
- CONF_PREFIX=${CONF_PREFIX#*=}
- [[ ${CONF_PREFIX} != /* ]] && CONF_PREFIX="/${CONF_PREFIX}"
- [[ ${CONF_LIBDIR} != /* ]] && CONF_LIBDIR="/${CONF_LIBDIR}"
- set -- --libdir="$(strip_duplicate_slashes ${CONF_PREFIX}${CONF_LIBDIR})" "$@"
- fi
-
- set -- \
- --prefix=/usr \
- ${CBUILD:+--build=${CBUILD}} \
- --host=${CHOST} \
- ${CTARGET:+--target=${CTARGET}} \
- --mandir=/usr/share/man \
- --infodir=/usr/share/info \
- --datadir=/usr/share \
- --sysconfdir=/etc \
- --localstatedir=/var/lib \
- "$@" \
- ${EXTRA_ECONF}
- vecho "${ECONF_SOURCE}/configure" "$@"
-
- if ! "${ECONF_SOURCE}/configure" "$@" ; then
-
- if [ -s config.log ]; then
- echo
- echo "!!! Please attach the following file when seeking support:"
- echo "!!! ${PWD}/config.log"
- fi
- die "econf failed"
- fi
- elif [ -f "${ECONF_SOURCE}/configure" ]; then
- die "configure is not executable"
- else
- die "no configure script found"
- fi
- }
-
- einstall() {
- # CONF_PREFIX is only set if they didn't pass in libdir above.
- local LOCAL_EXTRA_EINSTALL="${EXTRA_EINSTALL}"
- LIBDIR_VAR="LIBDIR_${ABI}"
- if [ -n "${ABI}" -a -n "${!LIBDIR_VAR}" ]; then
- CONF_LIBDIR="${!LIBDIR_VAR}"
- fi
- unset LIBDIR_VAR
- if [ -n "${CONF_LIBDIR}" ] && [ "${CONF_PREFIX:+set}" = set ]; then
- EI_DESTLIBDIR="${D}/${CONF_PREFIX}/${CONF_LIBDIR}"
- EI_DESTLIBDIR="$(strip_duplicate_slashes ${EI_DESTLIBDIR})"
- LOCAL_EXTRA_EINSTALL="libdir=${EI_DESTLIBDIR} ${LOCAL_EXTRA_EINSTALL}"
- unset EI_DESTLIBDIR
- fi
-
- if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
- if [ "${PORTAGE_DEBUG}" == "1" ]; then
- ${MAKE:-make} -n prefix="${D}usr" \
- datadir="${D}usr/share" \
- infodir="${D}usr/share/info" \
- localstatedir="${D}var/lib" \
- mandir="${D}usr/share/man" \
- sysconfdir="${D}etc" \
- ${LOCAL_EXTRA_EINSTALL} \
- ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
- "$@" install
- fi
- ${MAKE:-make} prefix="${D}usr" \
- datadir="${D}usr/share" \
- infodir="${D}usr/share/info" \
- localstatedir="${D}var/lib" \
- mandir="${D}usr/share/man" \
- sysconfdir="${D}etc" \
- ${LOCAL_EXTRA_EINSTALL} \
- ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
- "$@" install || die "einstall failed"
- else
- die "no Makefile found"
- fi
- }
-
- _eapi0_pkg_nofetch() {
- [ -z "${SRC_URI}" ] && return
-
- elog "The following are listed in SRC_URI for ${PN}:"
- local x
- for x in $(echo ${SRC_URI}); do
- elog " ${x}"
- done
- }
-
- _eapi0_src_unpack() {
- [[ -n ${A} ]] && unpack ${A}
- }
-
- _eapi0_src_compile() {
- if [ -x ./configure ] ; then
- econf
- fi
- _eapi2_src_compile
- }
-
- _eapi0_src_test() {
- # Since we don't want emake's automatic die
- # support (EAPI 4 and later), and we also don't
- # want the warning messages that it produces if
- # we call it in 'nonfatal' mode, we use emake_cmd
- # to emulate the desired parts of emake behavior.
- local emake_cmd="${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE}"
- if $emake_cmd -j1 check -n &> /dev/null; then
- vecho ">>> Test phase [check]: ${CATEGORY}/${PF}"
- if ! $emake_cmd -j1 check; then
- has test $FEATURES && die "Make check failed. See above for details."
- has test $FEATURES || eerror "Make check failed. See above for details."
- fi
- elif $emake_cmd -j1 test -n &> /dev/null; then
- vecho ">>> Test phase [test]: ${CATEGORY}/${PF}"
- if ! $emake_cmd -j1 test; then
- has test $FEATURES && die "Make test failed. See above for details."
- has test $FEATURES || eerror "Make test failed. See above for details."
- fi
- else
- vecho ">>> Test phase [none]: ${CATEGORY}/${PF}"
- fi
- }
-
- _eapi1_src_compile() {
- _eapi2_src_configure
- _eapi2_src_compile
- }
-
- _eapi2_src_configure() {
- if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then
- econf
- fi
- }
-
- _eapi2_src_compile() {
- if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ]; then
- emake || die "emake failed"
- fi
- }
-
- _eapi4_src_install() {
- if [[ -f Makefile || -f GNUmakefile || -f makefile ]] ; then
- emake DESTDIR="${D}" install
- fi
-
- if ! declare -p DOCS &>/dev/null ; then
- local d
- for d in README* ChangeLog AUTHORS NEWS TODO CHANGES \
- THANKS BUGS FAQ CREDITS CHANGELOG ; do
- [[ -s "${d}" ]] && dodoc "${d}"
- done
- elif [[ $(declare -p DOCS) == "declare -a "* ]] ; then
- dodoc "${DOCS[@]}"
- else
- dodoc ${DOCS}
- fi
- }
-
- ebuild_phase() {
- declare -F "$1" >/dev/null && qa_call $1
- }
-
- ebuild_phase_with_hooks() {
- local x phase_name=${1}
- for x in {pre_,,post_}${phase_name} ; do
- ebuild_phase ${x}
- done
- }
-
- dyn_pretend() {
- if [[ -e $PORTAGE_BUILDDIR/.pretended ]] ; then
- vecho ">>> It appears that '$PF' is already pretended; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
- return 0
- fi
- ebuild_phase pre_pkg_pretend
- ebuild_phase pkg_pretend
- >> "$PORTAGE_BUILDDIR/.pretended" || \
- die "Failed to create $PORTAGE_BUILDDIR/.pretended"
- ebuild_phase post_pkg_pretend
- }
-
- dyn_setup() {
- if ! is_auto-multilib && ! use multilib_abi_"${DEFAULT_ABI}" ; then
- ewarn
- ewarn "You disabled all ABIs"
- ewarn "You should enable at least one ABI"
- ewarn "Enabling the default ABI now"
- ewarn
- fi
- for LOOP_ABI in $(get_abi_list); do
- set_abi ${LOOP_ABI}
- if is_ebuild; then
- source "${T}"/environment || die
- else
- rm -f "${T}"/environment
- fi
-
- if [[ -e $PORTAGE_BUILDDIR/.setuped.${ABI} ]] ; then
- vecho ">>> It appears that '$PF' is already setup; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped.${ABI}' to force setup."
- return 0
- fi
- ebuild_phase pre_pkg_setup
- ebuild_phase pkg_setup
- >> "$PORTAGE_BUILDDIR/.setuped.${ABI}" || \
- die "Failed to create $PORTAGE_BUILDDIR/.setuped"
- ebuild_phase post_pkg_setup
-
- is_ebuild && { unset_abi; source "${T}"/environment || die ; }
- done
- is_ebuild && { rm "${T}"/environment || die ; }
- }
-
- dyn_unpack() {
- if [[ -f ${PORTAGE_BUILDDIR}/.unpacked ]] ; then
- vecho ">>> WORKDIR is up-to-date, keeping..."
- return 0
- fi
- if [ ! -d "${WORKDIR}" ]; then
- install -m${PORTAGE_WORKDIR_MODE:-0700} -d "${WORKDIR}" || die "Failed to create dir '${WORKDIR}'"
- fi
- cd "${WORKDIR}" || die "Directory change failed: \`cd '${WORKDIR}'\`"
- ebuild_phase pre_src_unpack
- vecho ">>> Unpacking source$(_get_abi_string)..."
- ebuild_phase src_unpack
-
- if is_auto-multilib && is_ebuild; then
- >> "$PORTAGE_BUILDDIR"/.unpacked."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .unpacked.${LOOP_ABI}'"
- fi
- is_ebuild && { unset_abi; source "${T}"/environment || die ; }
-
- is_ebuild && { rm "${T}"/environment || die ; }
- >> "$PORTAGE_BUILDDIR/.unpacked" || \
- die "Failed to create $PORTAGE_BUILDDIR/.unpacked"
- vecho ">>> Source unpacked in ${WORKDIR}"
- ebuild_phase post_src_unpack
- }
-
- dyn_clean() {
- if [ -z "${PORTAGE_BUILDDIR}" ]; then
- echo "Aborting clean phase because PORTAGE_BUILDDIR is unset!"
- return 1
- elif [ ! -d "${PORTAGE_BUILDDIR}" ] ; then
- return 0
- fi
- if has chflags $FEATURES ; then
- chflags -R noschg,nouchg,nosappnd,nouappnd "${PORTAGE_BUILDDIR}"
- chflags -R nosunlnk,nouunlnk "${PORTAGE_BUILDDIR}" 2>/dev/null
- fi
-
- rm -rf "${PORTAGE_BUILDDIR}"/image* "${PORTAGE_BUILDDIR}/homedir"
- rm -f "${PORTAGE_BUILDDIR}"/.installed*
-
- if [[ $EMERGE_FROM = binary ]] || \
- ! has keeptemp $FEATURES && ! has keepwork $FEATURES ; then
- rm -rf "${T}"
- fi
-
- if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
- "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*} \
- "$PORTAGE_BUILDDIR"/.{die_hooks,abi} \
- "$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
- "$PORTAGE_BUILDDIR"/.exit_status
-
- rm -rf "${PORTAGE_BUILDDIR}/"{build-info,abi-code}
- rm -rf "${WORKDIR}"*
- fi
-
- if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
- find "${PORTAGE_BUILDDIR}" -type d ! -regex "^${WORKDIR}" | sort -r | tr "\n" "\0" | $XARGS -0 rmdir &>/dev/null
- fi
-
- # do not bind this to doebuild defined DISTDIR; don't trust doebuild, and if mistakes are made it'll
- # result in it wiping the users distfiles directory (bad).
- rm -rf "${PORTAGE_BUILDDIR}/distdir"
-
- # Some kernels, such as Solaris, return EINVAL when an attempt
- # is made to remove the current working directory.
- cd "$PORTAGE_BUILDDIR"/../..
- rmdir "$PORTAGE_BUILDDIR" 2>/dev/null
-
- true
- }
-
- into() {
- if [ "$1" == "/" ]; then
- export DESTTREE=""
- else
- export DESTTREE=$1
- if [ ! -d "${D}${DESTTREE}" ]; then
- install -d "${D}${DESTTREE}"
- local ret=$?
- if [[ $ret -ne 0 ]] ; then
- helpers_die "${FUNCNAME[0]} failed"
- return $ret
- fi
- fi
- fi
- }
-
- insinto() {
- if [ "$1" == "/" ]; then
- export INSDESTTREE=""
- else
- export INSDESTTREE=$1
- if [ ! -d "${D}${INSDESTTREE}" ]; then
- install -d "${D}${INSDESTTREE}"
- local ret=$?
- if [[ $ret -ne 0 ]] ; then
- helpers_die "${FUNCNAME[0]} failed"
- return $ret
- fi
- fi
- fi
- }
-
- exeinto() {
- if [ "$1" == "/" ]; then
- export _E_EXEDESTTREE_=""
- else
- export _E_EXEDESTTREE_="$1"
- if [ ! -d "${D}${_E_EXEDESTTREE_}" ]; then
- install -d "${D}${_E_EXEDESTTREE_}"
- local ret=$?
- if [[ $ret -ne 0 ]] ; then
- helpers_die "${FUNCNAME[0]} failed"
- return $ret
- fi
- fi
- fi
- }
-
- docinto() {
- if [ "$1" == "/" ]; then
- export _E_DOCDESTTREE_=""
- else
- export _E_DOCDESTTREE_="$1"
- if [ ! -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}" ]; then
- install -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
- local ret=$?
- if [[ $ret -ne 0 ]] ; then
- helpers_die "${FUNCNAME[0]} failed"
- return $ret
- fi
- fi
- fi
- }
-
- insopts() {
- export INSOPTIONS="$@"
-
- # `install` should never be called with '-s' ...
- has -s ${INSOPTIONS} && die "Never call insopts() with -s"
- }
-
- diropts() {
- export DIROPTIONS="$@"
- }
-
- exeopts() {
- export EXEOPTIONS="$@"
-
- # `install` should never be called with '-s' ...
- has -s ${EXEOPTIONS} && die "Never call exeopts() with -s"
- }
-
- libopts() {
- export LIBOPTIONS="$@"
-
- # `install` should never be called with '-s' ...
- has -s ${LIBOPTIONS} && die "Never call libopts() with -s"
- }
-
- docompress() {
- has "${EAPI}" 0 1 2 3 && die "'docompress' not supported in this EAPI"
-
- local f g
- if [[ $1 = "-x" ]]; then
- shift
- for f; do
- f=$(strip_duplicate_slashes "${f}"); f=${f%/}
- [[ ${f:0:1} = / ]] || f="/${f}"
- for g in "${PORTAGE_DOCOMPRESS_SKIP[@]}"; do
- [[ ${f} = "${g}" ]] && continue 2
- done
- PORTAGE_DOCOMPRESS_SKIP[${#PORTAGE_DOCOMPRESS_SKIP[@]}]=${f}
- done
- else
- for f; do
- f=$(strip_duplicate_slashes "${f}"); f=${f%/}
- [[ ${f:0:1} = / ]] || f="/${f}"
- for g in "${PORTAGE_DOCOMPRESS[@]}"; do
- [[ ${f} = "${g}" ]] && continue 2
- done
- PORTAGE_DOCOMPRESS[${#PORTAGE_DOCOMPRESS[@]}]=${f}
- done
- fi
- }
-
- abort_handler() {
- local msg
- if [ "$2" != "fail" ]; then
- msg="${EBUILD}: ${1} aborted; exiting."
- else
- msg="${EBUILD}: ${1} failed; exiting."
- fi
- echo
- echo "$msg"
- echo
- eval ${3}
- #unset signal handler
- trap - SIGINT SIGQUIT
- }
-
- abort_prepare() {
- abort_handler src_prepare $1
- rm -f "$PORTAGE_BUILDDIR/.prepared"
- exit 1
- }
-
- abort_configure() {
- abort_handler src_configure $1
- rm -f "$PORTAGE_BUILDDIR/.configured"
- exit 1
- }
-
- abort_compile() {
- abort_handler "src_compile" $1
- rm -f "${PORTAGE_BUILDDIR}/.compiled"
- exit 1
- }
-
- abort_test() {
- abort_handler "dyn_test" $1
- rm -f "${PORTAGE_BUILDDIR}/.tested"
- exit 1
- }
-
- abort_install() {
- abort_handler "src_install" $1
- rm -rf "${PORTAGE_BUILDDIR}"/{image,image.*}
- exit 1
- }
-
- has_phase_defined_up_to() {
- local phase
- for phase in unpack prepare configure compile install; do
- has ${phase} ${DEFINED_PHASES} && return 0
- [[ ${phase} == $1 ]] && return 1
- done
- # We shouldn't actually get here
- return 1
- }
-
- dyn_prepare() {
-
- if [[ -e $PORTAGE_BUILDDIR/.prepared ]] ; then
- vecho ">>> It appears that '$PF' is already prepared; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
- return 0
- fi
-
- for LOOP_ABI in $(get_abi_list); do
- is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
-
- if [ "${PORTAGE_BUILDDIR}"/.prepared.${LOOP_ABI} -nt "${WORKDIR}" ]; then
- echo ">>> It appears that ${PN} is already prepared for ABI=${LOOP_ABI}; skipping."
- echo ">>> Remove '$PORTAGE_BUILDDIR/.prepared.${LOOP_ABI}' to force prepare."
- continue
- fi
- if [[ -d $S ]] ; then
- cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
- cd "${WORKDIR}"
- elif [[ -z ${A} ]] && ! has_phase_defined_up_to prepare; then
- cd "${WORKDIR}"
- else
- die "The source directory '${S}' doesn't exist"
- fi
-
- trap abort_prepare SIGINT SIGQUIT
-
- ebuild_phase pre_src_prepare
- vecho ">>> Preparing source in ${PWD}$(_get_abi_string) ..."
- ebuild_phase src_prepare
-
- if is_auto-multilib && is_ebuild; then
- >> "$PORTAGE_BUILDDIR"/.prepared."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .prepared.${LOOP_ABI}'"
- fi
- is_ebuild && { unset_abi; source "${T}"/environment || die ; }
- done
- is_ebuild && { rm "${T}"/environment || die ; }
-
- >> "$PORTAGE_BUILDDIR/.prepared" || \
- die "Failed to create $PORTAGE_BUILDDIR/.prepared"
- vecho ">>> Source prepared."
- ebuild_phase post_src_prepare
-
- trap - SIGINT SIGQUIT
- }
-
- dyn_configure() {
-
- if [[ -e $PORTAGE_BUILDDIR/.configured ]] ; then
- vecho ">>> It appears that '$PF' is already configured; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.configured' to force configuration."
- return 0
- fi
-
- for LOOP_ABI in $(get_abi_list); do
- is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
-
- if [ ${PORTAGE_BUILDDIR}/.configured.${LOOP_ABI} -nt "${WORKDIR}" ]; then
- echo ">>> It appears that ${PN} is already configured for ABI=${LOOP_ABI}; skipping."
- echo ">>> Remove '$PORTAGE_BUILDDIR/.configured.${LOOP_ABI}' to force configuration."
- continue
- fi
- if [[ -d $S ]] ; then
- cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
- cd "${WORKDIR}"
- elif [[ -z ${A} ]] && ! has_phase_defined_up_to configure; then
- cd "${WORKDIR}"
- else
- die "The source directory '${S}' doesn't exist"
- fi
-
- trap abort_configure SIGINT SIGQUIT
-
- ebuild_phase pre_src_configure
-
- vecho ">>> Configuring source in ${PWD}$(_get_abi_string) ..."
- ebuild_phase src_configure
-
- if is_auto-multilib && is_ebuild; then
- >> "$PORTAGE_BUILDDIR"/.configured."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .configured.${LOOP_ABI}'"
- fi
- is_ebuild && { unset_abi; source "${T}"/environment || die ; }
- done
- is_ebuild && { rm "${T}"/environment || die ; }
- >> "$PORTAGE_BUILDDIR/.configured" || \
- die "Failed to create $PORTAGE_BUILDDIR/.configured"
- vecho ">>> Source configured."
-
- ebuild_phase post_src_configure
-
- trap - SIGINT SIGQUIT
- }
-
- dyn_compile() {
-
- if [[ -e $PORTAGE_BUILDDIR/.compiled ]] ; then
- vecho ">>> It appears that '${PF}' is already compiled; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.compiled' to force compilation."
- return 0
- fi
-
- for LOOP_ABI in $(get_abi_list); do
- is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
-
- if [ ${PORTAGE_BUILDDIR}/.compiled.${LOOP_ABI} -nt "${WORKDIR}" ]; then
- echo ">>> It appears that ${PN} is already compiled for ABI=${LOOP_ABI}; skipping."
- echo ">>> Remove '$PORTAGE_BUILDDIR/.compiled.${LOOP_ABI}' to force compilation."
- continue
- fi
- if [[ -d $S ]] ; then
- cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
- cd "${WORKDIR}"
- elif [[ -z ${A} ]] && ! has_phase_defined_up_to compile; then
- cd "${WORKDIR}"
- else
- die "The source directory '${S}' doesn't exist"
- fi
-
- trap abort_compile SIGINT SIGQUIT
-
- if has distcc $FEATURES && has distcc-pump $FEATURES ; then
- if [[ -z $INCLUDE_SERVER_PORT ]] || [[ ! -w $INCLUDE_SERVER_PORT ]] ; then
- eval $(pump --startup)
- trap "pump --shutdown" EXIT
- fi
- fi
-
- ebuild_phase pre_src_compile
-
- vecho ">>> Compiling source in ${PWD}$(_get_abi_string) ..."
- ebuild_phase src_compile
-
- if is_auto-multilib && is_ebuild; then
- >> "$PORTAGE_BUILDDIR"/.compiled."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .compiled.${LOOP_ABI}'"
- fi
- is_ebuild && { unset_abi; source "${T}"/environment || die ; }
- done
- is_ebuild && { rm "${T}"/environment || die ; }
- >> "$PORTAGE_BUILDDIR/.compiled" || \
- die "Failed to create $PORTAGE_BUILDDIR/.compiled"
- vecho ">>> Source compiled."
-
- ebuild_phase post_src_compile
-
- trap - SIGINT SIGQUIT
- }
-
- dyn_test() {
-
- if [[ -e $PORTAGE_BUILDDIR/.tested ]] ; then
- vecho ">>> It appears that ${PN} has already been tested; skipping."
- vecho ">>> Remove '${PORTAGE_BUILDDIR}/.tested' to force test."
- return
- fi
-
- if [ "${EBUILD_FORCE_TEST}" == "1" ] ; then
- # If USE came from ${T}/environment then it might not have USE=test
- # like it's supposed to here.
- ! has test ${USE} && export USE="${USE} test"
- fi
-
- trap "abort_test" SIGINT SIGQUIT
- for LOOP_ABI in $(get_abi_list); do
- is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
-
- if [ -d "${S}" ]; then
- cd "${S}"
- else
- cd "${WORKDIR}"
- fi
-
- if ! has test $FEATURES && [ "${EBUILD_FORCE_TEST}" != "1" ]; then
- vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
- elif has test $RESTRICT; then
- einfo "Skipping make test/check due to ebuild restriction."
- vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
- else
- if [ ${PORTAGE_BUILDDIR}/.tested.${LOOP_ABI} -nt "${WORKDIR}" ]; then
- echo ">>> It appears that ${PN} is already tested for ABI=${LOOP_ABI}; skipping."
- echo ">>> Remove '$PORTAGE_BUILDDIR/.tested.${LOOP_ABI}' to force testing."
- continue
- fi
-
- local save_sp=${SANDBOX_PREDICT}
- addpredict /
- ebuild_phase pre_src_test
- ebuild_phase src_test
-
- if is_auto-multilib && is_ebuild; then
- >> "$PORTAGE_BUILDDIR"/.tested."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .tested.${LOOP_ABI}'"
- fi
- >> "$PORTAGE_BUILDDIR/.tested" || \
- die "Failed to create $PORTAGE_BUILDDIR/.tested"
- ebuild_phase post_src_test
- SANDBOX_PREDICT=${save_sp}
- fi
-
- is_ebuild && { unset_abi; source "${T}"/environment || die ; }
- done
- is_ebuild && { rm "${T}"/environment || die ; }
-
- trap - SIGINT SIGQUIT
- }
-
- dyn_install() {
- [ -z "$PORTAGE_BUILDDIR" ] && die "${FUNCNAME}: PORTAGE_BUILDDIR is unset"
- if has noauto $FEATURES ; then
- rm -f "${PORTAGE_BUILDDIR}/.installed"
- elif [[ -e $PORTAGE_BUILDDIR/.installed ]] ; then
- vecho ">>> It appears that '${PF}' is already installed; skipping."
- vecho ">>> Remove '${PORTAGE_BUILDDIR}/.installed' to force install."
- return 0
- fi
- trap "abort_install" SIGINT SIGQUIT
- ebuild_phase pre_src_install
- rm -rf "${PORTAGE_BUILDDIR}/image"
- is_auto-multilib && rm -rf "${PORTAGE_BUILDDIR}"/image.${ABI}
- mkdir "${PORTAGE_BUILDDIR}/image"
- for LOOP_ABI in $(get_abi_list); do
- is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
-
- if [[ -d $S ]] ; then
- cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
- cd "${WORKDIR}"
- elif [[ -z ${A} ]] && ! has_phase_defined_up_to install; then
- cd "${WORKDIR}"
- else
- die "The source directory '${S}' doesn't exist"
- fi
-
- vecho
- vecho ">>> Install ${PF} into ${D} category ${CATEGORY}"
- #our custom version of libtool uses $S and $D to fix
- #invalid paths in .la files
- export S D
-
- # Reset exeinto(), docinto(), insinto(), and into() state variables
- # in case the user is running the install phase multiple times
- # consecutively via the ebuild command.
- export DESTTREE=/usr
- export INSDESTTREE=""
- export _E_EXEDESTTREE_=""
- export _E_DOCDESTTREE_=""
-
- ebuild_phase src_install
-
- if is_auto-multilib ; then
- _finalize_abi_install
- cp "${T}"/environment "${PORTAGE_BUILDDIR}"/build-info/environment.${LOOP_ABI} || die
- if is_ebuild; then
- unset_abi; source "${T}"/environment || die
- touch "$PORTAGE_BUILDDIR"/.installed."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .installed.${LOOP_ABI}'"
- fi
- fi
- done
- if [[ -d "${D}" ]]; then
- if [[ "${CATEGORY}/${PN}" == "sys-devel/libtool" ]] ; then
- ewarn "Preserving libltdl.la because of extensive usage"
- ewarn "even in m4 macros of libtool"
- else
- find "${D}" -name '*.la' ! -exec grep -q shouldnotlink=yes {} \; -exec rm {} \;
- /usr/bin/lafilefixer "${D}"
- fi
-
- >> "$PORTAGE_BUILDDIR/.installed" || \
- die "Failed to create $PORTAGE_BUILDDIR/.installed"
- vecho ">>> Completed installing ${PF} into ${D}"
- vecho
- ebuild_phase post_src_install
-
- cd "${PORTAGE_BUILDDIR}"/build-info
- set -f
- local f x
- IFS=$' \t\n\r'
- for f in CATEGORY DEFINED_PHASES FEATURES INHERITED IUSE REQUIRED_USE \
- PF PKGUSE SLOT KEYWORDS HOMEPAGE DESCRIPTION ; do
- x=$(echo -n ${!f})
- [[ -n $x ]] && echo "$x" > $f
- done
- if [[ $CATEGORY != virtual ]] ; then
- for f in ASFLAGS CBUILD CC CFLAGS CHOST CTARGET CXX \
- CXXFLAGS EXTRA_ECONF EXTRA_EINSTALL EXTRA_MAKE \
- LDFLAGS LIBCFLAGS LIBCXXFLAGS ; do
- x=$(echo -n ${!f})
- [[ -n $x ]] && echo "$x" > $f
- done
- fi
- if has_multilib_profile ; then
- local i= x=
- for i in ${MULTILIB_ABIS} ; do
- x+=" multilib_abi_${i}"
- done
- echo "${IUSE}${x}" > IUSE
- fi
- echo "${USE}" > USE
- echo "${EAPI:-0}" > EAPI
- if is_auto-multilib; then
- echo "$(get_abi_order)" > MULTILIB_ABIS
- fi
- set +f
-
- # local variables can leak into the saved environment.
- unset f
-
- save_ebuild_env --exclude-init-phases | filter_readonly_variables \
- --filter-path --filter-sandbox --allow-extra-vars > environment
- assert "save_ebuild_env failed"
+ eqawarn "QA Notice: Global IFS changed and was not restored while calling '$*'"
+ return $retval
+ }
- ${PORTAGE_BZIP2_COMMAND} -f9 environment*
+ EBUILD_SH_ARGS="$*"
- cp "${EBUILD}" "${PF}.ebuild"
- [ -n "${PORTAGE_REPO_NAME}" ] && echo "${PORTAGE_REPO_NAME}" > repository
- if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT}
- then
- >> DEBUGBUILD
- fi
+ shift $#
- else
- cd "${PORTAGE_BUILDDIR}"
- if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,exit_status,logid,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
- "$PORTAGE_BUILDDIR"/.die_hooks
-
- # rm -rf "${PORTAGE_BUILDDIR}/build-info"
- rm -rf "${WORKDIR}"
- fi
+ # Unset some variables that break things.
+ unset GZIP BZIP BZIP2 CDPATH GREP_OPTIONS GREP_COLOR GLOBIGNORE
- if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
- find "${PORTAGE_BUILDDIR}" -type d ! -regex "^${WORKDIR}" | sort -r | tr "\n" "\0" | $XARGS -0 rmdir &>/dev/null
- fi
- fi
+ [[ $PORTAGE_QUIET != "" ]] && export PORTAGE_QUIET
- trap - SIGINT SIGQUIT
+ # sandbox support functions; defined prior to profile.bashrc srcing, since the profile might need to add a default exception (/usr/lib64/conftest fex)
+ _sb_append_var() {
+ local _v=$1 ; shift
+ local var="SANDBOX_${_v}"
+ [[ -z $1 || -n $2 ]] && die "Usage: add$(echo ${_v} | \
+ LC_ALL=C tr [:upper:] [:lower:]) <colon-delimited list of paths>"
+ export ${var}="${!var:+${!var}:}$1"
}
+ # bash-4 version:
+ # local var="SANDBOX_${1^^}"
+ # addread() { _sb_append_var ${0#add} "$@" ; }
+ addread() { _sb_append_var READ "$@" ; }
+ addwrite() { _sb_append_var WRITE "$@" ; }
+ adddeny() { _sb_append_var DENY "$@" ; }
+ addpredict() { _sb_append_var PREDICT "$@" ; }
- dyn_preinst() {
- if [ -z "${D}" ]; then
- eerror "${FUNCNAME}: D is unset"
- return 1
- fi
- for LOOP_ABI in $(get_abi_order); do
- set_abi ${LOOP_ABI}; source "${T}"/environment || die
-
- ebuild_phase_with_hooks pkg_preinst
+ addwrite "${PORTAGE_TMPDIR}"
+ addread "/:${PORTAGE_TMPDIR}"
+ [[ -n ${PORTAGE_GPG_DIR} ]] && addpredict "${PORTAGE_GPG_DIR}"
- unset_abi; source "${T}"/environment || die
+ # Avoid sandbox violations in temporary directories.
+ if [[ -w $T ]] ; then
+ export TEMP=$T
+ export TMP=$T
+ export TMPDIR=$T
+ elif [[ $SANDBOX_ON = 1 ]] ; then
+ for x in TEMP TMP TMPDIR ; do
+ [[ -n ${!x} ]] && addwrite "${!x}"
done
- }
+ unset x
+ fi
- dyn_help() {
- echo
- echo "Portage"
- echo "Copyright 1999-2010 Gentoo Foundation"
- echo
- echo "How to use the ebuild command:"
- echo
- echo "The first argument to ebuild should be an existing .ebuild file."
- echo
- echo "One or more of the following options can then be specified. If more"
- echo "than one option is specified, each will be executed in order."
- echo
- echo " help : show this help screen"
- echo " pretend : execute package specific pretend actions"
- echo " setup : execute package specific setup actions"
- echo " fetch : download source archive(s) and patches"
- echo " digest : create a manifest file for the package"
- echo " manifest : create a manifest file for the package"
- echo " unpack : unpack sources (auto-dependencies if needed)"
- echo " prepare : prepare sources (auto-dependencies if needed)"
- echo " configure : configure sources (auto-fetch/unpack if needed)"
- echo " compile : compile sources (auto-fetch/unpack/configure if needed)"
- echo " test : test package (auto-fetch/unpack/configure/compile if needed)"
- echo " preinst : execute pre-install instructions"
- echo " postinst : execute post-install instructions"
- echo " install : install the package to the temporary install directory"
- echo " qmerge : merge image into live filesystem, recording files in db"
- echo " merge : do fetch, unpack, compile, install and qmerge"
- echo " prerm : execute pre-removal instructions"
- echo " postrm : execute post-removal instructions"
- echo " unmerge : remove package from live filesystem"
- echo " config : execute package specific configuration actions"
- echo " package : create a tarball package in ${PKGDIR}/All"
- echo " rpm : build a RedHat RPM package"
- echo " clean : clean up all source and temporary files"
- echo
- echo "The following settings will be used for the ebuild process:"
- echo
- echo " package : ${PF}"
- echo " slot : ${SLOT}"
- echo " category : ${CATEGORY}"
- echo " description : ${DESCRIPTION}"
- echo " system : ${CHOST}"
- echo " c flags : ${CFLAGS}"
- echo " c++ flags : ${CXXFLAGS}"
- echo " make flags : ${MAKEOPTS}"
- echo -n " build mode : "
- if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT} ;
- then
- echo "debug (large)"
- else
- echo "production (stripped)"
- fi
- echo " merge to : ${ROOT}"
- echo
- if [ -n "$USE" ]; then
- echo "Additionally, support for the following optional features will be enabled:"
- echo
- echo " ${USE}"
- fi
- echo
+ # the sandbox is disabled by default except when overridden in the relevant stages
+ export SANDBOX_ON=0
+
+ esyslog() {
+ # Custom version of esyslog() to take care of the "Red Star" bug.
+ # MUST follow functions.sh to override the "" parameter problem.
+ return 0
}
+ # Ensure that $PWD is sane whenever possible, to protect against
+ # exploitation of insecure search path for python -c in ebuilds.
+ # See bug #239560.
+ if ! has "$EBUILD_PHASE" clean cleanrm depend help ; then
+ cd "$PORTAGE_BUILDDIR" || \
+ die "PORTAGE_BUILDDIR does not exist: '$PORTAGE_BUILDDIR'"
+ fi
++>>>>>>> v2.2.0_alpha58
+
+ #if no perms are specified, dirs/files will have decent defaults
+ #(not secretive, but not stupid)
+ umask 022
+
# debug-print() gets called from many places with verbose status information useful
# for tracking down problems. The output is in $T/eclass-debug.log.
# You can set ECLASS_DEBUG_OUTPUT to redirect the output somewhere else as well.
diff --cc bin/phase-functions.sh
index 0000000,164b309..6fc8b51
mode 000000,100644..100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -1,0 -1,970 +1,1163 @@@
+ #!/bin/bash
+ # Copyright 1999-2011 Gentoo Foundation
+ # Distributed under the terms of the GNU General Public License v2
+
+ # Hardcoded bash lists are needed for backward compatibility with
+ # <portage-2.1.4 since they assume that a newly installed version
+ # of ebuild.sh will work for pkg_postinst, pkg_prerm, and pkg_postrm
+ # when portage is upgrading itself.
+
+ PORTAGE_READONLY_METADATA="DEFINED_PHASES DEPEND DESCRIPTION
+ EAPI HOMEPAGE INHERITED IUSE REQUIRED_USE KEYWORDS LICENSE
+ PDEPEND PROVIDE RDEPEND RESTRICT SLOT SRC_URI"
+
+ PORTAGE_READONLY_VARS="D EBUILD EBUILD_PHASE \
+ EBUILD_SH_ARGS ECLASSDIR EMERGE_FROM FILESDIR MERGE_TYPE \
+ PM_EBUILD_HOOK_DIR \
+ PORTAGE_ACTUAL_DISTDIR PORTAGE_ARCHLIST PORTAGE_BASHRC \
+ PORTAGE_BINPKG_FILE PORTAGE_BINPKG_TAR_OPTS PORTAGE_BINPKG_TMPFILE \
+ PORTAGE_BIN_PATH PORTAGE_BUILDDIR PORTAGE_BUNZIP2_COMMAND \
+ PORTAGE_BZIP2_COMMAND PORTAGE_COLORMAP PORTAGE_CONFIGROOT \
+ PORTAGE_DEBUG PORTAGE_DEPCACHEDIR PORTAGE_EBUILD_EXIT_FILE \
+ PORTAGE_GID PORTAGE_GRPNAME PORTAGE_INST_GID PORTAGE_INST_UID \
+ PORTAGE_IPC_DAEMON PORTAGE_IUSE PORTAGE_LOG_FILE \
+ PORTAGE_MUTABLE_FILTERED_VARS PORTAGE_PYM_PATH PORTAGE_PYTHON \
+ PORTAGE_READONLY_METADATA PORTAGE_READONLY_VARS \
+ PORTAGE_REPO_NAME PORTAGE_RESTRICT PORTAGE_SANDBOX_COMPAT_LEVEL \
+ PORTAGE_SAVED_READONLY_VARS PORTAGE_SIGPIPE_STATUS \
+ PORTAGE_TMPDIR PORTAGE_UPDATE_ENV PORTAGE_USERNAME \
+ PORTAGE_VERBOSE PORTAGE_WORKDIR_MODE PORTDIR PORTDIR_OVERLAY \
+ PROFILE_PATHS REPLACING_VERSIONS REPLACED_BY_VERSION T WORKDIR"
+
+ PORTAGE_SAVED_READONLY_VARS="A CATEGORY P PF PN PR PV PVR"
+
+ # Variables that portage sets but doesn't mark readonly.
+ # In order to prevent changed values from causing unexpected
+ # interference, they are filtered out of the environment when
+ # it is saved or loaded (any mutations do not persist).
+ PORTAGE_MUTABLE_FILTERED_VARS="AA HOSTNAME"
+
+ # @FUNCTION: filter_readonly_variables
+ # @DESCRIPTION: [--filter-sandbox] [--allow-extra-vars]
+ # Read an environment from stdin and echo to stdout while filtering variables
+ # with names that are known to cause interference:
+ #
+ # * some specific variables for which bash does not allow assignment
+ # * some specific variables that affect portage or sandbox behavior
+ # * variable names that begin with a digit or that contain any
+ # non-alphanumeric characters that are not be supported by bash
+ #
+ # --filter-sandbox causes all SANDBOX_* variables to be filtered, which
+ # is only desired in certain cases, such as during preprocessing or when
+ # saving environment.bz2 for a binary or installed package.
+ #
+ # --filter-features causes the special FEATURES variable to be filtered.
+ # Generally, we want it to persist between phases since the user might
+ # want to modify it via bashrc to enable things like splitdebug and
+ # installsources for specific packages. They should be able to modify it
+ # in pre_pkg_setup() and have it persist all the way through the install
+ # phase. However, if FEATURES exist inside environment.bz2 then they
+ # should be overridden by current settings.
+ #
+ # --filter-locale causes locale related variables such as LANG and LC_*
+ # variables to be filtered. These variables should persist between phases,
+ # in case they are modified by the ebuild. However, the current user
+ # settings should be used when loading the environment from a binary or
+ # installed package.
+ #
+ # --filter-path causes the PATH variable to be filtered. This variable
+ # should persist between phases, in case it is modified by the ebuild.
+ # However, old settings should be overridden when loading the
+ # environment from a binary or installed package.
+ #
+ # ---allow-extra-vars causes some extra vars to be allowd through, such
+ # as ${PORTAGE_SAVED_READONLY_VARS} and ${PORTAGE_MUTABLE_FILTERED_VARS}.
+ #
+ # In bash-3.2_p20+ an attempt to assign BASH_*, FUNCNAME, GROUPS or any
+ # readonly variable cause the shell to exit while executing the "source"
+ # builtin command. To avoid this problem, this function filters those
+ # variables out and discards them. See bug #190128.
+ filter_readonly_variables() {
+ local x filtered_vars
+ local readonly_bash_vars="BASHOPTS BASHPID DIRSTACK EUID
+ FUNCNAME GROUPS PIPESTATUS PPID SHELLOPTS UID"
+ local bash_misc_vars="BASH BASH_.* COMP_WORDBREAKS HISTCMD
+ HISTFILE HOSTNAME HOSTTYPE IFS LINENO MACHTYPE OLDPWD
+ OPTERR OPTIND OSTYPE POSIXLY_CORRECT PS4 PWD RANDOM
+ SECONDS SHELL SHLVL"
+ local filtered_sandbox_vars="SANDBOX_ACTIVE SANDBOX_BASHRC
+ SANDBOX_DEBUG_LOG SANDBOX_DISABLED SANDBOX_LIB
+ SANDBOX_LOG SANDBOX_ON"
+ local misc_garbage_vars="_portage_filter_opts"
+ filtered_vars="$readonly_bash_vars $bash_misc_vars
+ $PORTAGE_READONLY_VARS $misc_garbage_vars"
+
+ # Don't filter/interfere with prefix variables unless they are
+ # supported by the current EAPI.
+ case "${EAPI:-0}" in
+ 0|1|2)
+ ;;
+ *)
+ filtered_vars+=" ED EPREFIX EROOT"
+ ;;
+ esac
+
+ if has --filter-sandbox $* ; then
+ filtered_vars="${filtered_vars} SANDBOX_.*"
+ else
+ filtered_vars="${filtered_vars} ${filtered_sandbox_vars}"
+ fi
+ if has --filter-features $* ; then
+ filtered_vars="${filtered_vars} FEATURES PORTAGE_FEATURES"
+ fi
+ if has --filter-path $* ; then
+ filtered_vars+=" PATH"
+ fi
+ if has --filter-locale $* ; then
+ filtered_vars+=" LANG LC_ALL LC_COLLATE
+ LC_CTYPE LC_MESSAGES LC_MONETARY
+ LC_NUMERIC LC_PAPER LC_TIME"
+ fi
+ if ! has --allow-extra-vars $* ; then
+ filtered_vars="
+ ${filtered_vars}
+ ${PORTAGE_SAVED_READONLY_VARS}
+ ${PORTAGE_MUTABLE_FILTERED_VARS}
+ "
+ fi
++ if has --filter-metadata $* ; then
++ filtered_vars+=" ${PORTAGE_READONLY_METADATA} filter_opts"
++ fi
+
+ "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" || die "filter-bash-environment.py failed"
+ }
+
+ # @FUNCTION: preprocess_ebuild_env
+ # @DESCRIPTION:
+ # Filter any readonly variables from ${T}/environment, source it, and then
+ # save it via save_ebuild_env(). This process should be sufficient to prevent
+ # any stale variables or functions from an arbitrary environment from
+ # interfering with the current environment. This is useful when an existing
+ # environment needs to be loaded from a binary or installed package.
+ preprocess_ebuild_env() {
+ local _portage_filter_opts="--filter-features --filter-locale --filter-path --filter-sandbox"
+
+ # If environment.raw is present, this is a signal from the python side,
+ # indicating that the environment may contain stale FEATURES and
+ # SANDBOX_{DENY,PREDICT,READ,WRITE} variables that should be filtered out.
+ # Otherwise, we don't need to filter the environment.
+ [ -f "${T}/environment.raw" ] || return 0
+
+ filter_readonly_variables $_portage_filter_opts < "${T}"/environment \
+ >> "$T/environment.filtered" || return $?
+ unset _portage_filter_opts
+ mv "${T}"/environment.filtered "${T}"/environment || return $?
+ rm -f "${T}/environment.success" || return $?
+ # WARNING: Code inside this subshell should avoid making assumptions
+ # about variables or functions after source "${T}"/environment has been
+ # called. Any variables that need to be relied upon should already be
+ # filtered out above.
+ (
+ export SANDBOX_ON=1
+ source "${T}/environment" || exit $?
+ # We have to temporarily disable sandbox since the
+ # SANDBOX_{DENY,READ,PREDICT,WRITE} values we've just loaded
+ # may be unusable (triggering in spurious sandbox violations)
+ # until we've merged them with our current values.
+ export SANDBOX_ON=0
+
+ # It's remotely possible that save_ebuild_env() has been overridden
+ # by the above source command. To protect ourselves, we override it
+ # here with our own version. ${PORTAGE_BIN_PATH} is safe to use here
+ # because it's already filtered above.
+ source "${PORTAGE_BIN_PATH}/save-ebuild-env.sh" || exit $?
+
+ # Rely on save_ebuild_env() to filter out any remaining variables
+ # and functions that could interfere with the current environment.
+ save_ebuild_env || exit $?
+ >> "$T/environment.success" || exit $?
+ ) > "${T}/environment.filtered"
+ local retval
+ if [ -e "${T}/environment.success" ] ; then
+ filter_readonly_variables --filter-features < \
+ "${T}/environment.filtered" > "${T}/environment"
+ retval=$?
+ else
+ retval=1
+ fi
+ rm -f "${T}"/environment.{filtered,raw,success}
+ return ${retval}
+ }
+
+ ebuild_phase() {
+ declare -F "$1" >/dev/null && qa_call $1
+ }
+
+ ebuild_phase_with_hooks() {
+ local x phase_name=${1}
+ for x in {pre_,,post_}${phase_name} ; do
+ ebuild_phase ${x}
+ done
+ }
+
+ dyn_pretend() {
+ if [[ -e $PORTAGE_BUILDDIR/.pretended ]] ; then
+ vecho ">>> It appears that '$PF' is already pretended; skipping."
+ vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
+ return 0
+ fi
+ ebuild_phase pre_pkg_pretend
+ ebuild_phase pkg_pretend
+ >> "$PORTAGE_BUILDDIR/.pretended" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.pretended"
+ ebuild_phase post_pkg_pretend
+ }
+
+ dyn_setup() {
- if [[ -e $PORTAGE_BUILDDIR/.setuped ]] ; then
++ if ! is_auto-multilib && ! use multilib_abi_"${DEFAULT_ABI}" ; then
++ ewarn
++ ewarn "You disabled all ABIs"
++ ewarn "You should enable at least one ABI"
++ ewarn "Enabling the default ABI now"
++ ewarn
++ fi
++ for LOOP_ABI in $(get_abi_list); do
++ set_abi ${LOOP_ABI}
++ if is_ebuild; then
++ source "${T}"/environment || die
++ else
++ rm -f "${T}"/environment
++ fi
++ if [[ -e $PORTAGE_BUILDDIR/.setuped.${ABI} ]] ; then
+ vecho ">>> It appears that '$PF' is already setup; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
++ vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped.${ABI}' to force setup."
+ return 0
+ fi
+ ebuild_phase pre_pkg_setup
+ ebuild_phase pkg_setup
- >> "$PORTAGE_BUILDDIR/.setuped" || \
++ >> "$PORTAGE_BUILDDIR/.setuped.${ABI}" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.setuped"
+ ebuild_phase post_pkg_setup
++
++ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
++ done
++ is_ebuild && { rm "${T}"/environment || die ; }
+ }
+
+ dyn_unpack() {
+ if [[ -f ${PORTAGE_BUILDDIR}/.unpacked ]] ; then
+ vecho ">>> WORKDIR is up-to-date, keeping..."
+ return 0
+ fi
+ if [ ! -d "${WORKDIR}" ]; then
+ install -m${PORTAGE_WORKDIR_MODE:-0700} -d "${WORKDIR}" || die "Failed to create dir '${WORKDIR}'"
+ fi
+ cd "${WORKDIR}" || die "Directory change failed: \`cd '${WORKDIR}'\`"
+ ebuild_phase pre_src_unpack
- vecho ">>> Unpacking source..."
++ vecho ">>> Unpacking source$(_get_abi_string)..."
+ ebuild_phase src_unpack
++
++ if is_auto-multilib && is_ebuild; then
++ >> "$PORTAGE_BUILDDIR"/.unpacked."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .unpacked.${LOOP_ABI}'"
++ fi
++ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
++
++ is_ebuild && { rm "${T}"/environment || die ; }
+ >> "$PORTAGE_BUILDDIR/.unpacked" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.unpacked"
+ vecho ">>> Source unpacked in ${WORKDIR}"
+ ebuild_phase post_src_unpack
+ }
+
+ dyn_clean() {
+ if [ -z "${PORTAGE_BUILDDIR}" ]; then
+ echo "Aborting clean phase because PORTAGE_BUILDDIR is unset!"
+ return 1
+ elif [ ! -d "${PORTAGE_BUILDDIR}" ] ; then
+ return 0
+ fi
+ if has chflags $FEATURES ; then
+ chflags -R noschg,nouchg,nosappnd,nouappnd "${PORTAGE_BUILDDIR}"
+ chflags -R nosunlnk,nouunlnk "${PORTAGE_BUILDDIR}" 2>/dev/null
+ fi
+
- rm -rf "${PORTAGE_BUILDDIR}/image" "${PORTAGE_BUILDDIR}/homedir"
- rm -f "${PORTAGE_BUILDDIR}/.installed"
++ rm -rf "${PORTAGE_BUILDDIR}"/image* "${PORTAGE_BUILDDIR}/homedir"
++ rm -f "${PORTAGE_BUILDDIR}"/.installed*
+
+ if [[ $EMERGE_FROM = binary ]] || \
+ ! has keeptemp $FEATURES && ! has keepwork $FEATURES ; then
+ rm -rf "${T}"
+ fi
+
+ if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended,setuped,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
++ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
++ "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*} \
+ "$PORTAGE_BUILDDIR"/.die_hooks \
+ "$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
+ "$PORTAGE_BUILDDIR"/.exit_status
+
- rm -rf "${PORTAGE_BUILDDIR}/build-info"
- rm -rf "${WORKDIR}"
++ rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
++ rm -rf "${WORKDIR}"*
+ fi
+
+ if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
+ find "${PORTAGE_BUILDDIR}" -type d ! -regex "^${WORKDIR}" | sort -r | tr "\n" "\0" | $XARGS -0 rmdir &>/dev/null
+ fi
+
+ # do not bind this to doebuild defined DISTDIR; don't trust doebuild, and if mistakes are made it'll
+ # result in it wiping the users distfiles directory (bad).
+ rm -rf "${PORTAGE_BUILDDIR}/distdir"
+
+ # Some kernels, such as Solaris, return EINVAL when an attempt
+ # is made to remove the current working directory.
+ cd "$PORTAGE_BUILDDIR"/../..
+ rmdir "$PORTAGE_BUILDDIR" 2>/dev/null
+
+ true
+ }
+
+ abort_handler() {
+ local msg
+ if [ "$2" != "fail" ]; then
+ msg="${EBUILD}: ${1} aborted; exiting."
+ else
+ msg="${EBUILD}: ${1} failed; exiting."
+ fi
+ echo
+ echo "$msg"
+ echo
+ eval ${3}
+ #unset signal handler
+ trap - SIGINT SIGQUIT
+ }
+
+ abort_prepare() {
+ abort_handler src_prepare $1
+ rm -f "$PORTAGE_BUILDDIR/.prepared"
+ exit 1
+ }
+
+ abort_configure() {
+ abort_handler src_configure $1
+ rm -f "$PORTAGE_BUILDDIR/.configured"
+ exit 1
+ }
+
+ abort_compile() {
+ abort_handler "src_compile" $1
+ rm -f "${PORTAGE_BUILDDIR}/.compiled"
+ exit 1
+ }
+
+ abort_test() {
+ abort_handler "dyn_test" $1
+ rm -f "${PORTAGE_BUILDDIR}/.tested"
+ exit 1
+ }
+
+ abort_install() {
+ abort_handler "src_install" $1
+ rm -rf "${PORTAGE_BUILDDIR}/image"
+ exit 1
+ }
+
+ has_phase_defined_up_to() {
+ local phase
+ for phase in unpack prepare configure compile install; do
+ has ${phase} ${DEFINED_PHASES} && return 0
+ [[ ${phase} == $1 ]] && return 1
+ done
+ # We shouldn't actually get here
+ return 1
+ }
+
+ dyn_prepare() {
+
+ if [[ -e $PORTAGE_BUILDDIR/.prepared ]] ; then
+ vecho ">>> It appears that '$PF' is already prepared; skipping."
+ vecho ">>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
+ return 0
+ fi
+
++ for LOOP_ABI in $(get_abi_list); do
++ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
++
++ if [ "${PORTAGE_BUILDDIR}"/.prepared.${LOOP_ABI} -nt "${WORKDIR}" ]; then
++ echo ">>> It appears that ${PN} is already prepared for ABI=${LOOP_ABI}; skipping."
++ echo ">>> Remove '$PORTAGE_BUILDDIR/.prepared.${LOOP_ABI}' to force prepare."
++ continue
++ fi
+ if [[ -d $S ]] ; then
+ cd "${S}"
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
+ cd "${WORKDIR}"
+ elif [[ -z ${A} ]] && ! has_phase_defined_up_to prepare; then
+ cd "${WORKDIR}"
+ else
+ die "The source directory '${S}' doesn't exist"
+ fi
+
+ trap abort_prepare SIGINT SIGQUIT
+
+ ebuild_phase pre_src_prepare
- vecho ">>> Preparing source in $PWD ..."
++ vecho ">>> Preparing source in $PWD$(_get_abi_string) ..."
+ ebuild_phase src_prepare
++
++ if is_auto-multilib && is_ebuild; then
++ >> "$PORTAGE_BUILDDIR"/.prepared."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .prepared.${LOOP_ABI}'"
++ fi
++ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
++ done
++ is_ebuild && { rm "${T}"/environment || die ; }
++
+ >> "$PORTAGE_BUILDDIR/.prepared" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.prepared"
+ vecho ">>> Source prepared."
+ ebuild_phase post_src_prepare
+
+ trap - SIGINT SIGQUIT
+ }
+
+ dyn_configure() {
+
+ if [[ -e $PORTAGE_BUILDDIR/.configured ]] ; then
+ vecho ">>> It appears that '$PF' is already configured; skipping."
+ vecho ">>> Remove '$PORTAGE_BUILDDIR/.configured' to force configuration."
+ return 0
+ fi
+
++ for LOOP_ABI in $(get_abi_list); do
++ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
++
++ if [ ${PORTAGE_BUILDDIR}/.configured.${LOOP_ABI} -nt "${WORKDIR}" ]; then
++ echo ">>> It appears that ${PN} is already configured for ABI=${LOOP_ABI}; skipping."
++ echo ">>> Remove '$PORTAGE_BUILDDIR/.configured.${LOOP_ABI}' to force configuration."
++ continue
++ fi
+ if [[ -d $S ]] ; then
+ cd "${S}"
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
+ cd "${WORKDIR}"
+ elif [[ -z ${A} ]] && ! has_phase_defined_up_to configure; then
+ cd "${WORKDIR}"
+ else
+ die "The source directory '${S}' doesn't exist"
+ fi
+
+ trap abort_configure SIGINT SIGQUIT
+
+ ebuild_phase pre_src_configure
+
- vecho ">>> Configuring source in $PWD ..."
++ vecho ">>> Configuring source in $PWD$(_get_abi_string) ..."
+ ebuild_phase src_configure
++
++ if is_auto-multilib && is_ebuild; then
++ >> "$PORTAGE_BUILDDIR"/.configured."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .configured.${LOOP_ABI}'"
++ fi
++ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
++ done
++ is_ebuild && { rm "${T}"/environment || die ; }
+ >> "$PORTAGE_BUILDDIR/.configured" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.configured"
+ vecho ">>> Source configured."
+
+ ebuild_phase post_src_configure
+
+ trap - SIGINT SIGQUIT
+ }
+
+ dyn_compile() {
+
+ if [[ -e $PORTAGE_BUILDDIR/.compiled ]] ; then
+ vecho ">>> It appears that '${PF}' is already compiled; skipping."
+ vecho ">>> Remove '$PORTAGE_BUILDDIR/.compiled' to force compilation."
+ return 0
+ fi
+
++ for LOOP_ABI in $(get_abi_list); do
++ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
++
++ if [ ${PORTAGE_BUILDDIR}/.compiled.${LOOP_ABI} -nt "${WORKDIR}" ]; then
++ echo ">>> It appears that ${PN} is already compiled for ABI=${LOOP_ABI}; skipping."
++ echo ">>> Remove '$PORTAGE_BUILDDIR/.compiled.${LOOP_ABI}' to force compilation."
++ continue
++ fi
+ if [[ -d $S ]] ; then
+ cd "${S}"
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
+ cd "${WORKDIR}"
+ elif [[ -z ${A} ]] && ! has_phase_defined_up_to compile; then
+ cd "${WORKDIR}"
+ else
+ die "The source directory '${S}' doesn't exist"
+ fi
+
+ trap abort_compile SIGINT SIGQUIT
+
+ if has distcc $FEATURES && has distcc-pump $FEATURES ; then
+ if [[ -z $INCLUDE_SERVER_PORT ]] || [[ ! -w $INCLUDE_SERVER_PORT ]] ; then
+ eval $(pump --startup)
+ trap "pump --shutdown" EXIT
+ fi
+ fi
+
+ ebuild_phase pre_src_compile
+
- vecho ">>> Compiling source in $PWD ..."
++ vecho ">>> Compiling source in $PWD$(_get_abi_string) ..."
+ ebuild_phase src_compile
++
++ if is_auto-multilib && is_ebuild; then
++ >> "$PORTAGE_BUILDDIR"/.compiled."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .compiled.${LOOP_ABI}'"
++ fi
++ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
++ done
++ is_ebuild && { rm "${T}"/environment || die ; }
+ >> "$PORTAGE_BUILDDIR/.compiled" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.compiled"
+ vecho ">>> Source compiled."
+
+ ebuild_phase post_src_compile
+
+ trap - SIGINT SIGQUIT
+ }
+
+ dyn_test() {
+
+ if [[ -e $PORTAGE_BUILDDIR/.tested ]] ; then
+ vecho ">>> It appears that ${PN} has already been tested; skipping."
+ vecho ">>> Remove '${PORTAGE_BUILDDIR}/.tested' to force test."
+ return
+ fi
+
+ if [ "${EBUILD_FORCE_TEST}" == "1" ] ; then
+ # If USE came from ${T}/environment then it might not have USE=test
+ # like it's supposed to here.
+ ! has test ${USE} && export USE="${USE} test"
+ fi
+
+ trap "abort_test" SIGINT SIGQUIT
++ for LOOP_ABI in $(get_abi_list); do
++ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
++
+ if [ -d "${S}" ]; then
+ cd "${S}"
+ else
+ cd "${WORKDIR}"
+ fi
+
+ if ! has test $FEATURES && [ "${EBUILD_FORCE_TEST}" != "1" ]; then
+ vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
+ elif has test $RESTRICT; then
+ einfo "Skipping make test/check due to ebuild restriction."
+ vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
+ else
++ if [ ${PORTAGE_BUILDDIR}/.tested.${LOOP_ABI} -nt "${WORKDIR}" ]; then
++ echo ">>> It appears that ${PN} is already tested for ABI=${LOOP_ABI}; skipping."
++ echo ">>> Remove '$PORTAGE_BUILDDIR/.tested.${LOOP_ABI}' to force testing."
++ continue
++ fi
++
+ local save_sp=${SANDBOX_PREDICT}
+ addpredict /
+ ebuild_phase pre_src_test
+ ebuild_phase src_test
++
++ if is_auto-multilib && is_ebuild; then
++ >> "$PORTAGE_BUILDDIR"/.tested."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .tested.${LOOP_ABI}'"
++ fi
+ >> "$PORTAGE_BUILDDIR/.tested" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.tested"
+ ebuild_phase post_src_test
+ SANDBOX_PREDICT=${save_sp}
+ fi
+
++ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
++ done
++ is_ebuild && { rm "${T}"/environment || die ; }
++
+ trap - SIGINT SIGQUIT
+ }
+
+ dyn_install() {
+ [ -z "$PORTAGE_BUILDDIR" ] && die "${FUNCNAME}: PORTAGE_BUILDDIR is unset"
+ if has noauto $FEATURES ; then
+ rm -f "${PORTAGE_BUILDDIR}/.installed"
+ elif [[ -e $PORTAGE_BUILDDIR/.installed ]] ; then
+ vecho ">>> It appears that '${PF}' is already installed; skipping."
+ vecho ">>> Remove '${PORTAGE_BUILDDIR}/.installed' to force install."
+ return 0
+ fi
+ trap "abort_install" SIGINT SIGQUIT
+ ebuild_phase pre_src_install
+ rm -rf "${PORTAGE_BUILDDIR}/image"
++ is_auto-multilib && rm -rf "${PORTAGE_BUILDDIR}"/image.${ABI}
+ mkdir "${PORTAGE_BUILDDIR}/image"
++ for LOOP_ABI in $(get_abi_list); do
++ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
++
+ if [[ -d $S ]] ; then
+ cd "${S}"
+ elif has $EAPI 0 1 2 3 3_pre2 ; then
+ cd "${WORKDIR}"
+ elif [[ -z ${A} ]] && ! has_phase_defined_up_to install; then
+ cd "${WORKDIR}"
+ else
+ die "The source directory '${S}' doesn't exist"
+ fi
+
+ vecho
+ vecho ">>> Install ${PF} into ${D} category ${CATEGORY}"
+ #our custom version of libtool uses $S and $D to fix
+ #invalid paths in .la files
+ export S D
+
+ # Reset exeinto(), docinto(), insinto(), and into() state variables
+ # in case the user is running the install phase multiple times
+ # consecutively via the ebuild command.
+ export DESTTREE=/usr
+ export INSDESTTREE=""
+ export _E_EXEDESTTREE_=""
+ export _E_DOCDESTTREE_=""
+
+ ebuild_phase src_install
++
++ if is_auto-multilib ; then
++ _finalize_abi_install
++ cp "${T}"/environment "${PORTAGE_BUILDDIR}"/build-info/environment.${LOOP_ABI} || die
++ if is_ebuild; then
++ unset_abi; source "${T}"/environment || die
++ touch "$PORTAGE_BUILDDIR"/.installed."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .installed.${LOOP_ABI}'"
++ fi
++ fi
++ done
++ if [[ -d "${D}" ]]; then
++ if [[ "${CATEGORY}/${PN}" == "sys-devel/libtool" ]] ; then
++ ewarn "Preserving libltdl.la because of extensive usage"
++ ewarn "even in m4 macros of libtool"
++ else
++ find "${D}" -name '*.la' ! -exec grep -q shouldnotlink=yes {} \; -exec rm {} \;
++ fi
++
+ >> "$PORTAGE_BUILDDIR/.installed" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.installed"
+ vecho ">>> Completed installing ${PF} into ${D}"
+ vecho
+ ebuild_phase post_src_install
+
+ cd "${PORTAGE_BUILDDIR}"/build-info
+ set -f
+ local f x
+ IFS=$' \t\n\r'
+ for f in CATEGORY DEFINED_PHASES FEATURES INHERITED IUSE REQUIRED_USE \
+ PF PKGUSE SLOT KEYWORDS HOMEPAGE DESCRIPTION ; do
+ x=$(echo -n ${!f})
+ [[ -n $x ]] && echo "$x" > $f
+ done
+ if [[ $CATEGORY != virtual ]] ; then
+ for f in ASFLAGS CBUILD CC CFLAGS CHOST CTARGET CXX \
+ CXXFLAGS EXTRA_ECONF EXTRA_EINSTALL EXTRA_MAKE \
+ LDFLAGS LIBCFLAGS LIBCXXFLAGS ; do
+ x=$(echo -n ${!f})
+ [[ -n $x ]] && echo "$x" > $f
+ done
+ fi
++ if has_multilib_profile ; then
++ local i= x=
++ for i in ${MULTILIB_ABIS} ; do
++ x+=" multilib_abi_${i}"
++ done
++ echo "${IUSE}${x}" > IUSE
++ fi
+ echo "${USE}" > USE
+ echo "${EAPI:-0}" > EAPI
++ if is_auto-multilib; then
++ echo "$(get_abi_order)" > MULTILIB_ABIS
++ fi
+ set +f
+
+ # local variables can leak into the saved environment.
+ unset f
+
+ save_ebuild_env --exclude-init-phases | filter_readonly_variables \
+ --filter-path --filter-sandbox --allow-extra-vars > environment
+ assert "save_ebuild_env failed"
+
+ ${PORTAGE_BZIP2_COMMAND} -f9 environment
+
+ cp "${EBUILD}" "${PF}.ebuild"
+ [ -n "${PORTAGE_REPO_NAME}" ] && echo "${PORTAGE_REPO_NAME}" > repository
+ if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT}
+ then
+ >> DEBUGBUILD
+ fi
++
++ else
++ cd "${PORTAGE_BUILDDIR}"
++ if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
++ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,exit_status,logid,unpacked,prepared} \
++ "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
++ "$PORTAGE_BUILDDIR"/.die_hooks
++
++# rm -rf "${PORTAGE_BUILDDIR}/build-info"
++ rm -rf "${WORKDIR}"
++ fi
++
++ if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
++ find "${PORTAGE_BUILDDIR}" -type d ! -regex "^${WORKDIR}" | sort -r | tr "\n" "\0" | $XARGS -0 rmdir &>/dev/null
++ fi
++ fi
++
+ trap - SIGINT SIGQUIT
+ }
+
+ dyn_preinst() {
+ if [ -z "${D}" ]; then
+ eerror "${FUNCNAME}: D is unset"
+ return 1
+ fi
++ for LOOP_ABI in $(get_abi_order); do
++ set_abi ${LOOP_ABI}; source "${T}"/environment || die
++
+ ebuild_phase_with_hooks pkg_preinst
++
++ unset_abi; source "${T}"/environment || die
++ done
+ }
+
+ dyn_help() {
+ echo
+ echo "Portage"
+ echo "Copyright 1999-2010 Gentoo Foundation"
+ echo
+ echo "How to use the ebuild command:"
+ echo
+ echo "The first argument to ebuild should be an existing .ebuild file."
+ echo
+ echo "One or more of the following options can then be specified. If more"
+ echo "than one option is specified, each will be executed in order."
+ echo
+ echo " help : show this help screen"
+ echo " pretend : execute package specific pretend actions"
+ echo " setup : execute package specific setup actions"
+ echo " fetch : download source archive(s) and patches"
+ echo " digest : create a manifest file for the package"
+ echo " manifest : create a manifest file for the package"
+ echo " unpack : unpack sources (auto-dependencies if needed)"
+ echo " prepare : prepare sources (auto-dependencies if needed)"
+ echo " configure : configure sources (auto-fetch/unpack if needed)"
+ echo " compile : compile sources (auto-fetch/unpack/configure if needed)"
+ echo " test : test package (auto-fetch/unpack/configure/compile if needed)"
+ echo " preinst : execute pre-install instructions"
+ echo " postinst : execute post-install instructions"
+ echo " install : install the package to the temporary install directory"
+ echo " qmerge : merge image into live filesystem, recording files in db"
+ echo " merge : do fetch, unpack, compile, install and qmerge"
+ echo " prerm : execute pre-removal instructions"
+ echo " postrm : execute post-removal instructions"
+ echo " unmerge : remove package from live filesystem"
+ echo " config : execute package specific configuration actions"
+ echo " package : create a tarball package in ${PKGDIR}/All"
+ echo " rpm : build a RedHat RPM package"
+ echo " clean : clean up all source and temporary files"
+ echo
+ echo "The following settings will be used for the ebuild process:"
+ echo
+ echo " package : ${PF}"
+ echo " slot : ${SLOT}"
+ echo " category : ${CATEGORY}"
+ echo " description : ${DESCRIPTION}"
+ echo " system : ${CHOST}"
+ echo " c flags : ${CFLAGS}"
+ echo " c++ flags : ${CXXFLAGS}"
+ echo " make flags : ${MAKEOPTS}"
+ echo -n " build mode : "
+ if has nostrip ${FEATURES} ${RESTRICT} || has strip ${RESTRICT} ;
+ then
+ echo "debug (large)"
+ else
+ echo "production (stripped)"
+ fi
+ echo " merge to : ${ROOT}"
+ echo
+ if [ -n "$USE" ]; then
+ echo "Additionally, support for the following optional features will be enabled:"
+ echo
+ echo " ${USE}"
+ fi
+ echo
+ }
+
+ # @FUNCTION: _ebuild_arg_to_phase
+ # @DESCRIPTION:
+ # Translate a known ebuild(1) argument into the precise
+ # name of it's corresponding ebuild phase.
+ _ebuild_arg_to_phase() {
+ [ $# -ne 2 ] && die "expected exactly 2 args, got $#: $*"
+ local eapi=$1
+ local arg=$2
+ local phase_func=""
+
+ case "$arg" in
+ pretend)
+ ! has $eapi 0 1 2 3 3_pre2 && \
+ phase_func=pkg_pretend
+ ;;
+ setup)
+ phase_func=pkg_setup
+ ;;
+ nofetch)
+ phase_func=pkg_nofetch
+ ;;
+ unpack)
+ phase_func=src_unpack
+ ;;
+ prepare)
+ ! has $eapi 0 1 && \
+ phase_func=src_prepare
+ ;;
+ configure)
+ ! has $eapi 0 1 && \
+ phase_func=src_configure
+ ;;
+ compile)
+ phase_func=src_compile
+ ;;
+ test)
+ phase_func=src_test
+ ;;
+ install)
+ phase_func=src_install
+ ;;
+ preinst)
+ phase_func=pkg_preinst
+ ;;
+ postinst)
+ phase_func=pkg_postinst
+ ;;
+ prerm)
+ phase_func=pkg_prerm
+ ;;
+ postrm)
+ phase_func=pkg_postrm
+ ;;
+ esac
+
+ [[ -z $phase_func ]] && return 1
+ echo "$phase_func"
+ return 0
+ }
+
+ _ebuild_phase_funcs() {
+ [ $# -ne 2 ] && die "expected exactly 2 args, got $#: $*"
+ local eapi=$1
+ local phase_func=$2
+ local default_phases="pkg_nofetch src_unpack src_prepare src_configure
+ src_compile src_install src_test"
+ local x y default_func=""
+
+ for x in pkg_nofetch src_unpack src_test ; do
+ declare -F $x >/dev/null || \
+ eval "$x() { _eapi0_$x \"\$@\" ; }"
+ done
+
+ case $eapi in
+
+ 0|1)
+
+ if ! declare -F src_compile >/dev/null ; then
+ case $eapi in
+ 0)
+ src_compile() { _eapi0_src_compile "$@" ; }
+ ;;
+ *)
+ src_compile() { _eapi1_src_compile "$@" ; }
+ ;;
+ esac
+ fi
+
+ for x in $default_phases ; do
+ eval "default_$x() {
+ die \"default_$x() is not supported with EAPI='$eapi' during phase $phase_func\"
+ }"
+ done
+
+ eval "default() {
+ die \"default() is not supported with EAPI='$eapi' during phase $phase_func\"
+ }"
+
+ ;;
+
+ *)
+
+ declare -F src_configure >/dev/null || \
+ src_configure() { _eapi2_src_configure "$@" ; }
+
+ declare -F src_compile >/dev/null || \
+ src_compile() { _eapi2_src_compile "$@" ; }
+
+ has $eapi 2 3 3_pre2 || declare -F src_install >/dev/null || \
+ src_install() { _eapi4_src_install "$@" ; }
+
+ if has $phase_func $default_phases ; then
+
+ _eapi2_pkg_nofetch () { _eapi0_pkg_nofetch "$@" ; }
+ _eapi2_src_unpack () { _eapi0_src_unpack "$@" ; }
+ _eapi2_src_prepare () { true ; }
+ _eapi2_src_test () { _eapi0_src_test "$@" ; }
+ _eapi2_src_install () { die "$FUNCNAME is not supported" ; }
+
+ for x in $default_phases ; do
+ eval "default_$x() { _eapi2_$x \"\$@\" ; }"
+ done
+
+ eval "default() { _eapi2_$phase_func \"\$@\" ; }"
+
+ case $eapi in
+ 2|3)
+ ;;
+ *)
+ eval "default_src_install() { _eapi4_src_install \"\$@\" ; }"
+ [[ $phase_func = src_install ]] && \
+ eval "default() { _eapi4_$phase_func \"\$@\" ; }"
+ ;;
+ esac
+
+ else
+
+ for x in $default_phases ; do
+ eval "default_$x() {
+ die \"default_$x() is not supported in phase $default_func\"
+ }"
+ done
+
+ eval "default() {
+ die \"default() is not supported with EAPI='$eapi' during phase $phase_func\"
+ }"
+
+ fi
+
+ ;;
+ esac
+ }
+
+ ebuild_main() {
+
+ # Subshell/helper die support (must export for the die helper).
+ # Since this function is typically executed in a subshell,
+ # setup EBUILD_MASTER_PID to refer to the current $BASHPID,
+ # which seems to give the best results when further
+ # nested subshells call die.
+ export EBUILD_MASTER_PID=$BASHPID
+ trap 'exit 1' SIGTERM
+
+ #a reasonable default for $S
+ [[ -z ${S} ]] && export S=${WORKDIR}/${P}
+
+ if [[ -s $SANDBOX_LOG ]] ; then
+ # We use SANDBOX_LOG to check for sandbox violations,
+ # so we ensure that there can't be a stale log to
+ # interfere with our logic.
+ local x=
+ if [[ -n SANDBOX_ON ]] ; then
+ x=$SANDBOX_ON
+ export SANDBOX_ON=0
+ fi
+
+ rm -f "$SANDBOX_LOG" || \
+ die "failed to remove stale sandbox log: '$SANDBOX_LOG'"
+
+ if [[ -n $x ]] ; then
+ export SANDBOX_ON=$x
+ fi
+ unset x
+ fi
+
+ # Force configure scripts that automatically detect ccache to
+ # respect FEATURES="-ccache".
+ has ccache $FEATURES || export CCACHE_DISABLE=1
+
+ local phase_func=$(_ebuild_arg_to_phase "$EAPI" "$EBUILD_PHASE")
+ [[ -n $phase_func ]] && _ebuild_phase_funcs "$EAPI" "$phase_func"
+ unset phase_func
+
+ source_all_bashrcs
+
+ case ${1} in
+ nofetch)
+ ebuild_phase_with_hooks pkg_nofetch
+ ;;
- prerm|postrm|postinst|config|info)
++ config|info)
+ if has "${1}" config info && \
+ ! declare -F "pkg_${1}" >/dev/null ; then
+ ewarn "pkg_${1}() is not defined: '${EBUILD##*/}'"
+ fi
+ export SANDBOX_ON="0"
+ if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
+ ebuild_phase_with_hooks pkg_${1}
+ else
+ set -x
+ ebuild_phase_with_hooks pkg_${1}
+ set +x
+ fi
- if [[ $EBUILD_PHASE == postinst ]] && [[ -n $PORTAGE_UPDATE_ENV ]]; then
- # Update environment.bz2 in case installation phases
- # need to pass some variables to uninstallation phases.
- save_ebuild_env --exclude-init-phases | \
- filter_readonly_variables --filter-path \
- --filter-sandbox --allow-extra-vars \
- | ${PORTAGE_BZIP2_COMMAND} -c -f9 > "$PORTAGE_UPDATE_ENV"
- assert "save_ebuild_env failed"
- fi
++ ;;
++ prerm|postrm|postinst)
++ for LOOP_ABI in $(get_abi_order); do
++ if is_auto-multilib ; then
++ case ${1} in
++ postinst)
++ set_abi ${LOOP_ABI}
++ ;;
++ prerm|postrm)
++ # if = backward compactibility for previous versions, which did not
++ # install a per-ABI environment
++ if [[ -f "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 ]] ; then
++ bzcat "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 > "${T}"/environment || die
++ preprocess_ebuild_env --filter-metadata
++ fi
++ ;;
++ esac
++ # >/dev/null = backward compactibility for prerm/postrm
++ source "${T}"/environment 2>/dev/null || die
++ fi
++ export SANDBOX_ON="0"
++ if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
++ ebuild_phase_with_hooks pkg_${1}
++ else
++ set -x
++ ebuild_phase_with_hooks pkg_${1}
++ set +x
++ fi
++
++ if [[ $EBUILD_PHASE == postinst ]] && [[ -n $PORTAGE_UPDATE_ENV ]]; then
++ # Update environment.bz2 in case installation phases
++ # need to pass some variables to uninstallation phases.
++ save_ebuild_env --exclude-init-phases | \
++ filter_readonly_variables --filter-path \
++ --filter-sandbox --allow-extra-vars \
++ | ${PORTAGE_BZIP2_COMMAND} -c -f9 > "$PORTAGE_UPDATE_ENV"
++ assert "save_ebuild_env failed"
++ fi
++ if is_auto-multilib ; then
++ case ${1} in
++ postinst)
++ unset_abi
++ ;;
++ prerm|postrm)
++ #if = backward compactibility for previous versions, which did not
++ #install a per-ABI environment
++ if [[ -f "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 ]] ; then
++ preprocess_ebuild_env --filter-metadata
++ bzcat "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 > "${T}"/environment || die
++ fi
++ ;;
++ esac
++ # >/dev/null = backward compactibility for prerm/postrm
++ source "${T}"/environment 2>/dev/null || die
++ fi
++ done
+ ;;
+ unpack|prepare|configure|compile|test|clean|install)
+ if [[ ${SANDBOX_DISABLED:-0} = 0 ]] ; then
+ export SANDBOX_ON="1"
+ else
+ export SANDBOX_ON="0"
+ fi
+
+ case "${1}" in
+ configure|compile)
+
+ local x
+ for x in ASFLAGS CCACHE_DIR CCACHE_SIZE \
+ CFLAGS CXXFLAGS LDFLAGS LIBCFLAGS LIBCXXFLAGS ; do
+ [[ ${!x+set} = set ]] && export $x
+ done
+ unset x
+
+ has distcc $FEATURES && [[ -n $DISTCC_DIR ]] && \
+ [[ ${SANDBOX_WRITE/$DISTCC_DIR} = $SANDBOX_WRITE ]] && \
+ addwrite "$DISTCC_DIR"
+
+ x=LIBDIR_$ABI
+ [ -z "$PKG_CONFIG_PATH" -a -n "$ABI" -a -n "${!x}" ] && \
+ export PKG_CONFIG_PATH=/usr/${!x}/pkgconfig
+
+ if has noauto $FEATURES && \
+ [[ ! -f $PORTAGE_BUILDDIR/.unpacked ]] ; then
+ echo
+ echo "!!! We apparently haven't unpacked..." \
+ "This is probably not what you"
+ echo "!!! want to be doing... You are using" \
+ "FEATURES=noauto so I'll assume"
+ echo "!!! that you know what you are doing..." \
+ "You have 5 seconds to abort..."
+ echo
+
+ local x
+ for x in 1 2 3 4 5 6 7 8; do
+ LC_ALL=C sleep 0.25
+ done
+
+ sleep 3
+ fi
+
+ cd "$PORTAGE_BUILDDIR"
+ if [ ! -d build-info ] ; then
+ mkdir build-info
+ cp "$EBUILD" "build-info/$PF.ebuild"
+ fi
+
+ #our custom version of libtool uses $S and $D to fix
+ #invalid paths in .la files
+ export S D
+
+ ;;
+ esac
+
+ if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
+ dyn_${1}
+ else
+ set -x
+ dyn_${1}
+ set +x
+ fi
+ export SANDBOX_ON="0"
+ ;;
+ help|pretend|setup|preinst)
+ #pkg_setup needs to be out of the sandbox for tmp file creation;
+ #for example, awking and piping a file in /tmp requires a temp file to be created
+ #in /etc. If pkg_setup is in the sandbox, both our lilo and apache ebuilds break.
+ export SANDBOX_ON="0"
+ if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
+ dyn_${1}
+ else
+ set -x
+ dyn_${1}
+ set +x
+ fi
+ ;;
+ _internal_test)
+ ;;
+ *)
+ export SANDBOX_ON="1"
+ echo "Unrecognized arg '${1}'"
+ echo
+ dyn_help
+ exit 1
+ ;;
+ esac
+
+ # Save the env only for relevant phases.
+ if ! has "${1}" clean help info nofetch ; then
+ umask 002
+ save_ebuild_env | filter_readonly_variables \
+ --filter-features > "$T/environment"
+ assert "save_ebuild_env failed"
+ chown portage:portage "$T/environment" &>/dev/null
+ chmod g+w "$T/environment" &>/dev/null
+ 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 $?
+ fi
+ }
diff --cc bin/phase-helpers.sh
index 0000000,a033fa8..c8f4262
mode 000000,100644..100644
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@@ -1,0 -1,624 +1,626 @@@
+ #!/bin/bash
+ # Copyright 1999-2011 Gentoo Foundation
+ # Distributed under the terms of the GNU General Public License v2
+
+ export DESTTREE=/usr
+ export INSDESTTREE=""
+ export _E_EXEDESTTREE_=""
+ export _E_DOCDESTTREE_=""
+ export INSOPTIONS="-m0644"
+ export EXEOPTIONS="-m0755"
+ export LIBOPTIONS="-m0644"
+ export DIROPTIONS="-m0755"
+ export MOPREFIX=${PN}
+ declare -a PORTAGE_DOCOMPRESS=( /usr/share/{doc,info,man} )
+ declare -a PORTAGE_DOCOMPRESS_SKIP=( /usr/share/doc/${PF}/html )
+
+ into() {
+ if [ "$1" == "/" ]; then
+ export DESTTREE=""
+ else
+ export DESTTREE=$1
+ if [ ! -d "${D}${DESTTREE}" ]; then
+ install -d "${D}${DESTTREE}"
+ local ret=$?
+ if [[ $ret -ne 0 ]] ; then
+ helpers_die "${FUNCNAME[0]} failed"
+ return $ret
+ fi
+ fi
+ fi
+ }
+
+ insinto() {
+ if [ "$1" == "/" ]; then
+ export INSDESTTREE=""
+ else
+ export INSDESTTREE=$1
+ if [ ! -d "${D}${INSDESTTREE}" ]; then
+ install -d "${D}${INSDESTTREE}"
+ local ret=$?
+ if [[ $ret -ne 0 ]] ; then
+ helpers_die "${FUNCNAME[0]} failed"
+ return $ret
+ fi
+ fi
+ fi
+ }
+
+ exeinto() {
+ if [ "$1" == "/" ]; then
+ export _E_EXEDESTTREE_=""
+ else
+ export _E_EXEDESTTREE_="$1"
+ if [ ! -d "${D}${_E_EXEDESTTREE_}" ]; then
+ install -d "${D}${_E_EXEDESTTREE_}"
+ local ret=$?
+ if [[ $ret -ne 0 ]] ; then
+ helpers_die "${FUNCNAME[0]} failed"
+ return $ret
+ fi
+ fi
+ fi
+ }
+
+ docinto() {
+ if [ "$1" == "/" ]; then
+ export _E_DOCDESTTREE_=""
+ else
+ export _E_DOCDESTTREE_="$1"
+ if [ ! -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}" ]; then
+ install -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
+ local ret=$?
+ if [[ $ret -ne 0 ]] ; then
+ helpers_die "${FUNCNAME[0]} failed"
+ return $ret
+ fi
+ fi
+ fi
+ }
+
+ insopts() {
+ export INSOPTIONS="$@"
+
+ # `install` should never be called with '-s' ...
+ has -s ${INSOPTIONS} && die "Never call insopts() with -s"
+ }
+
+ diropts() {
+ export DIROPTIONS="$@"
+ }
+
+ exeopts() {
+ export EXEOPTIONS="$@"
+
+ # `install` should never be called with '-s' ...
+ has -s ${EXEOPTIONS} && die "Never call exeopts() with -s"
+ }
+
+ libopts() {
+ export LIBOPTIONS="$@"
+
+ # `install` should never be called with '-s' ...
+ has -s ${LIBOPTIONS} && die "Never call libopts() with -s"
+ }
+
+ docompress() {
+ has "${EAPI}" 0 1 2 3 && die "'docompress' not supported in this EAPI"
+
+ local f g
+ if [[ $1 = "-x" ]]; then
+ shift
+ for f; do
+ f=$(strip_duplicate_slashes "${f}"); f=${f%/}
+ [[ ${f:0:1} = / ]] || f="/${f}"
+ for g in "${PORTAGE_DOCOMPRESS_SKIP[@]}"; do
+ [[ ${f} = "${g}" ]] && continue 2
+ done
+ PORTAGE_DOCOMPRESS_SKIP[${#PORTAGE_DOCOMPRESS_SKIP[@]}]=${f}
+ done
+ else
+ for f; do
+ f=$(strip_duplicate_slashes "${f}"); f=${f%/}
+ [[ ${f:0:1} = / ]] || f="/${f}"
+ for g in "${PORTAGE_DOCOMPRESS[@]}"; do
+ [[ ${f} = "${g}" ]] && continue 2
+ done
+ PORTAGE_DOCOMPRESS[${#PORTAGE_DOCOMPRESS[@]}]=${f}
+ done
+ fi
+ }
+
+ # adds ".keep" files so that dirs aren't auto-cleaned
+ keepdir() {
+ dodir "$@"
+ local x
+ if [ "$1" == "-R" ] || [ "$1" == "-r" ]; then
+ shift
+ find "$@" -type d -printf "${D}%p/.keep_${CATEGORY}_${PN}-${SLOT}\n" \
+ | tr "\n" "\0" | \
+ while read -r -d $'\0' ; do
+ >> "$REPLY" || \
+ die "Failed to recursively create .keep files"
+ done
+ else
+ for x in "$@"; do
+ >> "${D}${x}/.keep_${CATEGORY}_${PN}-${SLOT}" || \
+ die "Failed to create .keep in ${D}${x}"
+ done
+ fi
+ }
+
+
+ useq() {
+ has $EBUILD_PHASE prerm postrm || eqawarn \
+ "QA Notice: The 'useq' function is deprecated (replaced by 'use')"
+ use ${1}
+ }
+
+ usev() {
+ if use ${1}; then
+ echo "${1#!}"
+ return 0
+ fi
+ return 1
+ }
+
+ use() {
+ local u=$1
+ local found=0
+
+ # if we got something like '!flag', then invert the return value
+ if [[ ${u:0:1} == "!" ]] ; then
+ u=${u:1}
+ found=1
+ fi
+
+ if [[ $EBUILD_PHASE = depend ]] ; then
+ # TODO: Add a registration interface for eclasses to register
+ # any number of phase hooks, so that global scope eclass
+ # initialization can by migrated to phase hooks in new EAPIs.
+ # Example: add_phase_hook before pkg_setup $ECLASS_pre_pkg_setup
+ #if [[ -n $EAPI ]] && ! has "$EAPI" 0 1 2 3 ; then
+ # die "use() called during invalid phase: $EBUILD_PHASE"
+ #fi
+ true
+
+ # Make sure we have this USE flag in IUSE
+ elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE ]] ; then
++ if [[ $u != multilib ]]; then
+ [[ $u =~ $PORTAGE_IUSE ]] || \
+ eqawarn "QA Notice: USE Flag '${u}' not" \
+ "in IUSE for ${CATEGORY}/${PF}"
++ fi
+ fi
+
+ if has ${u} ${USE} ; then
+ return ${found}
+ else
+ return $((!found))
+ fi
+ }
+
+ use_with() {
+ if [ -z "$1" ]; then
+ echo "!!! use_with() called without a parameter." >&2
+ echo "!!! use_with <USEFLAG> [<flagname> [value]]" >&2
+ return 1
+ fi
+
+ if ! has "${EAPI:-0}" 0 1 2 3 ; then
+ local UW_SUFFIX=${3+=$3}
+ else
+ local UW_SUFFIX=${3:+=$3}
+ fi
+ local UWORD=${2:-$1}
+
+ if use $1; then
+ echo "--with-${UWORD}${UW_SUFFIX}"
+ else
+ echo "--without-${UWORD}"
+ fi
+ return 0
+ }
+
+ use_enable() {
+ if [ -z "$1" ]; then
+ echo "!!! use_enable() called without a parameter." >&2
+ echo "!!! use_enable <USEFLAG> [<flagname> [value]]" >&2
+ return 1
+ fi
+
+ if ! has "${EAPI:-0}" 0 1 2 3 ; then
+ local UE_SUFFIX=${3+=$3}
+ else
+ local UE_SUFFIX=${3:+=$3}
+ fi
+ local UWORD=${2:-$1}
+
+ if use $1; then
+ echo "--enable-${UWORD}${UE_SUFFIX}"
+ else
+ echo "--disable-${UWORD}"
+ fi
+ return 0
+ }
+
+ unpack() {
+ local srcdir
+ local x
+ local y
+ local myfail
+ local eapi=${EAPI:-0}
+ [ -z "$*" ] && die "Nothing passed to the 'unpack' command"
+
+ for x in "$@"; do
+ vecho ">>> Unpacking ${x} to ${PWD}"
+ y=${x%.*}
+ y=${y##*.}
+
+ if [[ ${x} == "./"* ]] ; then
+ srcdir=""
+ elif [[ ${x} == ${DISTDIR%/}/* ]] ; then
+ die "Arguments to unpack() cannot begin with \${DISTDIR}."
+ elif [[ ${x} == "/"* ]] ; then
+ die "Arguments to unpack() cannot be absolute"
+ else
+ srcdir="${DISTDIR}/"
+ fi
+ [[ ! -s ${srcdir}${x} ]] && die "${x} does not exist"
+
+ _unpack_tar() {
+ if [ "${y}" == "tar" ]; then
+ $1 -c -- "$srcdir$x" | tar xof -
+ assert_sigpipe_ok "$myfail"
+ else
+ local cwd_dest=${x##*/}
+ cwd_dest=${cwd_dest%.*}
+ $1 -c -- "${srcdir}${x}" > "${cwd_dest}" || die "$myfail"
+ fi
+ }
+
+ myfail="failure unpacking ${x}"
+ case "${x##*.}" in
+ tar)
+ tar xof "$srcdir$x" || die "$myfail"
+ ;;
+ tgz)
+ tar xozf "$srcdir$x" || die "$myfail"
+ ;;
+ tbz|tbz2)
+ ${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d} -c -- "$srcdir$x" | tar xof -
+ assert_sigpipe_ok "$myfail"
+ ;;
+ ZIP|zip|jar)
+ # unzip will interactively prompt under some error conditions,
+ # as reported in bug #336285
+ ( while true ; do echo n || break ; done ) | \
+ unzip -qo "${srcdir}${x}" || die "$myfail"
+ ;;
+ gz|Z|z)
+ _unpack_tar "gzip -d"
+ ;;
+ bz2|bz)
+ _unpack_tar "${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d}"
+ ;;
+ 7Z|7z)
+ local my_output
+ my_output="$(7z x -y "${srcdir}${x}")"
+ if [ $? -ne 0 ]; then
+ echo "${my_output}" >&2
+ die "$myfail"
+ fi
+ ;;
+ RAR|rar)
+ unrar x -idq -o+ "${srcdir}${x}" || die "$myfail"
+ ;;
+ LHa|LHA|lha|lzh)
+ lha xfq "${srcdir}${x}" || die "$myfail"
+ ;;
+ a)
+ ar x "${srcdir}${x}" || die "$myfail"
+ ;;
+ deb)
+ # Unpacking .deb archives can not always be done with
+ # `ar`. For instance on AIX this doesn't work out. If
+ # we have `deb2targz` installed, prefer it over `ar` for
+ # that reason. We just make sure on AIX `deb2targz` is
+ # installed.
+ if type -P deb2targz > /dev/null; then
+ y=${x##*/}
+ local created_symlink=0
+ if [ ! "$srcdir$x" -ef "$y" ] ; then
+ # deb2targz always extracts into the same directory as
+ # the source file, so create a symlink in the current
+ # working directory if necessary.
+ ln -sf "$srcdir$x" "$y" || die "$myfail"
+ created_symlink=1
+ fi
+ deb2targz "$y" || die "$myfail"
+ if [ $created_symlink = 1 ] ; then
+ # Clean up the symlink so the ebuild
+ # doesn't inadvertently install it.
+ rm -f "$y"
+ fi
+ mv -f "${y%.deb}".tar.gz data.tar.gz || die "$myfail"
+ else
+ ar x "$srcdir$x" || die "$myfail"
+ fi
+ ;;
+ lzma)
+ _unpack_tar "lzma -d"
+ ;;
+ xz)
+ if has $eapi 0 1 2 ; then
+ vecho "unpack ${x}: file format not recognized. Ignoring."
+ else
+ _unpack_tar "xz -d"
+ fi
+ ;;
+ *)
+ vecho "unpack ${x}: file format not recognized. Ignoring."
+ ;;
+ esac
+ done
+ # Do not chmod '.' since it's probably ${WORKDIR} and PORTAGE_WORKDIR_MODE
+ # should be preserved.
+ find . -mindepth 1 -maxdepth 1 ! -type l -print0 | \
+ ${XARGS} -0 chmod -fR a+rX,u+w,g-w,o-w
+ }
+
+ econf() {
+ local x
+
+ _hasg() {
+ local x s=$1
+ shift
+ for x ; do [[ ${x} == ${s} ]] && echo "${x}" && return 0 ; done
+ return 1
+ }
+
+ _hasgq() { _hasg "$@" >/dev/null ; }
+
+ local phase_func=$(_ebuild_arg_to_phase "$EAPI" "$EBUILD_PHASE")
+ if [[ -n $phase_func ]] ; then
+ if has "$EAPI" 0 1 ; then
+ [[ $phase_func != src_compile ]] && \
+ eqawarn "QA Notice: econf called in" \
+ "$phase_func instead of src_compile"
+ else
+ [[ $phase_func != src_configure ]] && \
+ eqawarn "QA Notice: econf called in" \
+ "$phase_func instead of src_configure"
+ fi
+ fi
+
+ : ${ECONF_SOURCE:=.}
+ if [ -x "${ECONF_SOURCE}/configure" ]; then
+ if [[ -n $CONFIG_SHELL && \
+ "$(head -n1 "$ECONF_SOURCE/configure")" =~ ^'#!'[[:space:]]*/bin/sh([[:space:]]|$) ]] ; then
+ sed -e "1s:^#![[:space:]]*/bin/sh:#!$CONFIG_SHELL:" -i "$ECONF_SOURCE/configure" || \
+ die "Substition of shebang in '$ECONF_SOURCE/configure' failed"
+ fi
+ if [ -e /usr/share/gnuconfig/ ]; then
+ find "${WORKDIR}" -type f '(' \
+ -name config.guess -o -name config.sub ')' -print0 | \
+ while read -r -d $'\0' x ; do
+ vecho " * econf: updating ${x/${WORKDIR}\/} with /usr/share/gnuconfig/${x##*/}"
+ cp -f /usr/share/gnuconfig/"${x##*/}" "${x}"
+ done
+ fi
+
+ # EAPI=4 adds --disable-dependency-tracking to econf
+ if ! has "$EAPI" 0 1 2 3 3_pre2 && \
+ "${ECONF_SOURCE}/configure" --help 2>/dev/null | \
+ grep -q disable-dependency-tracking ; then
+ set -- --disable-dependency-tracking "$@"
+ fi
+
+ # if the profile defines a location to install libs to aside from default, pass it on.
+ # if the ebuild passes in --libdir, they're responsible for the conf_libdir fun.
+ local CONF_LIBDIR LIBDIR_VAR="LIBDIR_${ABI}"
+ if [[ -n ${ABI} && -n ${!LIBDIR_VAR} ]] ; then
+ CONF_LIBDIR=${!LIBDIR_VAR}
+ fi
+ if [[ -n ${CONF_LIBDIR} ]] && ! _hasgq --libdir=\* "$@" ; then
+ export CONF_PREFIX=$(_hasg --exec-prefix=\* "$@")
+ [[ -z ${CONF_PREFIX} ]] && CONF_PREFIX=$(_hasg --prefix=\* "$@")
+ : ${CONF_PREFIX:=/usr}
+ CONF_PREFIX=${CONF_PREFIX#*=}
+ [[ ${CONF_PREFIX} != /* ]] && CONF_PREFIX="/${CONF_PREFIX}"
+ [[ ${CONF_LIBDIR} != /* ]] && CONF_LIBDIR="/${CONF_LIBDIR}"
+ set -- --libdir="$(strip_duplicate_slashes ${CONF_PREFIX}${CONF_LIBDIR})" "$@"
+ fi
+
+ set -- \
+ --prefix=/usr \
+ ${CBUILD:+--build=${CBUILD}} \
+ --host=${CHOST} \
+ ${CTARGET:+--target=${CTARGET}} \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --datadir=/usr/share \
+ --sysconfdir=/etc \
+ --localstatedir=/var/lib \
+ "$@" \
+ ${EXTRA_ECONF}
+ vecho "${ECONF_SOURCE}/configure" "$@"
+
+ if ! "${ECONF_SOURCE}/configure" "$@" ; then
+
+ if [ -s config.log ]; then
+ echo
+ echo "!!! Please attach the following file when seeking support:"
+ echo "!!! ${PWD}/config.log"
+ fi
+ die "econf failed"
+ fi
+ elif [ -f "${ECONF_SOURCE}/configure" ]; then
+ die "configure is not executable"
+ else
+ die "no configure script found"
+ fi
+ }
+
+ einstall() {
+ # CONF_PREFIX is only set if they didn't pass in libdir above.
+ local LOCAL_EXTRA_EINSTALL="${EXTRA_EINSTALL}"
+ LIBDIR_VAR="LIBDIR_${ABI}"
+ if [ -n "${ABI}" -a -n "${!LIBDIR_VAR}" ]; then
+ CONF_LIBDIR="${!LIBDIR_VAR}"
+ fi
+ unset LIBDIR_VAR
+ if [ -n "${CONF_LIBDIR}" ] && [ "${CONF_PREFIX:+set}" = set ]; then
+ EI_DESTLIBDIR="${D}/${CONF_PREFIX}/${CONF_LIBDIR}"
+ EI_DESTLIBDIR="$(strip_duplicate_slashes ${EI_DESTLIBDIR})"
+ LOCAL_EXTRA_EINSTALL="libdir=${EI_DESTLIBDIR} ${LOCAL_EXTRA_EINSTALL}"
+ unset EI_DESTLIBDIR
+ fi
+
+ if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
+ if [ "${PORTAGE_DEBUG}" == "1" ]; then
+ ${MAKE:-make} -n prefix="${D}usr" \
+ datadir="${D}usr/share" \
+ infodir="${D}usr/share/info" \
+ localstatedir="${D}var/lib" \
+ mandir="${D}usr/share/man" \
+ sysconfdir="${D}etc" \
+ ${LOCAL_EXTRA_EINSTALL} \
+ ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
+ "$@" install
+ fi
+ ${MAKE:-make} prefix="${D}usr" \
+ datadir="${D}usr/share" \
+ infodir="${D}usr/share/info" \
+ localstatedir="${D}var/lib" \
+ mandir="${D}usr/share/man" \
+ sysconfdir="${D}etc" \
+ ${LOCAL_EXTRA_EINSTALL} \
+ ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
+ "$@" install || die "einstall failed"
+ else
+ die "no Makefile found"
+ fi
+ }
+
+ _eapi0_pkg_nofetch() {
+ [ -z "${SRC_URI}" ] && return
+
+ elog "The following are listed in SRC_URI for ${PN}:"
+ local x
+ for x in $(echo ${SRC_URI}); do
+ elog " ${x}"
+ done
+ }
+
+ _eapi0_src_unpack() {
+ [[ -n ${A} ]] && unpack ${A}
+ }
+
+ _eapi0_src_compile() {
+ if [ -x ./configure ] ; then
+ econf
+ fi
+ _eapi2_src_compile
+ }
+
+ _eapi0_src_test() {
+ # Since we don't want emake's automatic die
+ # support (EAPI 4 and later), and we also don't
+ # want the warning messages that it produces if
+ # we call it in 'nonfatal' mode, we use emake_cmd
+ # to emulate the desired parts of emake behavior.
+ local emake_cmd="${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE}"
+ if $emake_cmd -j1 check -n &> /dev/null; then
+ vecho ">>> Test phase [check]: ${CATEGORY}/${PF}"
+ if ! $emake_cmd -j1 check; then
+ has test $FEATURES && die "Make check failed. See above for details."
+ has test $FEATURES || eerror "Make check failed. See above for details."
+ fi
+ elif $emake_cmd -j1 test -n &> /dev/null; then
+ vecho ">>> Test phase [test]: ${CATEGORY}/${PF}"
+ if ! $emake_cmd -j1 test; then
+ has test $FEATURES && die "Make test failed. See above for details."
+ has test $FEATURES || eerror "Make test failed. See above for details."
+ fi
+ else
+ vecho ">>> Test phase [none]: ${CATEGORY}/${PF}"
+ fi
+ }
+
+ _eapi1_src_compile() {
+ _eapi2_src_configure
+ _eapi2_src_compile
+ }
+
+ _eapi2_src_configure() {
+ if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then
+ econf
+ fi
+ }
+
+ _eapi2_src_compile() {
+ if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ]; then
+ emake || die "emake failed"
+ fi
+ }
+
+ _eapi4_src_install() {
+ if [[ -f Makefile || -f GNUmakefile || -f makefile ]] ; then
+ emake DESTDIR="${D}" install
+ fi
+
+ if ! declare -p DOCS &>/dev/null ; then
+ local d
+ for d in README* ChangeLog AUTHORS NEWS TODO CHANGES \
+ THANKS BUGS FAQ CREDITS CHANGELOG ; do
+ [[ -s "${d}" ]] && dodoc "${d}"
+ done
+ elif [[ $(declare -p DOCS) == "declare -a "* ]] ; then
+ dodoc "${DOCS[@]}"
+ else
+ dodoc ${DOCS}
+ fi
+ }
+
+ # Return true if given package is installed. Otherwise return false.
+ # Takes single depend-type atoms.
+ has_version() {
+
+ if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
+ "$PORTAGE_BIN_PATH"/ebuild-ipc has_version "$ROOT" "$1"
+ else
+ PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \
+ "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/portageq" has_version "${ROOT}" "$1"
+ fi
+ local retval=$?
+ case "${retval}" in
+ 0|1)
+ return ${retval}
+ ;;
+ *)
+ die "unexpected portageq exit code: ${retval}"
+ ;;
+ esac
+ }
+
+ # Returns the best/most-current match.
+ # Takes single depend-type atoms.
+ best_version() {
+
+ if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
+ "$PORTAGE_BIN_PATH"/ebuild-ipc best_version "$ROOT" "$1"
+ else
+ PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \
+ "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/portageq" best_version "${ROOT}" "$1"
+ fi
+ local retval=$?
+ case "${retval}" in
+ 0|1)
+ return ${retval}
+ ;;
+ *)
+ die "unexpected portageq exit code: ${retval}"
+ ;;
+ esac
+ }
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-01 13:56 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-01 13:56 UTC (permalink / raw
To: gentoo-commits
commit: a173ae4f96adebc538b3acd1c9814ca7c126b667
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 1 13:54:56 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Oct 1 13:54:56 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a173ae4f
Merge commit 'v2.2.0_alpha60' into multilib
bin/archive-conf | 2 +-
bin/dispatch-conf | 33 +
bin/ebuild | 6 +-
bin/emerge-webrsync | 1 +
bin/etc-update | 11 +-
bin/misc-functions.sh | 35 +-
bin/portageq | 48 +-
bin/repoman | 40 +-
cnf/dispatch-conf.conf | 10 +-
cnf/etc-update.conf | 12 +-
man/emerge.1 | 21 +-
man/make.conf.5 | 4 -
man/portage.5 | 3 +
pym/_emerge/EbuildFetcher.py | 21 +-
pym/_emerge/actions.py | 3 +-
pym/_emerge/create_depgraph_params.py | 16 +
pym/_emerge/depgraph.py | 170 ++++-
pym/_emerge/help.py | 794 +-------------------
pym/_emerge/main.py | 40 +-
pym/_emerge/resolver/backtracking.py | 25 +
pym/_emerge/resolver/output_helpers.py | 4 +-
pym/portage/const.py | 1 -
pym/portage/dbapi/__init__.py | 106 ++--
pym/portage/dbapi/porttree.py | 328 +++++----
pym/portage/dbapi/vartree.py | 37 +-
pym/portage/dep/__init__.py | 9 +
pym/portage/manifest.py | 15 +-
pym/portage/package/ebuild/config.py | 4 +-
pym/portage/package/ebuild/digestcheck.py | 3 +-
pym/portage/package/ebuild/digestgen.py | 6 +
pym/portage/package/ebuild/doebuild.py | 11 +-
pym/portage/package/ebuild/fetch.py | 1 -
pym/portage/package/ebuild/getmaskingstatus.py | 4 +-
pym/portage/repository/config.py | 24 +-
pym/portage/tests/emerge/test_simple.py | 9 +
pym/portage/tests/resolver/ResolverPlayground.py | 22 +-
pym/portage/tests/resolver/test_autounmask.py | 103 +++
pym/portage/tests/resolver/test_backtracking.py | 43 ++
.../tests/resolver/test_circular_choices.py | 61 ++
pym/portage/tests/resolver/test_complete_graph.py | 66 ++
pym/portage/tests/resolver/test_virtual_slot.py | 49 ++
pym/portage/util/env_update.py | 31 +-
pym/repoman/herdbase.py | 4 -
43 files changed, 1053 insertions(+), 1183 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-07 12:41 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-07 12:41 UTC (permalink / raw
To: gentoo-commits
commit: 54fbc12eec26f21aaa4a993167b51ba963cdf04f
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 7 12:40:39 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Oct 7 12:40:39 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=54fbc12e
Merge commit 'v2.2.0_alpha62' into multilib
bin/dispatch-conf | 2 +-
bin/repoman | 65 ++-
pym/_emerge/depgraph.py | 17 +-
pym/_emerge/resolver/output.py | 2 +
pym/portage/cache/template.py | 1 +
pym/portage/checksum.py | 75 ++-
pym/portage/const.py | 31 +-
pym/portage/dbapi/porttree.py | 15 +-
pym/portage/dbapi/vartree.py | 7 +-
pym/portage/dep/__init__.py | 45 ++-
pym/portage/elog/messages.py | 1 +
pym/portage/manifest.py | 48 +-
pym/portage/output.py | 12 +-
.../package/ebuild/_config/KeywordsManager.py | 16 +-
pym/portage/repository/config.py | 69 ++-
pym/portage/tests/dep/test_best_match_to_list.py | 28 +-
pym/portage/tests/ebuild/test_config.py | 1 +
pym/portage/tests/resolver/ResolverPlayground.py | 8 +-
pym/portage/tests/resolver/test_keywords.py | 356 +++++++++
.../tests/resolver/test_virtual_transition.py | 51 ++
pym/portage/tests/util/test_whirlpool.py | 16 +
pym/portage/util/whirlpool.py | 794 ++++++++++++++++++++
22 files changed, 1554 insertions(+), 106 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-08 8:34 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-08 8:34 UTC (permalink / raw
To: gentoo-commits
commit: f783fc9318abfb1f2265967aeb26c8eb7d257de5
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 8 08:34:22 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Oct 8 08:34:22 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f783fc93
Merge commit 'v2.2.0_alpha63' into multilib
bin/repoman | 20 +++++++++++---------
1 files changed, 11 insertions(+), 9 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-09 10:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-09 10:33 UTC (permalink / raw
To: gentoo-commits
commit: 91d13883d0d18da99feaa5768dd97031a6258a56
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 9 10:32:51 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 9 10:32:51 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=91d13883
Merge commit 'v2.2.0_alpha64' into multilib
bin/repoman | 2 +-
pym/portage/mail.py | 3 +--
pym/portage/util/whirlpool.py | 12 ++++++------
3 files changed, 8 insertions(+), 9 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-12 16:28 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-12 16:28 UTC (permalink / raw
To: gentoo-commits
commit: 5fdebfee5f5aded3373e1c1c81ccf26f56115448
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Oct 12 16:28:01 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Oct 12 16:28:01 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5fdebfee
Merge commit 'v2.2.0_alpha67' into multilib
bin/ebuild | 12 ++-
bin/ebuild-helpers/prepstrip | 157 ++++++++++++++-------
cnf/make.globals | 2 +-
man/emerge.1 | 14 ++
man/make.conf.5 | 5 -
man/portage.5 | 7 +
pym/_emerge/EbuildBuild.py | 13 +-
pym/_emerge/FakeVartree.py | 12 +-
pym/_emerge/Scheduler.py | 3 +-
pym/_emerge/create_depgraph_params.py | 4 +
pym/_emerge/depgraph.py | 39 +++++-
pym/_emerge/main.py | 6 +
pym/portage/_global_updates.py | 3 +-
pym/portage/const.py | 2 +-
pym/portage/elog/__init__.py | 20 ++-
pym/portage/elog/mod_syslog.py | 9 +-
pym/portage/package/ebuild/_config/MaskManager.py | 45 ++++++-
pym/portage/package/ebuild/doebuild.py | 23 ++-
pym/portage/package/ebuild/fetch.py | 26 ++--
pym/portage/repository/config.py | 26 +++-
pym/portage/tests/__init__.py | 118 +++++++++-------
pym/portage/tests/bin/setup_env.py | 3 +
pym/portage/tests/bin/test_dodir.py | 2 +
pym/portage/tests/runTests | 4 +-
runtests.sh | 3 +
25 files changed, 389 insertions(+), 169 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-21 13:57 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-21 13:57 UTC (permalink / raw
To: gentoo-commits
commit: 236e798f6d5598fc3381a764c2b33ff8bb1c3ec8
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 21 13:56:28 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Oct 21 13:56:28 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=236e798f
Merge commit 'v2.2.0_alpha69' into multilib
RELEASE-NOTES | 6 +
bin/ebuild | 7 +-
bin/egencache | 14 +-
bin/fixpackages | 9 +-
bin/misc-functions.sh | 4 +
bin/portageq | 43 ++-
bin/quickpkg | 53 ++-
bin/repoman | 480 +++++++++++---------
man/ebuild.5 | 6 +
man/emerge.1 | 17 +-
man/repoman.1 | 9 +-
man/xpak.5 | 253 +++++------
pym/_emerge/EbuildBuild.py | 3 +-
pym/_emerge/EbuildMetadataPhase.py | 35 +-
pym/_emerge/MetadataRegen.py | 13 +-
pym/_emerge/Scheduler.py | 7 +-
pym/_emerge/actions.py | 48 +--
pym/_emerge/main.py | 28 +-
pym/portage/_global_updates.py | 8 +-
pym/portage/cache/ebuild_xattr.py | 3 +-
pym/portage/cache/flat_hash.py | 9 +-
pym/portage/cache/metadata.py | 7 +-
pym/portage/cache/metadata_overlay.py | 105 -----
pym/portage/cache/template.py | 94 +++-
pym/portage/cache/util.py | 170 -------
pym/portage/cache/volatile.py | 3 +-
pym/portage/checksum.py | 4 +-
pym/portage/dbapi/porttree.py | 158 ++++---
pym/portage/eclass_cache.py | 82 +++-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/config.py | 27 +-
pym/portage/package/ebuild/digestcheck.py | 2 +
pym/portage/package/ebuild/doebuild.py | 45 ++-
pym/portage/repository/config.py | 52 ++-
pym/portage/tests/emerge/test_simple.py | 48 ++-
pym/portage/tests/repoman/test_simple.py | 96 ++++-
pym/repoman/utilities.py | 189 ++++++++-
37 files changed, 1230 insertions(+), 911 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-23 11:05 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-23 11:05 UTC (permalink / raw
To: gentoo-commits
commit: d03a7327d9c6951c2a36461fefe2dde71709d5cf
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 23 11:05:32 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 23 11:05:32 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d03a7327
Merge v2.2.0_alpha70
bin/misc-functions.sh | 12 +-
bin/repoman | 16 +-
man/portage.5 | 4 +-
pym/_emerge/depgraph.py | 15 +-
pym/_emerge/resolver/output.py | 23 ++-
pym/portage/dbapi/bintree.py | 28 ++++
pym/portage/repository/config.py | 6 +-
pym/portage/tests/repoman/test_simple.py | 43 +++++-
pym/repoman/utilities.py | 244 ++++++++++++++++++++++++------
9 files changed, 308 insertions(+), 83 deletions(-)
diff --cc bin/misc-functions.sh
index 17932e1,55d9663..80d88c7
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -145,8 -144,8 +145,8 @@@ prepcompress()
}
install_qa_check() {
- local f x
+ local f i x
-
+ [[ -d "${D}" ]] || return 0
cd "${D}" || die "cd failed"
export STRIP_MASK
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-23 11:05 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-23 11:05 UTC (permalink / raw
To: gentoo-commits
commit: 7a2867753bca22f6655ab4760950c0a8be6c8ef7
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 20 20:40:06 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Oct 20 20:40:06 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7a286775
Merge branch 'master' of git+ssh://git.overlays.gentoo.org/proj/portage
pym/portage/tests/repoman/test_simple.py | 18 ++++++++++++++----
1 files changed, 14 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-24 18:54 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-24 18:54 UTC (permalink / raw
To: gentoo-commits
commit: 830a6dd2b58e88c7d0c782900067918c08270bc7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 24 18:54:26 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Oct 24 18:54:26 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=830a6dd2
Merge commit 'v2.2.0_alpha71' into multilib
man/repoman.1 | 5 ++-
pym/_emerge/main.py | 3 +-
pym/portage/tests/emerge/test_global_updates.py | 39 +++++++++++++++++++++++
pym/portage/update.py | 5 +++
4 files changed, 50 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-10-31 19:53 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-10-31 19:53 UTC (permalink / raw
To: gentoo-commits
commit: 0fe2340f8bb892447768b64dfe2970a7be760107
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 31 19:52:01 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Oct 31 19:52:01 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=0fe2340f
Merge commit 'v2.2.0_alpha72' into multilib
bin/ebuild | 4 +-
bin/egencache | 87 ++++--
bin/emaint | 22 +-
bin/glsa-check | 5 +-
bin/lock-helper.py | 4 +-
bin/portageq | 81 +++--
bin/quickpkg | 24 +-
bin/regenworld | 5 +-
bin/repoman | 11 +-
bin/xpak-helper.py | 4 +-
man/emerge.1 | 4 +
man/make.conf.5 | 9 +-
man/portage.5 | 12 +-
pym/_emerge/BlockerDB.py | 5 +-
pym/_emerge/EbuildFetchonly.py | 4 +-
pym/_emerge/EbuildMetadataPhase.py | 6 +-
pym/_emerge/FakeVartree.py | 11 +-
pym/_emerge/Package.py | 8 +-
pym/_emerge/RootConfig.py | 2 +-
pym/_emerge/Scheduler.py | 17 +-
pym/_emerge/actions.py | 304 +++++++----------
pym/_emerge/depgraph.py | 33 +-
pym/_emerge/main.py | 46 ++-
pym/_emerge/unmerge.py | 4 +-
pym/portage/__init__.py | 42 ++-
pym/portage/_global_updates.py | 2 +-
pym/portage/_legacy_globals.py | 12 +-
pym/portage/_sets/__init__.py | 38 ++-
pym/portage/cache/metadata.py | 1 -
pym/portage/cache/template.py | 5 +
pym/portage/checksum.py | 41 ++-
pym/portage/dbapi/_expand_new_virt.py | 3 +-
pym/portage/dbapi/bintree.py | 35 ++-
pym/portage/dbapi/porttree.py | 43 ++-
pym/portage/dbapi/vartree.py | 110 +++++--
pym/portage/dep/dep_check.py | 8 +-
pym/portage/elog/mod_syslog.py | 2 +-
pym/portage/news.py | 74 ++++-
.../package/ebuild/_config/KeywordsManager.py | 6 +-
.../package/ebuild/_config/LocationsManager.py | 83 ++++-
pym/portage/package/ebuild/_config/MaskManager.py | 37 ++-
pym/portage/package/ebuild/_config/UseManager.py | 18 +-
pym/portage/package/ebuild/config.py | 96 +++---
pym/portage/package/ebuild/digestcheck.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 25 +-
pym/portage/repository/config.py | 358 +++++++++++++-------
pym/portage/tests/ebuild/test_config.py | 8 +-
pym/portage/tests/ebuild/test_doebuild_spawn.py | 2 +-
pym/portage/tests/emerge/test_simple.py | 39 ++-
pym/portage/tests/repoman/test_simple.py | 2 +-
pym/portage/tests/resolver/ResolverPlayground.py | 27 +-
pym/portage/util/__init__.py | 11 +-
pym/portage/util/env_update.py | 13 +-
pym/repoman/utilities.py | 4 +
runtests.sh | 20 ++
55 files changed, 1203 insertions(+), 676 deletions(-)
diff --cc pym/_emerge/actions.py
index d8f9032,af3780e..66204b6
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -1464,11 -1468,7 +1468,8 @@@ def action_info(settings, trees, myopts
myvars = portage.util.unique_array(myvars)
use_expand = settings.get('USE_EXPAND', '').split()
+ use_expand.append("MULTILIB_ABIS")
use_expand.sort()
- use_expand_hidden = set(
- settings.get('USE_EXPAND_HIDDEN', '').upper().split())
- alphabetical_use = '--alphabetical' in myopts
unset_vars = []
myvars.sort()
for k in myvars:
diff --cc pym/_emerge/main.py
index e5ba5e1,52e4c42..534d0ea
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@@ -1639,16 -1642,11 +1642,16 @@@ def emerge_main(args=None)
adjust_configs(myopts, trees)
apply_priorities(settings)
+ if settings.get("NO_AUTO_FLAG", "") is "":
+ writemsg_level(bad("!!! Failed to find vars from extra profile") + "\n",level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! Please make sure that you did follow the instructions and included the extra profile\n"),level=logging.ERROR, noiselevel=-1)
+ return 1
+
if myaction == 'version':
writemsg_stdout(getportageversion(
- settings["PORTDIR"], settings["ROOT"],
+ settings["PORTDIR"], None,
settings.profile_path, settings["CHOST"],
- trees[settings["ROOT"]]["vartree"].dbapi) + '\n', noiselevel=-1)
+ trees[settings['EROOT']]['vartree'].dbapi) + '\n', noiselevel=-1)
return 0
elif myaction == 'help':
_emerge.help.help()
diff --cc pym/portage/package/ebuild/config.py
index ceb5154,765a4f7..ee6253f
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@@ -424,16 -430,14 +430,16 @@@ class config(object)
mygcfg_dlists = [getconfig(os.path.join(x, "make.defaults"),
expand=expand_map) for x in self.profiles]
self._make_defaults = mygcfg_dlists
- self.mygcfg = stack_dicts(mygcfg_dlists,
+ mygcfg = stack_dicts(mygcfg_dlists,
incrementals=self.incrementals)
- if self.mygcfg is None:
- self.mygcfg = {}
- self.configlist.append(self.mygcfg)
+ if mygcfg is None:
+ mygcfg = {}
+ self.configlist.append(mygcfg)
self.configdict["defaults"]=self.configlist[-1]
+ if self.configdict["defaults"].get("MULTILIB_ABIS", "").count(' ') != 0:
+ self.configdict["defaults"]["USE"] = self.configdict["defaults"].get("USE", "") + " multilib_abi_" + self.configdict["defaults"].get("DEFAULT_ABI", "")
- self.mygcfg = getconfig(
+ mygcfg = getconfig(
os.path.join(config_root, MAKE_CONF_FILE),
tolerant=tolerant, allow_sourcing=True,
expand=expand_map) or {}
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-11-11 22:52 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-11-11 22:52 UTC (permalink / raw
To: gentoo-commits
commit: 2e4b2de0c7d37d0ddae04507c47aa2af84e3862a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 11 22:51:57 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Nov 11 22:51:57 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2e4b2de0
Merge 2.2_alpha74
RELEASE-NOTES | 5 +
bin/dohtml.py | 12 +-
bin/ebuild-helpers/dobin | 8 +-
bin/ebuild-helpers/dodir | 6 +-
bin/ebuild-helpers/dodoc | 4 +-
bin/ebuild-helpers/doexe | 10 +-
bin/ebuild-helpers/dohard | 8 +-
bin/ebuild-helpers/doinfo | 10 +-
bin/ebuild-helpers/doins | 16 +-
bin/ebuild-helpers/dolib | 6 +-
bin/ebuild-helpers/doman | 8 +-
bin/ebuild-helpers/domo | 11 +-
bin/ebuild-helpers/dosbin | 10 +-
bin/ebuild-helpers/dosed | 8 +-
bin/ebuild-helpers/dosym | 10 +-
bin/ebuild-helpers/ecompressdir | 31 ++--
bin/ebuild-helpers/fowners | 6 +-
bin/ebuild-helpers/fperms | 5 +-
bin/ebuild-helpers/prepall | 10 +-
bin/ebuild-helpers/prepalldocs | 7 +-
bin/ebuild-helpers/prepallinfo | 6 +-
bin/ebuild-helpers/prepallman | 6 +-
bin/ebuild-helpers/prepallstrip | 6 +-
bin/ebuild-helpers/prepinfo | 8 +-
bin/ebuild-helpers/preplib | 8 +-
bin/ebuild-helpers/prepman | 10 +-
bin/ebuild-helpers/prepstrip | 26 ++-
bin/ebuild.sh | 47 +---
bin/isolated-functions.sh | 27 +--
bin/misc-functions.sh | 239 ++++++++++++++++----
bin/phase-functions.sh | 16 +-
bin/phase-helpers.sh | 112 ++++++----
bin/save-ebuild-env.sh | 11 +-
man/emerge.1 | 11 +-
pym/_emerge/actions.py | 2 +-
pym/_emerge/depgraph.py | 15 +-
pym/_emerge/main.py | 46 +++--
pym/_emerge/resolver/circular_dependency.py | 5 +-
pym/_emerge/resolver/output_helpers.py | 49 +++--
pym/_emerge/resolver/slot_collision.py | 2 +-
pym/portage/dbapi/bintree.py | 5 +-
pym/portage/dbapi/vartree.py | 2 +-
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/doebuild.py | 79 ++++++-
pym/portage/tests/bin/setup_env.py | 1 +
pym/portage/tests/emerge/test_simple.py | 39 +++-
pym/portage/tests/resolver/test_multislot.py | 4 +-
runtests.sh | 2 +-
48 files changed, 649 insertions(+), 329 deletions(-)
diff --cc bin/misc-functions.sh
index 80d88c7,1c11dc5..cb95f6a
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -17,8 -17,8 +17,9 @@@ shift $
source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}/ebuild.sh"
install_symlink_html_docs() {
- [[ -e "${D}" ]] || return 0
- cd "${D}" || die "cd failed"
+ case "$EAPI" in 0|1|2) local ED=${D} ;; esac
++ [[ -e "${ED}" ]] || return 0
+ cd "${ED}" || die "cd failed"
#symlink the html documentation (if DOC_SYMLINKS_DIR is set in make.conf)
if [ -n "${DOC_SYMLINKS_DIR}" ] ; then
local mydocdir docdir
@@@ -146,8 -147,9 +148,10 @@@ prepcompress()
install_qa_check() {
local f i x
- [[ -d "${D}" ]] || return 0
- cd "${D}" || die "cd failed"
+ case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+
++ [[ -d "${ED}" ]] || return 0
+ cd "${ED}" || die "cd failed"
export STRIP_MASK
prepall
diff --cc bin/phase-functions.sh
index 1922aa6,f46368d..122faeb
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -590,11 -498,12 +590,15 @@@ dyn_install()
fi
trap "abort_install" SIGINT SIGQUIT
ebuild_phase pre_src_install
- rm -rf "${PORTAGE_BUILDDIR}/image"
- is_auto-multilib && rm -rf "${PORTAGE_BUILDDIR}"/image.${ABI}
- mkdir "${PORTAGE_BUILDDIR}/image"
- for LOOP_ABI in $(get_abi_list); do
+
+ _x=${ED}
+ case "$EAPI" in 0|1|2) _x=${D} ;; esac
+ rm -rf "${D}"
++ is_auto-multilib && rm -rf "${D}".${ABI}
+ mkdir -p "${_x}"
+ unset _x
++ for LOOP_ABI in $(get_abi_list); do
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
if [[ -d $S ]] ; then
cd "${S}"
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-11-18 23:27 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-11-18 23:27 UTC (permalink / raw
To: gentoo-commits
commit: 73e829f92b1d85874fa62ee39d0aeee092521d07
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 18 23:25:45 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Nov 18 23:25:45 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=73e829f9
Merge commit 'v2.2.0_alpha75' into multilib
cnf/make.conf | 2 +-
pym/_emerge/JobStatusDisplay.py | 9 ++++-
pym/_emerge/Scheduler.py | 63 ++++++++++++++++++++-----------
pym/_emerge/actions.py | 2 +-
pym/_emerge/main.py | 3 -
pym/portage/checksum.py | 12 +++++-
pym/portage/tests/emerge/test_simple.py | 4 ++
7 files changed, 65 insertions(+), 30 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-11-19 14:25 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-11-19 14:25 UTC (permalink / raw
To: gentoo-commits
commit: f4a14182fed2fc42054755296ee434c81e8baca6
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 19 14:25:03 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Nov 19 14:25:03 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f4a14182
Merge commit 'v2.2.0_alpha76' into multilib
pym/_emerge/Scheduler.py | 141 ++++++------------------
pym/_emerge/depgraph.py | 11 --
pym/_emerge/main.py | 14 ++-
pym/_emerge/resolver/output.py | 28 +----
pym/_emerge/resolver/output_helpers.py | 4 +-
pym/portage/dbapi/_MergeProcess.py | 58 ----------
pym/portage/elog/messages.py | 33 ++++--
pym/portage/package/ebuild/config.py | 59 ++++++----
pym/portage/package/ebuild/doebuild.py | 55 +++++++++-
pym/portage/tests/resolver/test_merge_order.py | 8 --
10 files changed, 167 insertions(+), 244 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-11-26 14:03 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-11-26 14:03 UTC (permalink / raw
To: gentoo-commits
commit: 82eef59c7b5770ae8a147e55a2f5d282ea6b0c26
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 26 14:03:14 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Nov 26 14:03:14 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=82eef59c
Merge commit 'v2.2.0_alpha78' into multilib
bin/emerge-webrsync | 2 +-
bin/repoman | 1 +
man/emerge.1 | 5 ++++
pym/_emerge/help.py | 2 +-
pym/portage/dbapi/vartree.py | 2 +-
pym/portage/elog/mod_syslog.py | 5 ++++
pym/portage/package/ebuild/config.py | 45 +++++++++++++++++----------------
pym/repoman/utilities.py | 4 +++
8 files changed, 41 insertions(+), 25 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-12-07 21:31 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-12-07 21:31 UTC (permalink / raw
To: gentoo-commits
commit: 4f06140c585394bc9850eb424af135447e66731d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 7 21:31:21 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Dec 7 21:31:21 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=4f06140c
Merge commit 'v2.2.0_alpha79' into multilib
pym/_emerge/depgraph.py | 35 ++++++++++++++++++++++-------------
pym/portage/dbapi/vartree.py | 2 +-
2 files changed, 23 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-12-16 16:30 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-12-16 16:30 UTC (permalink / raw
To: gentoo-commits
commit: 93e622fba8e61722fe5fbdab0f9c29eef7c73e6f
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 16 16:29:07 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 16 16:29:07 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=93e622fb
Merge v2.2.0_alpha81
bin/chpathtool.py | 182 ++++++++++++++++
bin/dispatch-conf | 5 +-
bin/ebuild-helpers/dobin | 5 +-
bin/ebuild-helpers/dodir | 3 +-
bin/ebuild-helpers/dodoc | 3 +-
bin/ebuild-helpers/doexe | 3 +-
bin/ebuild-helpers/dohard | 3 +-
bin/ebuild-helpers/doinfo | 3 +-
bin/ebuild-helpers/doins | 3 +-
bin/ebuild-helpers/dolib | 3 +-
bin/ebuild-helpers/doman | 3 +-
bin/ebuild-helpers/domo | 3 +-
bin/ebuild-helpers/dosbin | 3 +-
bin/ebuild-helpers/dosed | 3 +-
bin/ebuild-helpers/dosym | 3 +-
bin/ebuild-helpers/ecompressdir | 3 +-
bin/ebuild-helpers/fowners | 3 +-
bin/ebuild-helpers/fperms | 4 +-
bin/ebuild-helpers/prepall | 3 +-
bin/ebuild-helpers/prepalldocs | 3 +-
bin/ebuild-helpers/prepallinfo | 3 +-
bin/ebuild-helpers/prepallman | 3 +-
bin/ebuild-helpers/prepallstrip | 3 +-
bin/ebuild-helpers/prepinfo | 3 +-
bin/ebuild-helpers/preplib | 3 +-
bin/ebuild-helpers/prepman | 3 +-
bin/ebuild-helpers/prepstrip | 3 +-
bin/ebuild-ipc.py | 38 +++-
bin/ebuild.sh | 32 ++--
bin/egencache | 8 +-
bin/emerge-webrsync | 2 +
bin/etc-update | 10 +-
bin/lock-helper.py | 1 +
bin/misc-functions.sh | 24 ++-
bin/phase-functions.sh | 27 ++-
bin/phase-helpers.sh | 27 ++-
bin/portageq | 6 +-
bin/repoman | 14 +-
cnf/dispatch-conf.conf | 2 +-
cnf/make.conf | 8 +-
cnf/make.globals | 18 +-
doc/config/sets.docbook | 2 +-
man/emerge.1 | 25 ++-
man/fixpackages.1 | 15 ++
man/make.conf.5 | 16 ++-
pym/_emerge/AbstractEbuildProcess.py | 16 ++-
pym/_emerge/AsynchronousLock.py | 43 +++--
pym/_emerge/Binpkg.py | 75 ++++++-
pym/_emerge/BinpkgEnvExtractor.py | 4 +-
pym/_emerge/EbuildMetadataPhase.py | 23 ++-
pym/_emerge/FifoIpcDaemon.py | 16 +-
pym/_emerge/PipeReader.py | 35 ++--
pym/_emerge/Scheduler.py | 2 +-
pym/_emerge/SpawnProcess.py | 31 ++--
pym/_emerge/SubProcess.py | 5 +-
pym/_emerge/actions.py | 41 +++--
pym/_emerge/depgraph.py | 15 +-
pym/_emerge/emergelog.py | 9 +-
pym/_emerge/main.py | 6 +-
pym/_emerge/unmerge.py | 2 +-
pym/portage/__init__.py | 12 +-
pym/portage/_legacy_globals.py | 1 -
pym/portage/checksum.py | 29 +++
pym/portage/const.py | 25 ++-
pym/portage/data.py | 182 +++++++++++-----
pym/portage/dbapi/_MergeProcess.py | 2 +-
pym/portage/dbapi/porttree.py | 44 +---
pym/portage/dbapi/vartree.py | 4 +-
pym/portage/dispatch_conf.py | 10 +-
pym/portage/exception.py | 4 +
pym/portage/locks.py | 226 ++++++++++++++------
pym/portage/output.py | 15 +-
.../package/ebuild/_config/LocationsManager.py | 5 +-
.../package/ebuild/_config/special_env_vars.py | 8 +-
pym/portage/package/ebuild/_spawn_nofetch.py | 2 +-
pym/portage/package/ebuild/config.py | 115 +++++++---
pym/portage/package/ebuild/doebuild.py | 21 ++-
pym/portage/package/ebuild/fetch.py | 3 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 3 +-
pym/portage/process.py | 7 +-
pym/portage/repository/config.py | 31 +++-
pym/portage/tests/bin/setup_env.py | 6 +-
pym/portage/tests/dbapi/test_fakedbapi.py | 4 +-
pym/portage/tests/ebuild/test_doebuild_spawn.py | 5 +
pym/portage/tests/ebuild/test_ipc_daemon.py | 13 +-
pym/portage/tests/emerge/test_simple.py | 9 +-
pym/portage/tests/locks/test_asynchronous_lock.py | 62 +++++-
pym/portage/tests/locks/test_lock_nonblock.py | 17 ++-
pym/portage/tests/repoman/test_simple.py | 8 +-
pym/portage/tests/resolver/ResolverPlayground.py | 9 +-
pym/portage/tests/util/test_getconfig.py | 2 +-
pym/portage/tests/util/test_uniqueArray.py | 6 +-
pym/portage/util/env_update.py | 2 +-
pym/portage/util/movefile.py | 99 +++++++--
pym/portage/xpak.py | 2 +-
pym/repoman/utilities.py | 2 +-
96 files changed, 1353 insertions(+), 505 deletions(-)
diff --cc bin/misc-functions.sh
index cb95f6a,3582889..ed77353
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -17,8 -17,8 +17,9 @@@ shift $
source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}/ebuild.sh"
install_symlink_html_docs() {
- case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ [[ " ${FEATURES} " == *" force-prefix "* ]] || \
+ case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ [[ -e "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
#symlink the html documentation (if DOC_SYMLINKS_DIR is set in make.conf)
if [ -n "${DOC_SYMLINKS_DIR}" ] ; then
@@@ -148,9 -149,9 +150,10 @@@ prepcompress()
install_qa_check() {
local f i x
- case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ [[ " ${FEATURES} " == *" force-prefix "* ]] || \
+ case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ [[ -d "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
export STRIP_MASK
diff --cc bin/phase-functions.sh
index 9e2d275,664202a..1ac66e3
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -592,13 -504,11 +596,14 @@@ dyn_install()
ebuild_phase pre_src_install
_x=${ED}
- case "$EAPI" in 0|1|2) _x=${D} ;; esac
+ [[ " ${FEATURES} " == *" force-prefix "* ]] || \
+ case "$EAPI" in 0|1|2) _x=${D} ;; esac
rm -rf "${D}"
+ is_auto-multilib && rm -rf "${D}".${ABI}
mkdir -p "${_x}"
unset _x
+ for LOOP_ABI in $(get_abi_list); do
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
if [[ -d $S ]] ; then
cd "${S}"
@@@ -669,18 -558,22 +674,32 @@@
[[ -n $x ]] && echo "$x" > $f
done
fi
+ if has_multilib_profile ; then
+ local i= x=
+ for i in ${MULTILIB_ABIS} ; do
+ x+=" multilib_abi_${i}"
+ done
+ echo "${IUSE}${x}" > IUSE
+ fi
echo "${USE}" > USE
echo "${EAPI:-0}" > EAPI
+ if is_auto-multilib; then
+ echo "$(get_abi_order)" > MULTILIB_ABIS
+ fi
+
+ # Save EPREFIX, since it makes it easy to use chpathtool to
+ # adjust the content of a binary package so that it will
+ # work in a different EPREFIX from the one is was built for.
+ case "${EAPI:-0}" in
+ 0|1|2)
+ [[ " ${FEATURES} " == *" force-prefix "* ]] && \
+ [ -n "${EPREFIX}" ] && echo "${EPREFIX}" > EPREFIX
+ ;;
+ *)
+ [ -n "${EPREFIX}" ] && echo "${EPREFIX}" > EPREFIX
+ ;;
+ esac
+
set +f
# local variables can leak into the saved environment.
diff --cc pym/portage/package/ebuild/config.py
index 985b86f,f6166c6..fbb5263
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@@ -725,20 -726,50 +728,54 @@@ class config(object)
self["USERLAND"] = "GNU"
self.backup_changes("USERLAND")
- for var in ("PORTAGE_INST_UID", "PORTAGE_INST_GID"):
+ default_inst_ids = {
+ "PORTAGE_INST_GID": "0",
+ "PORTAGE_INST_UID": "0",
+ }
+
+ if eprefix:
+ # For prefix environments, default to the UID and GID of
+ # the top-level EROOT directory.
try:
- self[var] = str(int(self.get(var, "0")))
+ eroot_st = os.stat(eroot)
+ except OSError:
+ pass
+ else:
+ default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
+ default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
+
+ if "PORTAGE_USERNAME" not in self:
+ try:
+ pwd_struct = pwd.getpwuid(eroot_st.st_uid)
+ except KeyError:
+ pass
+ else:
+ self["PORTAGE_USERNAME"] = pwd_struct.pw_name
+ self.backup_changes("PORTAGE_USERNAME")
+
+ if "PORTAGE_GRPNAME" not in self:
+ try:
+ grp_struct = grp.getgrgid(eroot_st.st_gid)
+ except KeyError:
+ pass
+ else:
+ self["PORTAGE_GRPNAME"] = grp_struct.gr_name
+ self.backup_changes("PORTAGE_GRPNAME")
+
+ for var, default_val in default_inst_ids.items():
+ try:
+ self[var] = str(int(self.get(var, default_val)))
except ValueError:
writemsg(_("!!! %s='%s' is not a valid integer. "
- "Falling back to '0'.\n") % (var, self[var]),
+ "Falling back to %s.\n") % (var, self[var], default_val),
noiselevel=-1)
- self[var] = "0"
+ self[var] = default_val
self.backup_changes(var)
+ #add multilib_abi internally to list of USE_EXPANDed vars
+ self["USE_EXPAND"] = "multilib_abi" + " " + self.get("USE_EXPAND", "")
+ self.backup_changes("USE_EXPAND")
+
# initialize self.features
self.regenerate()
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-12-24 14:16 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-12-24 14:16 UTC (permalink / raw
To: gentoo-commits
commit: 06259074cf1c75044715bad9229e2aa2a090fc82
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 24 14:15:40 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Dec 24 14:15:40 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=06259074
Merge commit 'v2.2.0_alpha82' into multilib
RELEASE-NOTES | 5 -
bin/ebuild-helpers/newbin | 5 +-
bin/ebuild-helpers/newconfd | 5 +-
bin/ebuild-helpers/newdoc | 5 +-
bin/ebuild-helpers/newenvd | 5 +-
bin/ebuild-helpers/newexe | 5 +-
bin/ebuild-helpers/newinitd | 5 +-
bin/ebuild-helpers/newins | 3 +
bin/ebuild-helpers/newlib.a | 5 +-
bin/ebuild-helpers/newlib.so | 5 +-
bin/ebuild-helpers/newman | 5 +-
bin/ebuild-helpers/newsbin | 5 +-
bin/ebuild-helpers/prepstrip | 37 ++++--
bin/ebuild.sh | 20 ++-
bin/isolated-functions.sh | 6 +-
bin/misc-functions.sh | 92 ++++++++++---
bin/phase-functions.sh | 19 ++-
cnf/make.conf | 6 +
cnf/make.conf.ia64.diff | 23 +---
cnf/make.conf.s390.diff | 23 +---
cnf/make.globals | 4 +-
doc/package/ebuild.docbook | 1 +
doc/package/ebuild/eapi/4-python.docbook | 49 +++++++
doc/portage.docbook | 1 +
man/ebuild.5 | 12 ++-
man/emerge.1 | 20 ++--
man/make.conf.5 | 9 +-
pym/_emerge/AbstractPollTask.py | 67 ++++++++-
pym/_emerge/AsynchronousLock.py | 4 +-
pym/_emerge/BinpkgExtractorAsync.py | 3 +-
pym/_emerge/BlockerCache.py | 2 +-
pym/_emerge/EbuildExecuter.py | 2 -
pym/_emerge/FakeVartree.py | 2 -
pym/_emerge/MergeListItem.py | 2 +-
pym/_emerge/PackageMerge.py | 2 +-
pym/_emerge/PipeReader.py | 60 +++++---
pym/_emerge/Scheduler.py | 22 +++-
pym/_emerge/SpawnProcess.py | 50 +++----
pym/_emerge/actions.py | 19 +--
pym/_emerge/depgraph.py | 73 ++++------
pym/_emerge/main.py | 12 +-
pym/_emerge/resolver/backtracking.py | 2 +-
pym/_emerge/resolver/output.py | 2 +-
pym/_emerge/resolver/slot_collision.py | 2 +-
pym/_emerge/search.py | 2 +-
pym/portage/data.py | 55 ++++++--
pym/portage/dbapi/vartree.py | 128 ++++++++++++++---
pym/portage/eclass_cache.py | 2 +
.../package/ebuild/_config/special_env_vars.py | 2 +-
pym/portage/package/ebuild/config.py | 5 +-
pym/portage/package/ebuild/doebuild.py | 4 +
pym/portage/package/ebuild/fetch.py | 25 ++--
pym/portage/repository/config.py | 82 +++++------
pym/portage/tests/ebuild/test_pty_eof.py | 45 ------
pym/portage/tests/emerge/test_simple.py | 4 +-
pym/portage/tests/process/test_poll.py | 58 +++++++--
pym/portage/util/_pty.py | 153 +-------------------
57 files changed, 740 insertions(+), 531 deletions(-)
diff --cc bin/phase-functions.sh
index 1ac66e3,2167853..db41f35
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -123,15 -127,15 +127,18 @@@ filter_readonly_variables()
LC_NUMERIC LC_PAPER LC_TIME"
fi
if ! has --allow-extra-vars $* ; then
- filtered_vars="
- ${filtered_vars}
- ${PORTAGE_SAVED_READONLY_VARS}
- ${PORTAGE_MUTABLE_FILTERED_VARS}
- "
+ if [ "${EMERGE_FROM}" = binary ] ; then
+ # preserve additional variables from build time,
+ # while excluding untrusted variables
+ filtered_vars+=" ${binpkg_untrusted_vars}"
+ else
+ filtered_vars+=" ${PORTAGE_SAVED_READONLY_VARS}"
+ filtered_vars+=" ${PORTAGE_MUTABLE_FILTERED_VARS}"
+ fi
fi
+ if has --filter-metadata $* ; then
+ filtered_vars+=" ${PORTAGE_READONLY_METADATA} filter_opts"
+ fi
"${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" || die "filter-bash-environment.py failed"
}
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2011-12-28 13:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2011-12-28 13:33 UTC (permalink / raw
To: gentoo-commits
commit: ea7b8a670b20397448d53bf971a66bcc9896714c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 28 13:33:04 2011 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Dec 28 13:33:04 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ea7b8a67
Merge commit 'v2.2.0_alpha84' into multilib
bin/misc-functions.sh | 157 ++++++++++++----------
bin/repoman | 8 +-
man/ebuild.5 | 2 +-
man/make.conf.5 | 6 +-
pym/_emerge/FakeVartree.py | 1 +
pym/portage/const.py | 1 +
pym/portage/dbapi/vartree.py | 15 ++-
pym/portage/repository/config.py | 38 +++---
pym/portage/tests/ebuild/test_config.py | 2 +
pym/portage/tests/resolver/ResolverPlayground.py | 10 +-
pym/portage/xpak.py | 2 +-
11 files changed, 140 insertions(+), 102 deletions(-)
diff --cc bin/misc-functions.sh
index 252fba1,5a726b3..a27d5da
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -153,9 -152,92 +153,93 @@@ install_qa_check()
[[ " ${FEATURES} " == *" force-prefix "* ]] || \
case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ [[ -d "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
+ # Merge QA_FLAGS_IGNORED and QA_DT_HASH into a single array, since
+ # QA_DT_HASH is deprecated.
+ qa_var="QA_FLAGS_IGNORED_${ARCH/-/_}"
+ eval "[[ -n \${!qa_var} ]] && QA_FLAGS_IGNORED=(\"\${${qa_var}[@]}\")"
+ if [[ ${#QA_FLAGS_IGNORED[@]} -eq 1 ]] ; then
+ local shopts=$-
+ set -o noglob
+ QA_FLAGS_IGNORED=(${QA_FLAGS_IGNORED})
+ set +o noglob
+ set -${shopts}
+ fi
+
+ qa_var="QA_DT_HASH_${ARCH/-/_}"
+ eval "[[ -n \${!qa_var} ]] && QA_DT_HASH=(\"\${${qa_var}[@]}\")"
+ if [[ ${#QA_DT_HASH[@]} -eq 1 ]] ; then
+ local shopts=$-
+ set -o noglob
+ QA_DT_HASH=(${QA_DT_HASH})
+ set +o noglob
+ set -${shopts}
+ fi
+
+ if [[ -n ${QA_DT_HASH} ]] ; then
+ QA_FLAGS_IGNORED=("${QA_FLAGS_IGNORED[@]}" "${QA_DT_HASH[@]}")
+ unset QA_DT_HASH
+ fi
+
+ # Merge QA_STRICT_FLAGS_IGNORED and QA_STRICT_DT_HASH, since
+ # QA_STRICT_DT_HASH is deprecated
+ if [ "${QA_STRICT_FLAGS_IGNORED-unset}" = unset ] && \
+ [ "${QA_STRICT_DT_HASH-unset}" != unset ] ; then
+ QA_STRICT_FLAGS_IGNORED=1
+ unset QA_STRICT_DT_HASH
+ fi
+
+ # Check for files built without respecting *FLAGS. Note that
+ # -frecord-gcc-switches must be in all *FLAGS variables, in
+ # order to avoid false positive results here.
+ # NOTE: This check must execute before prepall/prepstrip, since
+ # prepstrip strips the .GCC.command.line sections.
+ if type -P scanelf > /dev/null && ! has binchecks ${RESTRICT} && \
+ [[ "${CFLAGS}" == *-frecord-gcc-switches* ]] && \
+ [[ "${CXXFLAGS}" == *-frecord-gcc-switches* ]] && \
+ [[ "${FFLAGS}" == *-frecord-gcc-switches* ]] && \
+ [[ "${FCFLAGS}" == *-frecord-gcc-switches* ]] ; then
+ rm -f "${T}"/scanelf-ignored-CFLAGS.log
+ for x in $(scanelf -qyRF '%k %p' -k \!.GCC.command.line "${ED}" | \
+ sed -e "s:\!.GCC.command.line ::") ; do
+ # Separate out file types that are known to support
+ # .GCC.command.line sections, using the `file` command
+ # similar to how prepstrip uses it.
+ f=$(file "${x}") || continue
+ [[ -z ${f} ]] && continue
+ if [[ ${f} == *"SB executable"* ||
+ ${f} == *"SB shared object"* ]] ; then
+ echo "${x}" >> "${T}"/scanelf-ignored-CFLAGS.log
+ fi
+ done
+
+ if [[ -f "${T}"/scanelf-ignored-CFLAGS.log ]] ; then
+
+ if [ "${QA_STRICT_FLAGS_IGNORED-unset}" = unset ] ; then
+ for x in "${QA_FLAGS_IGNORED[@]}" ; do
+ sed -e "s#^${x#/}\$##" -i "${T}"/scanelf-ignored-CFLAGS.log
+ done
+ fi
+ # Filter anything under /usr/lib/debug/ in order to avoid
+ # duplicate warnings for splitdebug files.
+ sed -e "s#^usr/lib/debug/.*##" -e "/^\$/d" -e "s#^#/#" \
+ -i "${T}"/scanelf-ignored-CFLAGS.log
+ f=$(<"${T}"/scanelf-ignored-CFLAGS.log)
+ if [[ -n ${f} ]] ; then
+ vecho -ne '\n'
+ eqawarn "${BAD}QA Notice: Files built without respecting CFLAGS have been detected${NORMAL}"
+ eqawarn " Please include the following list of files in your report:"
+ eqawarn "${f}"
+ vecho -ne '\n'
+ sleep 1
+ else
+ rm -f "${T}"/scanelf-ignored-CFLAGS.log
+ fi
+ fi
+ fi
+
export STRIP_MASK
prepall
has "${EAPI}" 0 1 2 3 || prepcompress
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-02-06 19:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-02-06 19:38 UTC (permalink / raw
To: gentoo-commits
commit: 135714d23121ab2a39f54a9cc46e0445c7ee39e5
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 6 19:37:27 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Feb 6 19:37:27 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=135714d2
Merge commit 'v2.2.0_alpha85' into multilib
DEVELOPING | 36 ++---
bin/ebuild-helpers/ecompressdir | 4 +
bin/ebuild-helpers/prepstrip | 8 +-
bin/ebuild.sh | 4 +-
bin/egencache | 20 ++--
bin/misc-functions.sh | 27 +++-
bin/phase-functions.sh | 4 +-
bin/phase-helpers.sh | 14 +-
bin/portageq | 17 ++-
bin/repoman | 24 +--
cnf/make.globals | 2 +-
doc/package/ebuild/eapi/4-python.docbook | 51 +++++++
man/ebuild.5 | 2 +-
man/emerge.1 | 10 +-
man/make.conf.5 | 14 ++-
man/portage.5 | 3 +
man/repoman.1 | 6 -
pym/_emerge/EbuildPhase.py | 6 +-
pym/_emerge/MiscFunctionsProcess.py | 10 +-
pym/_emerge/actions.py | 1 +
pym/_emerge/create_world_atom.py | 35 ++++-
pym/_emerge/depgraph.py | 33 +++--
pym/_emerge/main.py | 2 +
pym/_emerge/resolver/output.py | 156 ++++++++++++--------
pym/_emerge/resolver/output_helpers.py | 11 +-
pym/portage/const.py | 8 +-
pym/portage/dbapi/vartree.py | 27 +++-
pym/portage/debug.py | 4 +-
pym/portage/dep/__init__.py | 19 ++-
pym/portage/eapi.py | 8 +-
.../package/ebuild/_config/special_env_vars.py | 6 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 9 +-
pym/portage/package/ebuild/doebuild.py | 13 +-
pym/portage/repository/config.py | 33 +++--
pym/portage/tests/ebuild/test_config.py | 3 +-
pym/portage/util/__init__.py | 21 +++-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 7 +
pym/portage/util/env_update.py | 4 -
pym/portage/util/movefile.py | 4 +-
pym/portage/xml/metadata.py | 9 +-
40 files changed, 452 insertions(+), 223 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-02-18 15:52 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-02-18 15:52 UTC (permalink / raw
To: gentoo-commits
commit: e44e308eb68a1a7b5574450006e87e976fb23b98
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 18 15:51:00 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Feb 18 15:51:00 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e44e308e
Merge commit 'v2.2.0_alpha87' into multilib
bin/repoman | 27 +-
man/portage.5 | 2 +
man/repoman.1 | 5 +-
pym/_emerge/AbstractDepPriority.py | 4 +-
pym/_emerge/AbstractEbuildProcess.py | 36 ++-
pym/_emerge/AbstractPollTask.py | 47 ++-
pym/_emerge/AsynchronousLock.py | 36 +-
pym/_emerge/AsynchronousTask.py | 30 +-
pym/_emerge/Binpkg.py | 4 +-
pym/_emerge/BinpkgFetcher.py | 3 -
pym/_emerge/CompositeTask.py | 5 +-
pym/_emerge/Dependency.py | 5 +-
pym/_emerge/EbuildBuild.py | 4 +-
pym/_emerge/EbuildBuildDir.py | 5 +-
pym/_emerge/EbuildExecuter.py | 2 +-
pym/_emerge/EbuildFetcher.py | 13 +-
pym/_emerge/EbuildFetchonly.py | 4 +-
pym/_emerge/EbuildIpcDaemon.py | 31 ++-
pym/_emerge/EbuildMerge.py | 4 +-
pym/_emerge/EbuildMetadataPhase.py | 7 +-
pym/_emerge/FifoIpcDaemon.py | 9 +-
pym/_emerge/JobStatusDisplay.py | 10 +-
pym/_emerge/MetadataRegen.py | 72 ++--
pym/_emerge/PipeReader.py | 12 +-
pym/_emerge/PollScheduler.py | 331 ++++-----------
pym/_emerge/QueueScheduler.py | 73 ++--
pym/_emerge/Scheduler.py | 127 ++----
pym/_emerge/SequentialTaskQueue.py | 72 ++--
pym/_emerge/SpawnProcess.py | 24 +-
pym/_emerge/SubProcess.py | 60 ++--
pym/_emerge/Task.py | 5 +-
pym/_emerge/TaskScheduler.py | 1 +
pym/_emerge/depgraph.py | 16 +-
pym/portage/checksum.py | 31 +--
pym/portage/dbapi/_MergeProcess.py | 38 ++-
pym/portage/dbapi/vartree.py | 22 +-
pym/portage/package/ebuild/config.py | 17 +
pym/portage/package/ebuild/doebuild.py | 3 +-
pym/portage/package/ebuild/fetch.py | 22 +-
pym/portage/process.py | 41 ++-
pym/portage/repository/config.py | 9 +-
pym/portage/tests/ebuild/test_ipc_daemon.py | 14 +-
pym/portage/tests/process/test_poll.py | 14 +-
pym/portage/update.py | 5 +-
pym/{_emerge => portage/util}/SlotObject.py | 13 +-
.../util/_dyn_libs/PreservedLibsRegistry.py | 61 +++-
pym/portage/util/_eventloop/EventLoop.py | 476 ++++++++++++++++++++
pym/portage/util/_eventloop/GlibEventLoop.py | 23 +
.../util/_eventloop}/PollConstants.py | 0
.../util/_eventloop}/PollSelectAdapter.py | 7 +-
.../util/_eventloop}/__init__.py | 2 +-
pym/portage/util/_eventloop/global_event_loop.py | 35 ++
pym/portage/util/mtimedb.py | 75 +++-
pym/portage/xpak.py | 44 +-
pym/repoman/checks.py | 3 +-
runtests.sh | 14 +-
56 files changed, 1311 insertions(+), 744 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-02-23 19:08 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-02-23 19:08 UTC (permalink / raw
To: gentoo-commits
commit: b58cc3bd0dd249d2c90c44589efce187b22fe82d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 23 19:07:55 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Feb 23 19:07:55 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b58cc3bd
Merge commit 'v2.2.0_alpha89' into multilib
bin/ebuild-helpers/ecompressdir | 13 ++-
pym/_emerge/Scheduler.py | 3 +-
pym/portage/dbapi/vartree.py | 280 ++++++++++++++++++++++++++-------------
3 files changed, 202 insertions(+), 94 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-02-25 12:04 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-02-25 12:04 UTC (permalink / raw
To: gentoo-commits
commit: 900118198db83ac7bde471f5423114618550463c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 25 11:41:59 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Feb 25 11:41:59 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=90011819
Drop unused script
---
add_lib32.sh | 5 -----
1 files changed, 0 insertions(+), 5 deletions(-)
diff --git a/add_lib32.sh b/add_lib32.sh
deleted file mode 100755
index 87fdb79..0000000
--- a/add_lib32.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-cd /var/db/pkg
-for i in */*/IUSE; do grep lib32 $i>/dev/null || echo $(cat $i) lib32 > $i ; done
-for i in */*; do ! [[ -e $i/IUSE ]] && echo lib32 > $i/IUSE ; done
-touch */*
^ permalink raw reply related [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-02-26 16:27 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-02-26 16:27 UTC (permalink / raw
To: gentoo-commits
commit: 1606299e37b2ba36c4876891833a51c0dda95e6b
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 26 12:51:25 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 26 12:51:25 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1606299e
Merge branch 'master' into multilib
pym/_emerge/depgraph.py | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-03-06 18:21 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-03-06 18:21 UTC (permalink / raw
To: gentoo-commits
commit: b3875c1248e3a076326096be74a26536245aac36
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 6 18:21:17 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Mar 6 18:21:17 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b3875c12
Merge commit 'v2.2.0_alpha90' into multilib
bin/repoman | 23 ++++-
pym/_emerge/actions.py | 2 +-
pym/_emerge/depgraph.py | 128 ++++++++++++--------
pym/portage/cvstree.py | 10 ++-
pym/portage/tests/resolver/test_autounmask.py | 47 +++++++-
.../util/_dyn_libs/PreservedLibsRegistry.py | 36 +++++-
pym/repoman/utilities.py | 33 +++++-
7 files changed, 217 insertions(+), 62 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-03-18 15:29 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-03-18 15:29 UTC (permalink / raw
To: gentoo-commits
commit: eedca77080c03ef7f08dba388ce4ccac768e4bbc
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 18 15:28:56 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Mar 18 15:28:56 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=eedca770
Merge commit 'v2.2.0_alpha91' into multilib
Makefile | 214 +++++++++
bin/dispatch-conf | 50 ++-
bin/ebuild.sh | 46 ++-
bin/etc-update | 755 ++++++++++++++++++--------------
bin/isolated-functions.sh | 2 +-
bin/misc-functions.sh | 7 +
bin/portageq | 8 +
bin/repoman | 35 ++-
man/etc-update.1 | 32 +-
man/repoman.1 | 17 +-
mkrelease.sh | 2 +-
pym/_emerge/AsynchronousTask.py | 15 +
pym/_emerge/Binpkg.py | 6 +-
pym/_emerge/EbuildBuild.py | 6 +-
pym/_emerge/actions.py | 53 ++-
pym/_emerge/main.py | 21 +-
pym/_emerge/resolver/output.py | 13 +-
pym/portage/dbapi/vartree.py | 10 +-
pym/portage/dispatch_conf.py | 8 +-
pym/portage/manifest.py | 10 +-
pym/portage/output.py | 6 +
pym/portage/package/ebuild/doebuild.py | 31 +-
pym/portage/util/whirlpool.py | 2 +-
23 files changed, 924 insertions(+), 425 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-03-21 18:50 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-03-21 18:50 UTC (permalink / raw
To: gentoo-commits
commit: 8c2261e66098f9070972ef42369b71cc01bb6dbb
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 21 18:49:34 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Mar 21 18:49:34 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=8c2261e6
Merge commit 'v2.2.0_alpha93' into multilib
pym/_emerge/resolver/output.py | 3 +-
pym/portage/dbapi/vartree.py | 9 ++++++++
pym/portage/dispatch_conf.py | 2 +-
pym/portage/package/ebuild/_spawn_nofetch.py | 6 ++++-
pym/portage/package/ebuild/digestgen.py | 3 +-
pym/portage/package/ebuild/doebuild.py | 28 ++++++++++++++++++-------
6 files changed, 37 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-03-23 14:42 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-03-23 14:42 UTC (permalink / raw
To: gentoo-commits
commit: 0262156749b0fb2050499ffbc888ac7913a63caf
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 23 14:41:45 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Mar 23 14:41:45 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=02621567
Merge commit 'v2.2.0_alpha94' into multilib
bin/misc-functions.sh | 12 +++
pym/_emerge/EbuildBuild.py | 5 +-
pym/_emerge/Scheduler.py | 2 +-
pym/_emerge/actions.py | 5 +-
pym/_emerge/main.py | 2 -
pym/_emerge/resolver/output.py | 10 +--
pym/_emerge/resolver/output_helpers.py | 78 ++++++++++++++++----
pym/portage/package/ebuild/getmaskingreason.py | 8 ++-
.../util/_dyn_libs/PreservedLibsRegistry.py | 10 +-
pym/portage/util/mtimedb.py | 22 +++---
10 files changed, 108 insertions(+), 46 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-03-24 10:51 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-03-24 10:51 UTC (permalink / raw
To: gentoo-commits
commit: dbd8a00d8b9e58d67935c3f9c5b05c20cd5301bb
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 24 10:51:26 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Mar 24 10:51:26 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=dbd8a00d
Merge commit 'v2.2.0_alpha95' into multilib
bin/repoman | 6 +++-
pym/portage/dbapi/vartree.py | 31 ++++++++++++----
.../util/_dyn_libs/PreservedLibsRegistry.py | 2 +-
pym/portage/util/movefile.py | 38 ++++++++++++-------
pym/portage/util/mtimedb.py | 2 +-
5 files changed, 55 insertions(+), 24 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-03-30 18:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-03-30 18:55 UTC (permalink / raw
To: gentoo-commits
commit: 269ac6cf72f48bcf4f8042a3b4d0448e72a1d3c3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 30 18:55:26 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Mar 30 18:55:26 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=269ac6cf
Merge commit 'v2.2.0_alpha96' into multilib
Makefile | 5 +-
bin/emerge-webrsync | 12 ++++-
bin/etc-update | 5 +-
bin/repoman | 4 +-
pym/_emerge/BlockerCache.py | 2 +-
pym/_emerge/CompositeTask.py | 2 +-
pym/_emerge/EbuildFetcher.py | 14 ++----
pym/_emerge/JobStatusDisplay.py | 2 +-
pym/_emerge/Package.py | 4 +-
pym/_emerge/PollScheduler.py | 2 +-
pym/_emerge/QueueScheduler.py | 2 +-
pym/_emerge/Scheduler.py | 10 ++--
pym/_emerge/_flush_elog_mod_echo.py | 2 +-
pym/_emerge/actions.py | 45 ++++++++++----------
pym/_emerge/depgraph.py | 12 +++---
pym/_emerge/main.py | 2 +-
pym/_emerge/resolver/output.py | 8 ++--
pym/_emerge/unmerge.py | 14 ++++---
pym/_emerge/userquery.py | 6 +-
pym/portage/cache/mappings.py | 2 +-
pym/portage/dbapi/_MergeProcess.py | 13 +----
pym/portage/dbapi/bintree.py | 6 +-
pym/portage/dbapi/porttree.py | 6 +-
pym/portage/dbapi/vartree.py | 10 ++--
pym/portage/dep/__init__.py | 2 +-
pym/portage/env/loaders.py | 4 +-
pym/portage/glsa.py | 8 ++--
pym/portage/locks.py | 22 +++++++++-
pym/portage/news.py | 2 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 2 +-
pym/portage/package/ebuild/digestcheck.py | 2 +-
pym/portage/package/ebuild/digestgen.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 4 +-
pym/portage/process.py | 18 +++++++-
pym/portage/tests/locks/test_lock_nonblock.py | 5 ++-
pym/portage/util/ExtractKernelVersion.py | 2 +-
pym/portage/util/__init__.py | 3 +-
.../util/_dyn_libs/PreservedLibsRegistry.py | 2 +-
pym/portage/util/_eventloop/EventLoop.py | 2 +-
pym/portage/util/_pty.py | 2 +-
pym/portage/util/lafilefixer.py | 2 +-
pym/portage/util/listdir.py | 2 +-
pym/portage/util/movefile.py | 23 ++++++----
pym/repoman/utilities.py | 6 +-
44 files changed, 170 insertions(+), 135 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-04-01 22:00 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-04-01 22:00 UTC (permalink / raw
To: gentoo-commits
commit: 0f71144b7d76f7ac11a168d821b490808ecccf64
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 1 22:00:32 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Apr 1 22:00:32 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=0f71144b
Merge commit 'v2.2.0_alpha98' into multilib
bin/ebuild-helpers/dosym | 7 +-
bin/ebuild-helpers/fowners | 10 ++-
bin/repoman | 2 +-
man/portage.5 | 5 +-
pym/portage/dispatch_conf.py | 24 ++--
pym/portage/util/__init__.py | 104 +++++++++++--------
pym/portage/xpak.py | 247 +++++++++++++++++++++---------------------
7 files changed, 214 insertions(+), 185 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-04-04 12:42 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-04-04 12:42 UTC (permalink / raw
To: gentoo-commits
commit: 3f0a9e438e41d40ad89bf752a5fd77c2fba3988a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 4 12:41:58 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Apr 4 12:41:58 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=3f0a9e43
Merge commit 'v2.2.0_alpha99' into multilib
bin/repoman | 2 +-
pym/portage/package/ebuild/config.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-04-06 11:50 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-04-06 11:50 UTC (permalink / raw
To: gentoo-commits
commit: 2aee99c23f5917605b86ff28b0c395916fe99ea1
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Apr 6 11:49:41 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Apr 6 11:49:41 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2aee99c2
Merge commit 'v2.2.0_alpha100' into multilib
bin/misc-functions.sh | 6 ++++--
pym/_emerge/Scheduler.py | 6 +++++-
pym/_emerge/actions.py | 2 +-
pym/_emerge/depgraph.py | 12 +++++++++++-
pym/_emerge/resolver/slot_collision.py | 18 +++++++++++++++---
pym/_emerge/unmerge.py | 15 ++++++++++++++-
pym/portage/package/ebuild/config.py | 8 ++++----
pym/portage/package/ebuild/doebuild.py | 3 +--
pym/portage/tests/util/test_getconfig.py | 26 +++++++++++++++++++++++++-
9 files changed, 80 insertions(+), 16 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-04-24 21:26 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-04-24 21:26 UTC (permalink / raw
To: gentoo-commits
commit: 16f70cad3248d7dc91aa8143eb62d256591c13a3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 24 21:26:15 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Apr 24 21:26:15 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=16f70cad
Merge commit 'v2.2.0_alpha101' into multilib
bin/dohtml.py | 3 +-
bin/isolated-functions.sh | 12 ++++-
bin/portageq | 58 +++++++++++++--------
bin/repoman | 19 ++++---
doc/package/ebuild/phases.docbook | 9 +++
man/ebuild.5 | 4 +-
man/repoman.1 | 3 +-
pym/_emerge/EbuildBinpkg.py | 6 ++-
pym/_emerge/PackageVirtualDbapi.py | 22 +++++---
pym/_emerge/depgraph.py | 5 +-
pym/_emerge/main.py | 8 ++-
pym/portage/checksum.py | 2 +-
pym/portage/dbapi/porttree.py | 36 ++++++--------
pym/portage/dbapi/vartree.py | 14 +++---
pym/portage/dbapi/virtual.py | 22 +++++---
pym/portage/dep/__init__.py | 3 +-
pym/portage/package/ebuild/doebuild.py | 7 +++
pym/portage/package/ebuild/prepare_build_dirs.py | 22 ++++++++-
pym/portage/xml/metadata.py | 6 +-
pym/repoman/checks.py | 36 ++++++++++----
pym/repoman/herdbase.py | 4 +-
21 files changed, 194 insertions(+), 107 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-05-11 20:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-05-11 20:38 UTC (permalink / raw
To: gentoo-commits
commit: e3d837d79df8136334699020a16b1c39baa255b7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri May 11 20:38:14 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri May 11 20:38:14 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e3d837d7
Merge commit 'v2.2.0_alpha103' into multilib
bin/ebuild.sh | 32 ++++----
bin/isolated-functions.sh | 8 +-
bin/misc-functions.sh | 67 +++++++---------
bin/repoman | 21 ++---
cnf/make.globals | 7 +-
doc/package/ebuild/eapi/4-python.docbook | 6 ++
man/make.conf.5 | 14 ++--
man/repoman.1 | 4 +-
pym/_emerge/EbuildMetadataPhase.py | 83 +++++++++++++------
pym/_emerge/actions.py | 8 +--
pym/_emerge/depgraph.py | 15 +++-
pym/portage/__init__.py | 34 ++++-----
pym/portage/dbapi/bintree.py | 7 +-
pym/portage/dbapi/porttree.py | 44 +++-------
pym/portage/dbapi/vartree.py | 22 +++---
pym/portage/dispatch_conf.py | 10 ++-
pym/portage/glsa.py | 10 +--
.../package/ebuild/_config/LocationsManager.py | 1 +
.../package/ebuild/_config/special_env_vars.py | 5 +-
pym/portage/package/ebuild/_eapi_invalid.py | 46 +++++++++++
pym/portage/package/ebuild/config.py | 3 -
pym/portage/package/ebuild/doebuild.py | 76 +++++++-----------
pym/portage/util/__init__.py | 21 +++++-
pym/portage/util/_desktop_entry.py | 75 ++++++++++++++++++
pym/repoman/checks.py | 15 ++--
25 files changed, 386 insertions(+), 248 deletions(-)
diff --cc bin/misc-functions.sh
index ec72a0c,564af85..14684fd
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -151,9 -150,8 +151,9 @@@ prepcompress()
install_qa_check() {
local f i qa_var x
[[ " ${FEATURES} " == *" force-prefix "* ]] || \
- case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ case "$EAPI" in 0|1|2) local EPREFIX= ED=${D} ;; esac
+ [[ -d "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
# Merge QA_FLAGS_IGNORED and QA_DT_HASH into a single array, since
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-05-12 7:57 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-05-12 7:57 UTC (permalink / raw
To: gentoo-commits
commit: 13505ce8523bd7b0f8879a12a7216589f05733d9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat May 12 07:57:42 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat May 12 07:57:42 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=13505ce8
Merge commit 'v2.2.0_alpha104' into multilib
bin/egencache | 9 ++-
pym/_emerge/EbuildMetadataPhase.py | 46 ++++++++++-----
pym/_emerge/MetadataRegen.py | 8 +-
pym/_emerge/PollScheduler.py | 14 ++++-
pym/_emerge/QueueScheduler.py | 4 +-
pym/_emerge/Scheduler.py | 2 +-
pym/_emerge/TaskScheduler.py | 6 +-
pym/_emerge/actions.py | 8 ---
pym/_emerge/depgraph.py | 2 -
pym/portage/dbapi/porttree.py | 60 +++-----------------
.../package/ebuild/_config/LocationsManager.py | 24 ++++++--
pym/portage/package/ebuild/config.py | 36 +++++++++---
pym/portage/package/ebuild/doebuild.py | 9 +--
pym/portage/package/ebuild/getmaskingstatus.py | 2 -
pym/portage/repository/config.py | 21 +++----
pym/portage/util/_eventloop/EventLoop.py | 50 ++++++++++------
16 files changed, 159 insertions(+), 142 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-05-17 10:00 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-05-17 10:00 UTC (permalink / raw
To: gentoo-commits
commit: a284b20d0e63ea585d491fcc2b8ec14badc2bad0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu May 17 10:00:08 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu May 17 10:00:08 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a284b20d
Merge commit 'v2.2.0_alpha107' into multilib
RELEASE-NOTES | 6 +
bin/ebuild | 10 +-
bin/ebuild-helpers/ecompressdir | 30 ++-
bin/ebuild-helpers/prepstrip | 115 +++++++---
bin/egencache | 6 +-
bin/helper-functions.sh | 62 +++++
bin/repoman | 24 +-
cnf/make.globals | 3 +-
doc/package/ebuild/eapi/4-python.docbook | 6 +
man/make.conf.5 | 5 +-
pym/_emerge/BlockerCache.py | 9 +-
pym/_emerge/Package.py | 32 ++--
pym/_emerge/depgraph.py | 240 +++++++++-----------
pym/_emerge/unmerge.py | 22 +-
pym/portage/__init__.py | 12 +-
pym/portage/_sets/dbapi.py | 14 +-
pym/portage/_sets/security.py | 8 +-
pym/portage/dbapi/__init__.py | 26 ++-
pym/portage/dbapi/bintree.py | 33 ++-
pym/portage/dbapi/porttree.py | 7 +-
pym/portage/dbapi/vartree.py | 26 ++-
pym/portage/dbapi/virtual.py | 10 +-
pym/portage/dep/__init__.py | 166 +++++++++-----
pym/portage/dep/dep_check.py | 36 ++--
pym/portage/eapi.py | 6 +
pym/portage/getbinpkg.py | 19 +-
pym/portage/glsa.py | 21 +-
.../package/ebuild/_config/KeywordsManager.py | 21 +-
.../package/ebuild/_config/LicenseManager.py | 9 +-
.../package/ebuild/_config/LocationsManager.py | 8 +-
pym/portage/package/ebuild/_config/UseManager.py | 12 +-
pym/portage/package/ebuild/_config/helper.py | 4 +-
pym/portage/package/ebuild/_eapi_invalid.py | 16 +-
pym/portage/package/ebuild/config.py | 39 +++-
pym/portage/package/ebuild/doebuild.py | 2 +-
pym/portage/package/ebuild/fetch.py | 7 +-
pym/portage/package/ebuild/getmaskingstatus.py | 14 +-
pym/portage/repository/config.py | 5 +-
pym/portage/tests/dep/testStandalone.py | 5 +-
pym/portage/tests/resolver/test_simple.py | 3 +-
pym/portage/tests/util/test_digraph.py | 50 ++++-
pym/portage/tests/util/test_stackLists.py | 4 +-
pym/portage/util/__init__.py | 64 ++----
pym/portage/util/_urlopen.py | 42 ++++
pym/portage/util/digraph.py | 15 +-
pym/portage/versions.py | 187 +++++++++++-----
pym/portage/xpak.py | 8 +-
47 files changed, 949 insertions(+), 520 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-05-28 10:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-05-28 10:19 UTC (permalink / raw
To: gentoo-commits
commit: f3ef275a3908942468246ebf55dd4a393fbf6eb0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon May 28 10:19:01 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon May 28 10:19:01 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f3ef275a
Merge commit 'v2.2.0_alpha108' into multilib
bin/repoman | 2 +-
pym/portage/cache/template.py | 14 +++++-
pym/portage/dbapi/vartree.py | 2 +-
.../package/ebuild/_config/LocationsManager.py | 46 ++++++++++++++++++-
pym/portage/repository/config.py | 4 +-
pym/portage/util/movefile.py | 6 +-
6 files changed, 61 insertions(+), 13 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-06-03 12:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-06-03 12:33 UTC (permalink / raw
To: gentoo-commits
commit: e66210264938ba53c5f7e6697e9fa3b72c3d8862
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 3 12:33:25 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jun 3 12:33:25 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e6621026
Merge commit 'v2.2.0_alpha109' into multilib
bin/ebuild-helpers/ecompressdir | 26 ++-
bin/ebuild.sh | 3 +
bin/repoman | 10 +-
bin/save-ebuild-env.sh | 3 +-
man/make.conf.5 | 24 ++
man/repoman.1 | 12 +-
pym/_emerge/depgraph.py | 38 ++--
pym/portage/__init__.py | 3 +-
pym/portage/const.py | 1 +
pym/portage/dbapi/__init__.py | 17 +-
pym/portage/dep/__init__.py | 23 +-
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/config.py | 56 +++-
pym/portage/util/__init__.py | 15 +-
pym/repoman/checks.py | 300 +++++++++++++++----
pym/repoman/errors.py | 1 -
16 files changed, 395 insertions(+), 140 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-06-10 12:42 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-06-10 12:42 UTC (permalink / raw
To: gentoo-commits
commit: db01717b3f5efb9fd9e26348b659d423b66bcac0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 10 12:42:23 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jun 10 12:42:23 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=db01717b
Merge commit 'v2.2.0_alpha110' into multilib
bin/helper-functions.sh | 30 +++++++++++++++++++++++++-
bin/repoman | 8 +++++-
pym/_emerge/EbuildPhase.py | 13 +++++++++-
pym/_emerge/FakeVartree.py | 2 +-
pym/_emerge/Package.py | 49 +++++++++++++++++++++++++++++-------------
pym/portage/__init__.py | 10 --------
pym/portage/xml/metadata.py | 10 +++++++-
pym/repoman/checks.py | 5 ++-
pym/repoman/herdbase.py | 6 ++++-
9 files changed, 97 insertions(+), 36 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-07-01 12:01 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-07-01 12:01 UTC (permalink / raw
To: gentoo-commits
commit: 57847abbfcf4049abf5789493673a50ae798867c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 1 12:00:15 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jul 1 12:00:15 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=57847abb
Merge commit 'v2.2.0_alpha114' into multilib
NEWS | 9 +
RELEASE-NOTES | 6 +
bin/dohtml.py | 49 +-
bin/egencache | 3 +
bin/misc-functions.sh | 7 +-
bin/repoman | 32 +-
bin/save-ebuild-env.sh | 3 +
cnf/make.globals | 1 +
doc/package/ebuild.docbook | 1 +
doc/package/ebuild/eapi/4-python.docbook | 230 +++---
doc/package/ebuild/eapi/4-slot-abi.docbook | 70 ++
doc/portage.docbook | 1 +
man/emerge.1 | 36 +-
man/make.conf.5 | 8 +
man/portage.5 | 26 +-
man/repoman.1 | 4 +
pym/_emerge/AtomArg.py | 5 +-
pym/_emerge/Dependency.py | 2 +-
pym/_emerge/DependencyArg.py | 14 +-
pym/_emerge/EbuildPhase.py | 4 +-
pym/_emerge/FakeVartree.py | 32 +-
pym/_emerge/Package.py | 56 +-
pym/_emerge/PollScheduler.py | 13 +-
pym/_emerge/Scheduler.py | 5 +-
pym/_emerge/SetArg.py | 5 +-
pym/_emerge/actions.py | 55 ++-
pym/_emerge/create_depgraph_params.py | 14 +
pym/_emerge/depgraph.py | 840 ++++++++++++++------
pym/_emerge/main.py | 32 +-
pym/_emerge/resolver/backtracking.py | 36 +-
pym/_emerge/resolver/output.py | 25 +-
pym/_emerge/resolver/slot_collision.py | 44 +-
pym/portage/__init__.py | 2 +-
pym/portage/_sets/__init__.py | 12 +-
pym/portage/_sets/files.py | 13 +-
pym/portage/cache/fs_template.py | 22 +-
pym/portage/cache/sqlite.py | 42 +-
pym/portage/const.py | 5 +-
pym/portage/dbapi/__init__.py | 49 +-
pym/portage/dbapi/bintree.py | 1 -
pym/portage/dbapi/porttree.py | 19 +-
pym/portage/dbapi/vartree.py | 61 +-
pym/portage/dbapi/virtual.py | 51 +-
pym/portage/dep/__init__.py | 434 +++++++----
pym/portage/dep/_slot_abi.py | 92 +++
pym/portage/dep/dep_check.py | 15 +-
pym/portage/eapi.py | 38 +
.../package/ebuild/_config/special_env_vars.py | 5 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 10 +-
pym/portage/package/ebuild/config.py | 13 +-
pym/portage/package/ebuild/doebuild.py | 101 ++-
pym/portage/repository/config.py | 6 +-
pym/portage/tests/dbapi/test_fakedbapi.py | 7 +-
pym/portage/tests/dep/testAtom.py | 19 +
pym/portage/tests/dep/test_isvalidatom.py | 9 +
pym/portage/tests/dep/test_match_from_list.py | 31 +-
pym/portage/tests/emerge/test_emerge_slot_abi.py | 198 +++++
pym/portage/tests/emerge/test_simple.py | 6 +-
pym/portage/tests/repoman/test_echangelog.py | 110 +++
pym/portage/tests/resolver/ResolverPlayground.py | 57 +-
pym/portage/tests/resolver/test_autounmask.py | 17 +-
pym/portage/tests/resolver/test_complete_graph.py | 4 +-
pym/portage/tests/resolver/test_merge_order.py | 6 +-
pym/portage/tests/resolver/test_simple.py | 20 +-
pym/portage/tests/resolver/test_slot_abi.py | 376 +++++++++
pym/portage/tests/resolver/test_slot_collisions.py | 12 +
pym/portage/util/__init__.py | 2 +-
pym/portage/versions.py | 54 +-
pym/portage/xpak.py | 2 +-
pym/repoman/checks.py | 10 +-
pym/repoman/utilities.py | 68 +-
runtests.sh | 2 +-
72 files changed, 2811 insertions(+), 858 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-07-08 10:03 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-07-08 10:03 UTC (permalink / raw
To: gentoo-commits
commit: 5c128c674867e13b4627a5ac873f87a9419ed288
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 8 10:03:32 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jul 8 10:03:32 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5c128c67
Merge v2.2.0_alpha116
bin/ebuild | 9 +-
bin/ebuild-ipc.py | 11 +-
bin/emaint | 9 +-
bin/emerge | 11 +-
bin/quickpkg | 15 +-
man/ebuild.5 | 6 +-
man/emerge.1 | 3 +
man/make.conf.5 | 13 +-
pym/_emerge/depgraph.py | 109 +++++++---
pym/_emerge/main.py | 6 +
pym/portage/const.py | 24 ++-
pym/portage/dbapi/bintree.py | 4 +-
pym/portage/dbapi/vartree.py | 110 +++++++++-
pym/portage/dep/__init__.py | 40 +++-
pym/portage/tests/ebuild/test_config.py | 4 +-
.../tests/resolver/test_slot_abi_downgrade.py | 225 ++++++++++++++++++++
pym/portage/tests/runTests | 11 +-
17 files changed, 517 insertions(+), 93 deletions(-)
diff --cc pym/portage/const.py
index ad7e2ec,ceef5c5..7c75381
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -91,8 -90,9 +91,9 @@@ SUPPORTED_FEATURES = frozenset(
"ccache", "chflags", "clean-logs",
"collision-protect", "compress-build-logs", "compressdebug",
"config-protect-if-modified",
- "digest", "distcc", "distcc-pump", "distlocks", "ebuild-locks", "fakeroot",
+ "digest", "distcc", "distcc-pump", "distlocks",
+ "downgrade-backup", "ebuild-locks", "fakeroot",
- "fail-clean", "force-mirror", "force-prefix", "getbinpkg",
+ "fail-clean", "force-mirror", "force-multilib", "force-prefix", "getbinpkg",
"installsources", "keeptemp", "keepwork", "fixlafiles", "lmirror",
"metadata-transfer", "mirror", "multilib-strict", "news",
"noauto", "noclean", "nodoc", "noinfo", "noman",
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: a8270d3c73ce3c87e44744833be92e0ca55b2c4c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:32:31 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:32:31 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a8270d3c
Merge tag 'v2.2.0_alpha117' into multilib
bin/emaint | 6 +-
cnf/make.globals | 2 +-
man/ebuild.5 | 10 ++--
man/emerge.1 | 4 +
pym/_emerge/create_depgraph_params.py | 5 ++
pym/_emerge/depgraph.py | 26 +++++++--
pym/_emerge/main.py | 6 ++
pym/portage/checksum.py | 20 ++++++
pym/portage/dbapi/vartree.py | 12 +++-
pym/portage/manifest.py | 7 +-
pym/portage/output.py | 42 +++++++++----
pym/portage/package/ebuild/fetch.py | 13 ++--
pym/portage/tests/emerge/test_emerge_slot_abi.py | 9 ++-
pym/portage/tests/resolver/ResolverPlayground.py | 3 +
pym/portage/tests/resolver/test_complete_graph.py | 66 ++++++++++++++++++++-
pym/portage/tests/runTests | 3 +
16 files changed, 191 insertions(+), 43 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: 09cb26569c2c4474a0bdd610dcd3a2ee69df78a6
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:33:45 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:33:45 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=09cb2656
Merge tag 'v2.2.0_alpha118' into multilib
pym/portage/_global_updates.py | 14 ++-
pym/portage/dbapi/__init__.py | 28 +++-
pym/portage/tests/emerge/test_global_updates.py | 6 +-
.../{util/_eventloop => tests/update}/__init__.py | 0
pym/portage/tests/{bin => update}/__test__ | 0
pym/portage/tests/update/test_move_slot_ent.py | 149 ++++++++++++++++++++
pym/portage/update.py | 23 +++-
7 files changed, 204 insertions(+), 16 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: d758279d0d922723583b2cc058f0e816744047d7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:34:25 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:34:25 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d758279d
Merge tag 'v2.2.0_alpha121' into multilib
Makefile | 1 -
bin/chpathtool.py | 10 +-
bin/ebuild-helpers/prepstrip | 2 +-
bin/emaint | 659 +-----------------------
bin/repoman | 5 +-
cnf/make.conf | 5 +-
cnf/make.globals | 2 +-
man/ebuild.5 | 2 +-
man/emaint.1 | 28 +-
man/make.conf.5 | 7 +
man/portage.5 | 13 +-
man/repoman.1 | 3 -
pym/_emerge/main.py | 24 +-
pym/portage/_selinux.py | 40 +-
pym/portage/const.py | 2 +-
pym/portage/dbapi/bintree.py | 56 ++-
pym/portage/dbapi/vartree.py | 35 +-
pym/portage/emaint/__init__.py | 7 +
pym/portage/emaint/defaults.py | 18 +
pym/portage/emaint/main.py | 218 ++++++++
pym/portage/emaint/module.py | 194 +++++++
pym/portage/emaint/modules/__init__.py | 7 +
pym/portage/emaint/modules/binhost/__init__.py | 22 +
pym/portage/emaint/modules/binhost/binhost.py | 163 ++++++
pym/portage/emaint/modules/config/__init__.py | 22 +
pym/portage/emaint/modules/config/config.py | 101 ++++
pym/portage/emaint/modules/logs/__init__.py | 51 ++
pym/portage/emaint/modules/logs/logs.py | 103 ++++
pym/portage/emaint/modules/move/__init__.py | 33 ++
pym/portage/emaint/modules/move/move.py | 162 ++++++
pym/portage/emaint/modules/resume/__init__.py | 22 +
pym/portage/emaint/modules/resume/resume.py | 58 ++
pym/portage/emaint/modules/world/__init__.py | 22 +
pym/portage/emaint/modules/world/world.py | 89 ++++
pym/portage/emaint/progress.py | 61 +++
pym/portage/output.py | 34 +-
pym/portage/package/ebuild/doebuild.py | 29 +
pym/portage/util/_desktop_entry.py | 6 +-
pym/portage/util/_urlopen.py | 99 +++-
pym/portage/util/movefile.py | 55 ++-
pym/portage/util/whirlpool.py | 2 +
pym/repoman/checks.py | 22 +-
42 files changed, 1715 insertions(+), 779 deletions(-)
diff --cc pym/portage/const.py
index 7c75381,c2049f8..65f4625
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -90,10 -89,10 +90,10 @@@ SUPPORTED_FEATURES = frozenset(
"assume-digests", "binpkg-logs", "buildpkg", "buildsyspkg", "candy",
"ccache", "chflags", "clean-logs",
"collision-protect", "compress-build-logs", "compressdebug",
- "config-protect-if-modified",
+ "compress-index", "config-protect-if-modified",
"digest", "distcc", "distcc-pump", "distlocks",
"downgrade-backup", "ebuild-locks", "fakeroot",
- "fail-clean", "force-mirror", "force-prefix", "getbinpkg",
+ "fail-clean", "force-mirror", "force-multilib", "force-prefix", "getbinpkg",
"installsources", "keeptemp", "keepwork", "fixlafiles", "lmirror",
"metadata-transfer", "mirror", "multilib-strict", "news",
"noauto", "noclean", "nodoc", "noinfo", "noman",
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: be2946fe248d6a519c3dfc67fe125d801d4e01e5
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:33:58 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:33:58 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=be2946fe
Merge tag 'v2.2.0_alpha119' into multilib
bin/ebuild-helpers/prepstrip | 1 +
bin/emaint | 7 +-
pym/_emerge/FakeVartree.py | 5 +-
pym/portage/dbapi/__init__.py | 7 +-
pym/portage/dbapi/bintree.py | 13 ++-
pym/portage/dbapi/vartree.py | 11 +-
pym/portage/tests/update/test_move_ent.py | 109 +++++++++++++
pym/portage/tests/update/test_move_slot_ent.py | 9 +-
pym/portage/tests/update/test_update_dbentry.py | 184 +++++++++++++++++++++++
pym/portage/update.py | 22 ++-
pym/portage/versions.py | 2 +
11 files changed, 347 insertions(+), 23 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: 6177403a63872d05a9338b26d9907620782305e8
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:34:10 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:34:10 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6177403a
Merge tag 'v2.2.0_alpha120' into multilib
bin/etc-update | 7 ++
bin/portageq | 12 +--
bin/quickpkg | 13 ++--
man/portage.5 | 3 +
pym/_emerge/DependencyArg.py | 5 +-
pym/_emerge/actions.py | 28 +++++--
pym/_emerge/depgraph.py | 7 ++-
pym/portage/dbapi/bintree.py | 15 +++-
pym/portage/dbapi/vartree.py | 11 ++-
pym/portage/dep/__init__.py | 89 +++++++++++++++++-----
pym/portage/tests/dep/testAtom.py | 4 +
pym/portage/tests/dep/test_best_match_to_list.py | 2 +
pym/portage/tests/dep/test_match_from_list.py | 2 +
pym/portage/update.py | 17 ++--
14 files changed, 155 insertions(+), 60 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: 08bd5f74925f499b840afcfd68181905ea226b49
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:35:05 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:35:05 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=08bd5f74
Merge tag 'v2.2.0_alpha122' into multilib
bin/dispatch-conf | 10 +-
bin/ebuild-helpers/doins | 4 +-
bin/ebuild-helpers/newins | 4 +-
bin/ebuild.sh | 4 +-
bin/egencache | 2 +-
bin/emerge-webrsync | 114 +++--
bin/isolated-functions.sh | 4 +-
bin/phase-functions.sh | 12 +-
bin/phase-helpers.sh | 4 +-
cnf/metadata.dtd | 7 +-
man/make.conf.5 | 24 +-
misc/emerge-delta-webrsync | 613 ++++++++++++++++++++
mkrelease.sh | 2 +-
pym/_emerge/BinpkgFetcher.py | 10 +-
pym/_emerge/EbuildFetcher.py | 6 +-
pym/_emerge/EbuildMetadataPhase.py | 13 +-
pym/_emerge/PollScheduler.py | 18 +-
pym/_emerge/Scheduler.py | 9 +-
pym/_emerge/SpawnProcess.py | 17 +-
pym/portage/checksum.py | 58 ++
pym/portage/dbapi/bintree.py | 7 +-
pym/portage/getbinpkg.py | 8 +-
pym/portage/manifest.py | 15 +-
.../package/ebuild/_config/special_env_vars.py | 1 +
pym/portage/package/ebuild/digestcheck.py | 15 +-
pym/portage/package/ebuild/doebuild.py | 18 +-
pym/portage/package/ebuild/fetch.py | 23 +-
pym/portage/process.py | 6 +-
pym/portage/tests/lint/test_bash_syntax.py | 12 +-
pym/portage/util/_eventloop/EventLoop.py | 65 ++-
30 files changed, 967 insertions(+), 138 deletions(-)
diff --cc bin/phase-functions.sh
index 43e5ef8,3520199..8db6048
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -401,19 -362,9 +401,19 @@@ dyn_prepare()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ "${PORTAGE_BUILDDIR}"/.prepared.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already prepared for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.prepared.${LOOP_ABI}' to force prepare."
+ continue
+ fi
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to prepare; then
cd "${WORKDIR}"
@@@ -452,19 -393,9 +452,19 @@@ dyn_configure()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ ${PORTAGE_BUILDDIR}/.configured.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already configured for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.configured.${LOOP_ABI}' to force configuration."
+ continue
+ fi
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to configure; then
cd "${WORKDIR}"
@@@ -504,19 -426,9 +504,19 @@@ dyn_compile()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ ${PORTAGE_BUILDDIR}/.compiled.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already compiled for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.compiled.${LOOP_ABI}' to force compilation."
+ continue
+ fi
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif has $EAPI 0 1 2 3 3_pre2 ; then
+ elif has $EAPI 0 1 2 3 ; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! has_phase_defined_up_to compile; then
cd "${WORKDIR}"
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: 73ec94c112a7c0f088f63aa6b0e892be9d0ad381
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:35:20 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:35:20 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=73ec94c1
Merge tag 'v2.2.0_alpha123' into multilib
bin/ebuild-helpers/newbin | 23 +------
bin/ebuild-helpers/newconfd | 23 +------
bin/ebuild-helpers/newdoc | 23 +------
bin/ebuild-helpers/newenvd | 23 +------
bin/ebuild-helpers/newexe | 23 +------
bin/ebuild-helpers/newinitd | 23 +------
bin/ebuild-helpers/newins | 70 ++++++++++++------
bin/ebuild-helpers/newlib.a | 23 +------
bin/ebuild-helpers/newlib.so | 23 +------
bin/ebuild-helpers/newman | 23 +------
bin/ebuild-helpers/newsbin | 23 +------
bin/ebuild-helpers/prepstrip | 30 ++++----
pym/_emerge/Package.py | 19 ++++-
pym/portage/dbapi/__init__.py | 16 ++--
pym/portage/dbapi/porttree.py | 4 +-
pym/portage/dbapi/virtual.py | 4 +-
pym/portage/dep/dep_check.py | 19 +----
pym/portage/eapi.py | 11 +++-
.../package/ebuild/_config/KeywordsManager.py | 42 +++++++++--
pym/portage/package/ebuild/_config/UseManager.py | 79 ++++++++++++++++++--
pym/portage/package/ebuild/config.py | 21 ++++-
pym/portage/package/ebuild/getmaskingstatus.py | 7 +-
pym/portage/tests/ebuild/test_doebuild_spawn.py | 2 +
pym/portage/util/__init__.py | 7 ++
pym/portage/util/_desktop_entry.py | 60 +++++++++++----
pym/portage/versions.py | 27 ++++++-
26 files changed, 322 insertions(+), 326 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-08 12:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-08 12:55 UTC (permalink / raw
To: gentoo-commits
commit: 142c475fa532b191b254f325c9b48f54fb21dfeb
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 8 12:53:25 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 8 12:53:25 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=142c475f
Merge v2.2.0_alpha124
NEWS | 4 +-
bin/archive-conf | 13 +-
bin/banned-helper | 6 -
bin/binhost-snapshot | 13 +-
bin/clean_locks | 13 +-
bin/dispatch-conf | 12 +-
bin/ebuild | 11 +-
bin/ebuild-helpers/4/dodoc | 1 -
bin/ebuild-helpers/4/dohard | 1 -
bin/ebuild-helpers/4/dosed | 1 -
bin/ebuild-helpers/4/prepalldocs | 1 -
bin/ebuild-helpers/{ => bsd}/sed | 14 +-
bin/ebuild-helpers/dodoc | 13 +-
bin/ebuild-helpers/dohard | 11 +-
bin/ebuild-helpers/doheader | 21 ++
bin/ebuild-helpers/doins | 16 +-
bin/ebuild-helpers/dosed | 11 +-
bin/ebuild-helpers/{newbin => newheader} | 0
bin/ebuild-helpers/newins | 2 +-
bin/ebuild-helpers/prepalldocs | 11 +-
bin/ebuild.sh | 2 +-
bin/egencache | 11 +-
bin/emaint | 11 +-
bin/emerge | 11 +-
bin/env-update | 13 +-
bin/fixpackages | 13 +-
bin/glsa-check | 13 +-
bin/phase-functions.sh | 34 ++-
bin/phase-helpers.sh | 141 +++++++++--
bin/portageq | 58 +++--
bin/quickpkg | 11 +-
bin/regenworld | 13 +-
bin/repoman | 12 +-
bin/save-ebuild-env.sh | 11 +-
cnf/make.globals | 2 +-
doc/package/ebuild.docbook | 1 +
doc/package/ebuild/eapi/4-slot-abi.docbook | 12 +-
doc/package/ebuild/eapi/5.docbook | 260 ++++++++++++++++++++
doc/portage.docbook | 1 +
man/emerge.1 | 16 +-
man/make.conf.5 | 5 -
pym/_emerge/EbuildMetadataPhase.py | 6 +-
pym/_emerge/FakeVartree.py | 20 +-
pym/_emerge/Package.py | 26 +-
pym/_emerge/Scheduler.py | 19 +-
pym/_emerge/create_depgraph_params.py | 20 +-
pym/_emerge/depgraph.py | 131 ++++++-----
pym/_emerge/main.py | 16 +-
pym/_emerge/resolver/backtracking.py | 16 +-
pym/_emerge/resolver/circular_dependency.py | 9 +-
pym/_emerge/resolver/slot_collision.py | 4 +-
pym/portage/__init__.py | 2 +-
pym/portage/_sets/__init__.py | 5 +
pym/portage/_sets/dbapi.py | 72 ++++++
pym/portage/const.py | 3 +-
pym/portage/dbapi/__init__.py | 15 +-
pym/portage/dbapi/_expand_new_virt.py | 10 +-
pym/portage/dep/__init__.py | 141 ++++++-----
.../dep/{_slot_abi.py => _slot_operator.py} | 24 +-
pym/portage/eapi.py | 23 ++-
pym/portage/emaint/modules/config/config.py | 66 ++----
pym/portage/glsa.py | 3 +-
.../package/ebuild/_config/special_env_vars.py | 8 +-
pym/portage/package/ebuild/_eapi_invalid.py | 13 -
pym/portage/package/ebuild/config.py | 104 ++++++++-
pym/portage/package/ebuild/doebuild.py | 49 +++--
pym/portage/tests/dep/testAtom.py | 16 +-
pym/portage/tests/dep/testCheckRequiredUse.py | 16 ++-
.../tests/dep/test_get_required_use_flags.py | 4 +-
pym/portage/tests/dep/test_match_from_list.py | 6 +-
pym/portage/tests/emerge/test_simple.py | 2 +-
pym/portage/tests/resolver/test_complete_graph.py | 4 +-
pym/portage/tests/resolver/test_slot_abi.py | 26 +-
.../tests/resolver/test_slot_abi_downgrade.py | 8 +-
pym/portage/util/_desktop_entry.py | 14 +
pym/portage/versions.py | 10 +-
76 files changed, 1185 insertions(+), 552 deletions(-)
diff --cc bin/phase-functions.sh
index 8db6048,68a33a8..66418c2
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -311,15 -273,15 +311,16 @@@ dyn_clean()
fi
if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended,setuped,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
+ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
+ "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*} \
+ "$PORTAGE_BUILDDIR"/.abi \
"$PORTAGE_BUILDDIR"/.die_hooks \
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
- "$PORTAGE_BUILDDIR"/.exit_status
+ "$PORTAGE_BUILDDIR"/.exit_status \
+ "$PORTAGE_BUILDDIR"/.apply_user_patches
- rm -rf "${PORTAGE_BUILDDIR}/build-info"
- rm -rf "${WORKDIR}"
+ rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
+ rm -rf "${WORKDIR}"*
fi
if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
diff --cc pym/portage/const.py
index 65f4625,3b8e350..a002c98
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -79,9 -79,10 +79,11 @@@ OS_HEADERS_PACKAGE_ATOM = "virtual/os-
INCREMENTALS = ("USE", "USE_EXPAND", "USE_EXPAND_HIDDEN",
"FEATURES", "ACCEPT_KEYWORDS",
"CONFIG_PROTECT_MASK", "CONFIG_PROTECT",
+ "IUSE_IMPLICIT",
"PRELINK_PATH", "PRELINK_PATH_MASK",
"PROFILE_ONLY_VARIABLES",
- "USE_EXPAND_IMPLICIT", "USE_EXPAND_UNPREFIXED")
++ "USE_EXPAND_IMPLICIT", "USE_EXPAND_UNPREFIXED",
+ "NO_AUTO_FLAG", "RESTRICT_MULTILIB_BINARIES")
EBUILD_PHASES = ("pretend", "setup", "unpack", "prepare", "configure",
"compile", "test", "install",
"package", "preinst", "postinst","prerm", "postrm",
diff --cc pym/portage/package/ebuild/doebuild.py
index 8d118c4,471a5da..254911a
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@@ -1638,12 -1656,12 +1656,16 @@@ def _post_src_install_write_metadata(se
build_info_dir = os.path.join(settings['PORTAGE_BUILDDIR'], 'build-info')
- for k in ('IUSE',):
- v = settings.get(k)
+ metadata_keys = ['IUSE']
+ if eapi_attrs.iuse_effective:
+ metadata_keys.append('IUSE_EFFECTIVE')
+
+ for k in metadata_keys:
+ v = settings.configdict['pkg'].get(k)
+ if "force-multilib" in settings.features:
+ v = v + " abiwrapper"
+ for i in settings.get('MULTILIB_ABIS').split():
+ v = v + " multilib_abi_" + i
if v is not None:
write_atomic(os.path.join(build_info_dir, k), v + '\n')
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-17 17:07 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-17 17:07 UTC (permalink / raw
To: gentoo-commits
commit: ba7e40ba4ec4974a5469d707853dd41fcad13a55
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Sep 17 17:06:54 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Sep 17 17:06:54 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ba7e40ba
Merge tag 'v2.2.0_alpha128' into multilib
DEVELOPING | 13 +-
bin/egencache | 40 +++--
bin/etc-update | 15 +-
bin/phase-functions.sh | 26 +---
bin/phase-helpers.sh | 59 ++----
bin/repoman | 156 ++++++++++------
bin/save-ebuild-env.sh | 3 +-
cnf/dispatch-conf.conf | 1 +
cnf/make.conf | 2 +-
doc/package/ebuild/eapi/5.docbook | 68 ++-----
man/ebuild.5 | 7 +-
man/emerge.1 | 25 ++-
man/make.conf.5 | 11 +-
man/portage.5 | 20 +-
pym/_emerge/EbuildBuildDir.py | 7 +-
pym/_emerge/EbuildPhase.py | 12 +-
pym/_emerge/Scheduler.py | 5 +-
pym/_emerge/depgraph.py | 21 ++-
pym/_emerge/main.py | 6 +
pym/_emerge/resolver/output.py | 152 ++++++----------
pym/_emerge/resolver/output_helpers.py | 76 +++++++-
pym/portage/__init__.py | 46 +++--
pym/portage/_sets/__init__.py | 12 ++
pym/portage/_sets/dbapi.py | 36 +++--
pym/portage/checksum.py | 17 ++-
pym/portage/const.py | 2 +-
pym/portage/data.py | 23 ++-
.../package/ebuild/_config/LocationsManager.py | 2 +-
pym/portage/package/ebuild/_config/UseManager.py | 86 +++++++--
pym/portage/package/ebuild/config.py | 11 +-
pym/portage/package/ebuild/doebuild.py | 7 +-
pym/portage/proxy/objectproxy.py | 9 +-
pym/portage/repository/config.py | 12 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 193 ++++++++++++++++++++
pym/portage/tests/lint/test_bash_syntax.py | 16 ++-
pym/portage/tests/lint/test_import_modules.py | 2 +-
pym/portage/tests/repoman/test_simple.py | 35 ++++-
pym/portage/tests/resolver/ResolverPlayground.py | 12 +-
.../tests/resolver/test_features_test_use.py | 68 +++++++
pym/portage/util/__init__.py | 21 ++-
pym/portage/util/_desktop_entry.py | 52 +-----
pym/portage/xml/metadata.py | 9 +-
pym/repoman/herdbase.py | 5 +-
pym/repoman/utilities.py | 34 +++-
44 files changed, 938 insertions(+), 497 deletions(-)
diff --cc bin/phase-functions.sh
index 66418c2,e50b340..9a1679c
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -311,16 -273,14 +311,15 @@@ dyn_clean()
fi
if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended,setuped,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged} \
+ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
+ "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*} \
+ "$PORTAGE_BUILDDIR"/.abi \
"$PORTAGE_BUILDDIR"/.die_hooks \
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
- "$PORTAGE_BUILDDIR"/.exit_status \
- "$PORTAGE_BUILDDIR"/.apply_user_patches
+ "$PORTAGE_BUILDDIR"/.exit_status
- rm -rf "${PORTAGE_BUILDDIR}/build-info"
- rm -rf "${WORKDIR}"
+ rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
+ rm -rf "${WORKDIR}"*
fi
if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-22 15:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-22 15:23 UTC (permalink / raw
To: gentoo-commits
commit: baf9799818ebdd09c291c94419cd5a427a21c9f5
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 22 15:22:31 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 22 15:22:31 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=baf97998
Merge 2.2_alpha130
bin/bashrc-functions.sh | 59 +----
bin/ebuild-helpers/dobin | 6 +-
bin/ebuild-helpers/doconfd | 2 +-
bin/ebuild-helpers/dodir | 2 +-
bin/ebuild-helpers/dodoc | 4 +-
bin/ebuild-helpers/doenvd | 2 +-
bin/ebuild-helpers/doexe | 6 +-
bin/ebuild-helpers/doheader | 4 +-
bin/ebuild-helpers/dohtml | 2 +-
bin/ebuild-helpers/doinfo | 6 +-
bin/ebuild-helpers/doinitd | 2 +-
bin/ebuild-helpers/doins | 14 +-
bin/ebuild-helpers/dolib | 6 +-
bin/ebuild-helpers/doman | 6 +-
bin/ebuild-helpers/domo | 4 +-
bin/ebuild-helpers/dosbin | 6 +-
bin/ebuild-helpers/dosym | 4 +-
bin/ebuild-helpers/ecompress | 14 +-
bin/ebuild-helpers/ecompressdir | 22 +-
bin/ebuild-helpers/emake | 2 +-
bin/ebuild-helpers/fowners | 2 +-
bin/ebuild-helpers/fperms | 2 +-
bin/ebuild-helpers/newins | 10 +-
bin/ebuild-helpers/prepalldocs | 2 +-
bin/ebuild-helpers/prepinfo | 2 +-
bin/ebuild-helpers/prepstrip | 22 +-
bin/ebuild.sh | 42 +--
bin/egencache | 4 +-
bin/emerge-webrsync | 20 +-
bin/helper-functions.sh | 26 +-
bin/isolated-functions.sh | 82 ++---
bin/misc-functions.sh | 90 +++---
bin/phase-functions.sh | 332 ++++++++++----------
bin/phase-helpers.sh | 80 +++---
bin/save-ebuild-env.sh | 52 ++--
doc/package/ebuild/eapi/5.docbook | 40 ++--
man/ebuild.5 | 149 +++++++++-
man/emerge.1 | 8 +-
man/make.conf.5 | 9 -
man/portage.5 | 89 ++++--
misc/emerge-delta-webrsync | 4 +
pym/_emerge/EbuildMetadataPhase.py | 9 +-
pym/_emerge/MetadataRegen.py | 6 +-
pym/_emerge/Package.py | 17 +-
pym/portage/cache/sqlite.py | 16 +-
pym/portage/const.py | 4 +-
pym/portage/dbapi/__init__.py | 10 +
pym/portage/dep/__init__.py | 2 +
pym/portage/dep/dep_check.py | 13 +-
pym/portage/package/ebuild/config.py | 39 ++-
.../package/ebuild/deprecated_profile_check.py | 21 +-
pym/portage/package/ebuild/doebuild.py | 41 +++-
pym/portage/tests/dep/testAtom.py | 1 -
pym/portage/tests/dep/test_isvalidatom.py | 2 +-
pym/portage/tests/dep/test_match_from_list.py | 2 -
pym/portage/tests/repoman/test_simple.py | 4 +-
pym/portage/tests/update/test_update_dbentry.py | 48 +++
pym/portage/update.py | 82 ++++--
58 files changed, 902 insertions(+), 655 deletions(-)
diff --cc bin/phase-functions.sh
index 9a1679c,2b93231..6ebcbe0
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -211,86 -208,51 +211,86 @@@ __ebuild_phase_with_hooks()
done
}
- dyn_pretend() {
+ __dyn_pretend() {
if [[ -e $PORTAGE_BUILDDIR/.pretended ]] ; then
- vecho ">>> It appears that '$PF' is already pretended; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
+ __vecho ">>> It appears that '$PF' is already pretended; skipping."
+ __vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend."
return 0
fi
- ebuild_phase pre_pkg_pretend
- ebuild_phase pkg_pretend
+ __ebuild_phase pre_pkg_pretend
+ __ebuild_phase pkg_pretend
>> "$PORTAGE_BUILDDIR/.pretended" || \
die "Failed to create $PORTAGE_BUILDDIR/.pretended"
- ebuild_phase post_pkg_pretend
+ __ebuild_phase post_pkg_pretend
}
- dyn_setup() {
+ __dyn_setup() {
- if [[ -e $PORTAGE_BUILDDIR/.setuped ]] ; then
- __vecho ">>> It appears that '$PF' is already setup; skipping."
- __vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
- return 0
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if ! is_auto-multilib && ! use multilib_abi_"${DEFAULT_ABI}" ; then
+ ewarn
+ ewarn "You disabled all ABIs"
+ ewarn "You should enable at least one ABI"
+ ewarn "Enabling the default ABI now"
+ ewarn
+ fi
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ set_abi ${LOOP_ABI}
+ if is_ebuild; then
+ source "${T}"/environment || die
+ else
+ rm -f "${T}"/environment
+ fi
+ if [[ -e $PORTAGE_BUILDDIR/.setuped.${ABI} ]] ; then
- vecho ">>> It appears that '$PF' is already setup; skipping."
- vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped.${ABI}' to force setup."
++ __vecho ">>> It appears that '$PF' is already setup; skipping."
++ __vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped.${ABI}' to force setup."
+ return 0
+ fi
+ fi
- ebuild_phase pre_pkg_setup
- ebuild_phase pkg_setup
+ __ebuild_phase pre_pkg_setup
+ __ebuild_phase pkg_setup
+ >> "$PORTAGE_BUILDDIR/.setuped.${ABI}" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.setuped"
+
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { unset_abi; source "${T}"/environment || die ; }
+ done
+
>> "$PORTAGE_BUILDDIR/.setuped" || \
die "Failed to create $PORTAGE_BUILDDIR/.setuped"
- ebuild_phase post_pkg_setup
+ __ebuild_phase post_pkg_setup
+
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { rm "${T}"/environment || die ; }
}
- dyn_unpack() {
+ __dyn_unpack() {
if [[ -f ${PORTAGE_BUILDDIR}/.unpacked ]] ; then
- vecho ">>> WORKDIR is up-to-date, keeping..."
+ __vecho ">>> WORKDIR is up-to-date, keeping..."
return 0
fi
if [ ! -d "${WORKDIR}" ]; then
install -m${PORTAGE_WORKDIR_MODE:-0700} -d "${WORKDIR}" || die "Failed to create dir '${WORKDIR}'"
fi
cd "${WORKDIR}" || die "Directory change failed: \`cd '${WORKDIR}'\`"
- ebuild_phase pre_src_unpack
- vecho ">>> Unpacking source$(_get_abi_string)..."
- ebuild_phase src_unpack
+ __ebuild_phase pre_src_unpack
- __vecho ">>> Unpacking source..."
++ __vecho ">>> Unpacking source$(_get_abi_string)..."
+ __ebuild_phase src_unpack
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.unpacked."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .unpacked.${LOOP_ABI}'"
+ fi
+ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
+
+ is_ebuild && { rm "${T}"/environment || die ; }
+ fi
>> "$PORTAGE_BUILDDIR/.unpacked" || \
die "Failed to create $PORTAGE_BUILDDIR/.unpacked"
- vecho ">>> Source unpacked in ${WORKDIR}"
- ebuild_phase post_src_unpack
+ __vecho ">>> Source unpacked in ${WORKDIR}"
+ __ebuild_phase post_src_unpack
}
- dyn_clean() {
+ __dyn_clean() {
if [ -z "${PORTAGE_BUILDDIR}" ]; then
echo "Aborting clean phase because PORTAGE_BUILDDIR is unset!"
return 1
@@@ -421,25 -372,15 +421,25 @@@ __dyn_prepare()
die "The source directory '${S}' doesn't exist"
fi
- trap abort_prepare SIGINT SIGQUIT
+ trap __abort_prepare SIGINT SIGQUIT
- ebuild_phase pre_src_prepare
- vecho ">>> Preparing source in $PWD$(_get_abi_string) ..."
- ebuild_phase src_prepare
+ __ebuild_phase pre_src_prepare
- __vecho ">>> Preparing source in $PWD ..."
++ __vecho ">>> Preparing source in $PWD$(_get_abi_string) ..."
+ __ebuild_phase src_prepare
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.prepared."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .prepared.${LOOP_ABI}'"
+ fi
+ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
+ fi
+ done
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { rm "${T}"/environment || die ; }
+
>> "$PORTAGE_BUILDDIR/.prepared" || \
die "Failed to create $PORTAGE_BUILDDIR/.prepared"
- vecho ">>> Source prepared."
- ebuild_phase post_src_prepare
+ __vecho ">>> Source prepared."
+ __ebuild_phase post_src_prepare
trap - SIGINT SIGQUIT
}
@@@ -472,26 -403,17 +472,26 @@@ __dyn_configure()
die "The source directory '${S}' doesn't exist"
fi
- trap abort_configure SIGINT SIGQUIT
+ trap __abort_configure SIGINT SIGQUIT
- ebuild_phase pre_src_configure
+ __ebuild_phase pre_src_configure
- vecho ">>> Configuring source in $PWD$(_get_abi_string) ..."
- ebuild_phase src_configure
- __vecho ">>> Configuring source in $PWD ..."
++ __vecho ">>> Configuring source in $PWD$(_get_abi_string) ..."
+ __ebuild_phase src_configure
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.configured."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .configured.${LOOP_ABI}'"
+ fi
+ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
+ fi
+ done
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { rm "${T}"/environment || die ; }
>> "$PORTAGE_BUILDDIR/.configured" || \
die "Failed to create $PORTAGE_BUILDDIR/.configured"
- vecho ">>> Source configured."
+ __vecho ">>> Source configured."
- ebuild_phase post_src_configure
+ __ebuild_phase post_src_configure
trap - SIGINT SIGQUIT
}
@@@ -533,24 -445,15 +533,24 @@@ __dyn_compile()
fi
fi
- ebuild_phase pre_src_compile
+ __ebuild_phase pre_src_compile
- vecho ">>> Compiling source in $PWD$(_get_abi_string) ..."
- ebuild_phase src_compile
- __vecho ">>> Compiling source in $PWD ..."
++ __vecho ">>> Compiling source in $PWD$(_get_abi_string) ..."
+ __ebuild_phase src_compile
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.compiled."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .compiled.${LOOP_ABI}'"
+ fi
+ is_ebuild && { unset_abi; source "${T}"/environment || die ; }
+ fi
+ done
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { rm "${T}"/environment || die ; }
>> "$PORTAGE_BUILDDIR/.compiled" || \
die "Failed to create $PORTAGE_BUILDDIR/.compiled"
- vecho ">>> Source compiled."
+ __vecho ">>> Source compiled."
- ebuild_phase post_src_compile
+ __ebuild_phase post_src_compile
trap - SIGINT SIGQUIT
}
@@@ -568,10 -472,7 +569,10 @@@ __dyn_test()
! has test ${USE} && export USE="${USE} test"
fi
- trap "abort_test" SIGINT SIGQUIT
+ trap "__abort_test" SIGINT SIGQUIT
+ for LOOP_ABI in $(get_abi_list); do
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
if [ -d "${S}" ]; then
cd "${S}"
else
@@@ -579,32 -480,18 +580,32 @@@
fi
if ! has test $FEATURES && [ "${EBUILD_FORCE_TEST}" != "1" ]; then
- vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
+ __vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
elif has test $RESTRICT; then
einfo "Skipping make test/check due to ebuild restriction."
- vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
+ __vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
else
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if [ ${PORTAGE_BUILDDIR}/.tested.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already tested for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.tested.${LOOP_ABI}' to force testing."
+ continue
+ fi
+ fi
+
local save_sp=${SANDBOX_PREDICT}
addpredict /
- ebuild_phase pre_src_test
- ebuild_phase src_test
+ __ebuild_phase pre_src_test
+ __ebuild_phase src_test
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.tested."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .tested.${LOOP_ABI}'"
+ fi
+ fi
>> "$PORTAGE_BUILDDIR/.tested" || \
die "Failed to create $PORTAGE_BUILDDIR/.tested"
- ebuild_phase post_src_test
+ __ebuild_phase post_src_test
SANDBOX_PREDICT=${save_sp}
fi
@@@ -661,35 -541,12 +662,35 @@@ __dyn_install()
export _E_EXEDESTTREE_=""
export _E_DOCDESTTREE_=""
- ebuild_phase src_install
+ __ebuild_phase src_install
+
+ if ( [[ " ${FEATURES} " == *" force-multilib "* ]] && is_auto-multilib ) ; then
+ _finalize_abi_install
+ cp "${T}"/environment "${PORTAGE_BUILDDIR}"/build-info/environment.${LOOP_ABI} || die
+ if is_ebuild; then
+ unset_abi; source "${T}"/environment || die
+ touch "$PORTAGE_BUILDDIR"/.installed."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .installed.${LOOP_ABI}'"
+ fi
+ fi
+ done
+ if [[ -d "${D}" ]]; then
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if [[ ${CATEGORY}/${PN} == sys-devel/libtool ]] ; then
+ ewarn "Preserving libltdl.la because of extensive usage"
+ ewarn "even in m4 macros of libtool"
+ elif [[ ${CATEGORY}/${PN} == media-libs/gst-plugins-* ]] ; then
+ ewarn "Preserving .la files for gst plugins"
+ ewarn "because of broken Gentoo package"
+ else
+ find "${D}" -name '*.la' ! -exec grep -q shouldnotlink=yes {} \; -exec rm {} \;
+ fi
+ fi
+
>> "$PORTAGE_BUILDDIR/.installed" || \
die "Failed to create $PORTAGE_BUILDDIR/.installed"
- vecho ">>> Completed installing ${PF} into ${D}"
- vecho
- ebuild_phase post_src_install
+ __vecho ">>> Completed installing ${PF} into ${D}"
+ __vecho
+ __ebuild_phase post_src_install
cd "${PORTAGE_BUILDDIR}"/build-info
set -f
@@@ -1042,98 -861,31 +1031,109 @@@ __ebuild_main()
case ${1} in
nofetch)
- ebuild_phase_with_hooks pkg_nofetch
+ __ebuild_phase_with_hooks pkg_nofetch
;;
- prerm|postrm|preinst|postinst|config|info)
+ config|info)
if has "${1}" config info && \
! declare -F "pkg_${1}" >/dev/null ; then
ewarn "pkg_${1}() is not defined: '${EBUILD##*/}'"
fi
export SANDBOX_ON="0"
if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
- ebuild_phase_with_hooks pkg_${1}
+ __ebuild_phase_with_hooks pkg_${1}
else
set -x
- ebuild_phase_with_hooks pkg_${1}
+ __ebuild_phase_with_hooks pkg_${1}
set +x
fi
+ if [[ -n $PORTAGE_UPDATE_ENV ]] ; then
+ # Update environment.bz2 in case installation phases
+ # need to pass some variables to uninstallation phases.
+ __save_ebuild_env --exclude-init-phases | \
+ __filter_readonly_variables --filter-path \
+ --filter-sandbox --allow-extra-vars \
+ | ${PORTAGE_BZIP2_COMMAND} -c -f9 > "$PORTAGE_UPDATE_ENV"
+ assert "__save_ebuild_env failed"
+ fi
;;
- prerm|postrm|postinst)
++ prerm|postrm|preinst|postinst)
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ for LOOP_ABI in $(get_abi_order); do
+ if is_auto-multilib ; then
+ case ${1} in
- postinst)
++ preinst|postinst)
+ set_abi ${LOOP_ABI}
++ source "${T}"/environment
+ ;;
+ prerm|postrm)
+ # if = backward compactibility for previous versions, which did not
+ # install a per-ABI environment
+ if [[ -f "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 ]] ; then
+ bzcat "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 > "${T}"/environment || die
+ preprocess_ebuild_env --filter-metadata
+ fi
+ ;;
+ esac
+ # >/dev/null = backward compactibility for prerm/postrm
+ source "${T}"/environment 2>/dev/null || die
+ fi
+ export SANDBOX_ON="0"
+ if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
- ebuild_phase_with_hooks pkg_${1}
++ __ebuild_phase_with_hooks pkg_${1}
+ else
+ set -x
- ebuild_phase_with_hooks pkg_${1}
++ __ebuild_phase_with_hooks pkg_${1}
+ set +x
+ fi
+
- if [[ $EBUILD_PHASE == postinst ]] && [[ -n $PORTAGE_UPDATE_ENV ]]; then
++ if [[ -n $PORTAGE_UPDATE_ENV ]] ; then
+ # Update environment.bz2 in case installation phases
+ # need to pass some variables to uninstallation phases.
- save_ebuild_env --exclude-init-phases | \
- filter_readonly_variables --filter-path \
++ __save_ebuild_env --exclude-init-phases | \
++ __filter_readonly_variables --filter-path \
+ --filter-sandbox --allow-extra-vars \
+ | ${PORTAGE_BZIP2_COMMAND} -c -f9 > "$PORTAGE_UPDATE_ENV"
- assert "save_ebuild_env failed"
++ assert "__save_ebuild_env failed"
+ fi
+ if is_auto-multilib ; then
+ case ${1} in
- postinst)
++ preinst|postinst)
+ unset_abi
++ source "${T}"/environment
+ ;;
+ prerm|postrm)
+ #if = backward compactibility for previous versions, which did not
+ #install a per-ABI environment
+ if [[ -f "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 ]] ; then
+ preprocess_ebuild_env --filter-metadata
+ bzcat "${ROOT}"var/db/pkg/${CATEGORY}/${PF}/environment.${LOOP_ABI}.bz2 > "${T}"/environment || die
+ fi
+ ;;
+ esac
+ # >/dev/null = backward compactibility for prerm/postrm
+ source "${T}"/environment 2>/dev/null || die
+ fi
+ done
+ else
+ export SANDBOX_ON="0"
+ if [ "${PORTAGE_DEBUG}" != "1" ] || [ "${-/x/}" != "$-" ]; then
- ebuild_phase_with_hooks pkg_${1}
++ __ebuild_phase_with_hooks pkg_${1}
+ else
+ set -x
- ebuild_phase_with_hooks pkg_${1}
++ __ebuild_phase_with_hooks pkg_${1}
+ set +x
+ fi
++ if [[ -n $PORTAGE_UPDATE_ENV ]] ; then
++ # Update environment.bz2 in case installation phases
++ # need to pass some variables to uninstallation phases.
++ __save_ebuild_env --exclude-init-phases | \
++ __filter_readonly_variables --filter-path \
++ --filter-sandbox --allow-extra-vars \
++ | ${PORTAGE_BZIP2_COMMAND} -c -f9 > "$PORTAGE_UPDATE_ENV"
++ assert "__save_ebuild_env failed"
++ fi
+ fi
- if [[ $EBUILD_PHASE == postinst ]] && [[ -n $PORTAGE_UPDATE_ENV ]]; then
- # Update environment.bz2 in case installation phases
- # need to pass some variables to uninstallation phases.
- save_ebuild_env --exclude-init-phases | \
- filter_readonly_variables --filter-path \
- --filter-sandbox --allow-extra-vars \
- | ${PORTAGE_BZIP2_COMMAND} -c -f9 > "$PORTAGE_UPDATE_ENV"
- assert "save_ebuild_env failed"
- fi
+ ;;
unpack|prepare|configure|compile|test|clean|install)
if [[ ${SANDBOX_DISABLED:-0} = 0 ]] ; then
export SANDBOX_ON="1"
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-22 15:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-22 15:33 UTC (permalink / raw
To: gentoo-commits
commit: b07dd3e82b8bc2a50675861cbae59da912a09265
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 22 15:32:55 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 22 15:32:55 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b07dd3e8
Merge tag 'v2.2.0_alpha131' into multilib
NEWS | 13 ++++-
RELEASE-NOTES | 16 ++-----
bin/dohtml.py | 2 +-
bin/ebuild.sh | 6 +-
bin/portageq | 3 -
cnf/make.globals | 4 --
doc/package/ebuild.docbook | 1 +
doc/package/ebuild/eapi/4-python.docbook | 7 ++-
.../eapi/{4-python.docbook => 5-progress.docbook} | 43 +++++++++++------
doc/portage.docbook | 1 +
man/portage.5 | 6 ++-
pym/_emerge/actions.py | 7 ++-
pym/_emerge/main.py | 23 ++++------
pym/portage/__init__.py | 4 +-
pym/portage/_sets/__init__.py | 4 ++
pym/portage/const.py | 14 +-----
pym/portage/dbapi/vartree.py | 13 +----
pym/portage/eapi.py | 14 ++++--
.../package/ebuild/_config/LocationsManager.py | 49 +++++++++++---------
pym/portage/package/ebuild/_config/UseManager.py | 24 ++++------
pym/portage/package/ebuild/doebuild.py | 1 -
pym/portage/package/ebuild/fetch.py | 21 ++++----
pym/portage/repository/config.py | 10 ++--
pym/portage/tests/update/test_update_dbentry.py | 2 +-
24 files changed, 143 insertions(+), 145 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-24 20:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-24 20:38 UTC (permalink / raw
To: gentoo-commits
commit: 7e7a5bfec70fa46f9b566486346dee6d6ca1fccd
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Sep 24 20:38:13 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Sep 24 20:38:13 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7e7a5bfe
Merge tag 'v2.2.0_alpha132' into multilib
bin/misc-functions.sh | 9 +-
bin/repoman | 23 +-
doc/package/ebuild/eapi/5-progress.docbook | 1 +
man/ebuild.5 | 1165 ++++++++++++++--------------
man/emerge.1 | 23 +-
pym/_emerge/depgraph.py | 11 +-
pym/_emerge/is_valid_package_atom.py | 4 +-
pym/_emerge/resolver/output.py | 5 +-
pym/_emerge/resolver/output_helpers.py | 6 +-
pym/portage/dbapi/__init__.py | 2 +-
pym/portage/dep/__init__.py | 10 +-
pym/portage/eapi.py | 3 +-
pym/portage/manifest.py | 38 +-
pym/portage/package/ebuild/config.py | 16 +-
pym/portage/repository/config.py | 22 +-
pym/portage/util/env_update.py | 38 +-
pym/portage/versions.py | 4 +-
17 files changed, 738 insertions(+), 642 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-09-29 12:51 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-09-29 12:51 UTC (permalink / raw
To: gentoo-commits
commit: 80bfb6e67bb021d8b4cee741666570709ce12446
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 29 12:50:48 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 29 12:50:48 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=80bfb6e6
Merge v2.2.0_alpha134
bin/eapi.sh | 113 ++++++++++
bin/ebuild-helpers/dobin | 7 +-
bin/ebuild-helpers/dodir | 7 +-
bin/ebuild-helpers/dodoc | 23 +--
bin/ebuild-helpers/doexe | 7 +-
bin/ebuild-helpers/dohard | 19 +-
bin/ebuild-helpers/doheader | 8 +-
bin/ebuild-helpers/doinfo | 7 +-
bin/ebuild-helpers/doins | 18 +-
bin/ebuild-helpers/dolib | 7 +-
bin/ebuild-helpers/doman | 7 +-
bin/ebuild-helpers/domo | 7 +-
bin/ebuild-helpers/dosbin | 7 +-
bin/ebuild-helpers/dosed | 19 +-
bin/ebuild-helpers/dosym | 5 +-
bin/ebuild-helpers/ecompressdir | 7 +-
bin/ebuild-helpers/fowners | 5 +-
bin/ebuild-helpers/fperms | 7 +-
bin/ebuild-helpers/newins | 17 +-
bin/ebuild-helpers/prepall | 7 +-
bin/ebuild-helpers/prepalldocs | 17 +-
bin/ebuild-helpers/prepallinfo | 7 +-
bin/ebuild-helpers/prepallman | 9 +-
bin/ebuild-helpers/prepallstrip | 9 +-
bin/ebuild-helpers/prepinfo | 9 +-
bin/ebuild-helpers/preplib | 7 +-
bin/ebuild-helpers/prepman | 9 +-
bin/ebuild-helpers/prepstrip | 5 +-
bin/ebuild.sh | 58 +++--
bin/isolated-functions.sh | 17 +-
bin/misc-functions.sh | 80 ++++----
bin/phase-functions.sh | 55 ++---
bin/phase-helpers.sh | 155 ++++++--------
bin/portageq | 6 +-
bin/repoman | 80 ++++----
bin/save-ebuild-env.sh | 9 +-
doc/package/ebuild.docbook | 1 +
doc/package/ebuild/eapi/5-hdepend.docbook | 32 +++
doc/portage.docbook | 1 +
man/ebuild.5 | 68 +++++-
man/emerge.1 | 10 +-
man/make.conf.5 | 12 +-
man/repoman.1 | 72 ++-----
pym/_emerge/BlockerDB.py | 5 +-
pym/_emerge/FakeVartree.py | 4 +-
pym/_emerge/Package.py | 15 +-
pym/_emerge/actions.py | 4 +-
pym/_emerge/depgraph.py | 63 +++---
pym/_emerge/main.py | 1 -
pym/_emerge/resolver/circular_dependency.py | 4 +-
pym/portage/__init__.py | 4 +-
pym/portage/_global_updates.py | 14 +-
pym/portage/cache/flat_list.py | 134 ------------
pym/portage/cache/metadata.py | 3 +-
pym/portage/cache/sqlite.py | 9 +-
pym/portage/dbapi/__init__.py | 3 +-
pym/portage/dbapi/bintree.py | 12 +-
pym/portage/dbapi/porttree.py | 3 +-
pym/portage/dbapi/vartree.py | 2 +-
pym/portage/dep/_slot_operator.py | 23 ++-
pym/portage/eapi.py | 11 +-
pym/portage/emaint/modules/move/move.py | 4 +-
.../package/ebuild/_config/LocationsManager.py | 7 +-
pym/portage/package/ebuild/_config/UseManager.py | 20 ++-
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/config.py | 13 +-
pym/portage/package/ebuild/doebuild.py | 6 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 15 --
pym/portage/tests/ebuild/test_ipc_daemon.py | 4 +-
pym/portage/tests/emerge/test_emerge_slot_abi.py | 22 --
pym/portage/tests/emerge/test_simple.py | 17 --
pym/portage/tests/resolver/ResolverPlayground.py | 228 +++++++++-----------
pym/portage/tests/resolver/test_targetroot.py | 85 ++++++++
pym/portage/util/__init__.py | 16 +-
pym/portage/util/_eventloop/EventLoop.py | 30 ++--
pym/portage/util/_eventloop/PollSelectAdapter.py | 2 +-
76 files changed, 945 insertions(+), 873 deletions(-)
diff --cc bin/misc-functions.sh
index a067642,986264e..2cf71a8
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -17,9 -17,9 +17,11 @@@ shift $
source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}/ebuild.sh"
install_symlink_html_docs() {
+ [[ " ${FEATURES} " == *" force-prefix "* ]] || \
- case "$EAPI" in 0|1|2) local ED=${D} ;; esac
+ if ! ___eapi_has_prefix_variables; then
+ local ED=${D}
+ fi
+ [[ -e "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
#symlink the html documentation (if DOC_SYMLINKS_DIR is set in make.conf)
if [ -n "${DOC_SYMLINKS_DIR}" ] ; then
@@@ -150,14 -164,12 +166,13 @@@ prepcompress()
install_qa_check() {
local f i qa_var x
- [[ " ${FEATURES} " == *" force-prefix "* ]] || \
- case "$EAPI" in 0|1|2) local EPREFIX= ED=${D} ;; esac
+ if ! ___eapi_has_prefix_variables; then
+ local EPREFIX= ED=${D}
+ fi
+ [[ -d "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
- # Merge QA_FLAGS_IGNORED and QA_DT_HASH into a single array, since
- # QA_DT_HASH is deprecated.
qa_var="QA_FLAGS_IGNORED_${ARCH/-/_}"
eval "[[ -n \${!qa_var} ]] && QA_FLAGS_IGNORED=(\"\${${qa_var}[@]}\")"
if [[ ${#QA_FLAGS_IGNORED[@]} -eq 1 ]] ; then
diff --cc bin/phase-functions.sh
index 1afa45e,7a0baf4..f80781f
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -401,19 -356,9 +395,19 @@@ __dyn_prepare()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ "${PORTAGE_BUILDDIR}"/.prepared.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already prepared for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.prepared.${LOOP_ABI}' to force prepare."
+ continue
+ fi
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif has $EAPI 0 1 2 3 ; then
+ elif ___eapi_has_S_WORKDIR_fallback; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! __has_phase_defined_up_to prepare; then
cd "${WORKDIR}"
@@@ -452,19 -387,9 +446,19 @@@ __dyn_configure()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ ${PORTAGE_BUILDDIR}/.configured.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already configured for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.configured.${LOOP_ABI}' to force configuration."
+ continue
+ fi
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif has $EAPI 0 1 2 3 ; then
+ elif ___eapi_has_S_WORKDIR_fallback; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! __has_phase_defined_up_to configure; then
cd "${WORKDIR}"
@@@ -504,19 -420,9 +498,19 @@@ __dyn_compile()
return 0
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
+ if [ ${PORTAGE_BUILDDIR}/.compiled.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already compiled for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.compiled.${LOOP_ABI}' to force compilation."
+ continue
+ fi
+ fi
if [[ -d $S ]] ; then
cd "${S}"
- elif has $EAPI 0 1 2 3 ; then
+ elif ___eapi_has_S_WORKDIR_fallback; then
cd "${WORKDIR}"
elif [[ -z ${A} ]] && ! __has_phase_defined_up_to compile; then
cd "${WORKDIR}"
@@@ -628,15 -504,14 +622,17 @@@ __dyn_install()
trap "__abort_install" SIGINT SIGQUIT
__ebuild_phase pre_src_install
- _x=${ED}
- [[ " ${FEATURES} " == *" force-prefix "* ]] || \
- case "$EAPI" in 0|1|2) _x=${D} ;; esac
+ if ___eapi_has_prefix_variables; then
+ _x=${ED}
+ else
+ _x=${D}
+ fi
rm -rf "${D}"
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_auto-multilib && rm -rf "${D}".${ABI}
mkdir -p "${_x}"
unset _x
+ for LOOP_ABI in $(get_abi_list); do
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
if [[ -d $S ]] ; then
cd "${S}"
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-10-06 11:34 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-10-06 11:34 UTC (permalink / raw
To: gentoo-commits
commit: e565dbb49b6a69d083cd7dc3769c405bc83cab6d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 6 11:28:40 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Oct 6 11:28:40 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e565dbb4
Merge tag 'v2.2.0_alpha135' into multilib
bin/ebuild-helpers/fowners | 5 -
bin/ebuild-helpers/unprivileged/chgrp | 1 +
bin/ebuild-helpers/unprivileged/chown | 33 ++++
bin/ebuild.sh | 4 +-
bin/egencache | 160 +++++++++++++++++++-
bin/phase-functions.sh | 4 +-
bin/repoman | 12 ++-
man/egencache.1 | 21 +++
pym/_emerge/BlockerCache.py | 4 +-
pym/_emerge/EbuildFetcher.py | 53 ++-----
pym/_emerge/PollScheduler.py | 6 +-
pym/_emerge/depgraph.py | 14 ++-
pym/portage/cache/mappings.py | 6 +-
pym/portage/dbapi/_MergeProcess.py | 6 +-
pym/portage/dbapi/vartree.py | 4 +-
pym/portage/getbinpkg.py | 4 +-
pym/portage/manifest.py | 10 +-
.../ebuild/_parallel_manifest/ManifestProcess.py | 43 ++++++
.../ebuild/_parallel_manifest/ManifestScheduler.py | 88 +++++++++++
.../ebuild/_parallel_manifest/ManifestTask.py | 93 +++++++++++
.../ebuild/_parallel_manifest}/__init__.py | 0
pym/portage/package/ebuild/doebuild.py | 4 +
pym/portage/util/_async/AsyncScheduler.py | 104 +++++++++++++
pym/portage/util/_async/ForkProcess.py | 50 ++++++
.../{tests/update => util/_async}/__init__.py | 0
25 files changed, 659 insertions(+), 70 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-10-14 9:35 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-10-14 9:35 UTC (permalink / raw
To: gentoo-commits
commit: cf9860a6c155da9e7d8ea02ab42a8144fea3ee7f
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 14 09:35:17 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 14 09:35:17 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=cf9860a6
Merge tag 'v2.2.0_alpha137' into multilib
bin/ebuild.sh | 6 +-
bin/egencache | 5 +-
bin/misc-functions.sh | 2 +-
bin/phase-helpers.sh | 18 ++-
bin/portageq | 4 +-
bin/repoman | 11 +-
man/emerge.1 | 3 +-
man/portage.5 | 4 +-
man/repoman.1 | 2 +-
pym/_emerge/AbstractPollTask.py | 2 +-
pym/_emerge/AsynchronousLock.py | 8 +-
pym/_emerge/EbuildMetadataPhase.py | 2 +-
pym/_emerge/FifoIpcDaemon.py | 10 +-
pym/_emerge/MetadataRegen.py | 64 ++------
pym/_emerge/PipeReader.py | 4 +-
pym/_emerge/PollScheduler.py | 121 ++------------
pym/_emerge/QueueScheduler.py | 105 ------------
pym/_emerge/Scheduler.py | 63 ++++++--
pym/_emerge/SpawnProcess.py | 2 +-
pym/_emerge/SubProcess.py | 2 +-
pym/_emerge/TaskScheduler.py | 26 ---
pym/_emerge/actions.py | 41 +++--
pym/_emerge/main.py | 14 ++
pym/portage/dbapi/_MergeProcess.py | 177 ++++++++++----------
pym/portage/dbapi/porttree.py | 17 ++-
pym/portage/dbapi/vartree.py | 27 +++-
pym/portage/dep/__init__.py | 4 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 4 +-
.../ebuild/_parallel_manifest/ManifestScheduler.py | 4 +-
pym/portage/package/ebuild/_spawn_nofetch.py | 8 +-
pym/portage/package/ebuild/doebuild.py | 16 +-
pym/portage/package/ebuild/fetch.py | 5 +-
pym/portage/process.py | 42 +++--
pym/portage/tests/dep/testAtom.py | 6 +-
pym/portage/tests/dep/test_best_match_to_list.py | 6 +-
pym/portage/tests/ebuild/test_doebuild_spawn.py | 7 +-
pym/portage/tests/ebuild/test_ipc_daemon.py | 74 +++++---
pym/portage/tests/ebuild/test_spawn.py | 5 +-
.../test_lazy_import_portage_baseline.py | 4 +-
pym/portage/tests/locks/test_asynchronous_lock.py | 10 +-
pym/portage/tests/process/test_poll.py | 17 +-
pym/portage/util/_async/AsyncScheduler.py | 22 +--
pym/portage/util/_async/ForkProcess.py | 65 +++++---
pym/portage/util/_async/SchedulerInterface.py | 86 ++++++++++
pym/portage/util/_async/TaskScheduler.py | 20 +++
pym/repoman/checks.py | 25 ++-
runtests.sh | 2 +-
47 files changed, 589 insertions(+), 583 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-10-22 8:57 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-10-22 8:57 UTC (permalink / raw
To: gentoo-commits
commit: 1d7ef6f2f086bea07429d3d2a725b72f32715d17
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 22 08:56:18 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Oct 22 08:56:18 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1d7ef6f2
Merge v2.2.0_alpha141
bin/eapi.sh | 20 +
bin/ebuild | 2 +-
bin/ebuild.sh | 14 +-
bin/egencache | 4 +
bin/emerge | 97 ++--
bin/glsa-check | 2 +-
bin/misc-functions.sh | 36 +-
bin/phase-helpers.sh | 163 ++++-
bin/portageq | 112 +++-
bin/repoman | 52 +-
bin/save-ebuild-env.sh | 9 +-
cnf/make.globals | 3 -
doc/package/ebuild/eapi/5-progress.docbook | 30 +
man/ebuild.5 | 7 +-
man/emerge.1 | 4 +-
man/make.conf.5 | 16 +-
pym/_emerge/AbstractEbuildProcess.py | 13 +-
pym/_emerge/CompositeTask.py | 4 +
pym/_emerge/MergeListItem.py | 6 +-
pym/_emerge/PackageMerge.py | 7 +-
pym/_emerge/Scheduler.py | 21 +-
pym/_emerge/actions.py | 777 ++++++++++++++++++--
pym/_emerge/chk_updated_cfg_files.py | 42 ++
pym/_emerge/create_world_atom.py | 25 +-
pym/_emerge/depgraph.py | 32 +-
pym/_emerge/main.py | 690 +-----------------
pym/_emerge/post_emerge.py | 165 +++++
pym/_emerge/resolver/output.py | 121 ++-
pym/_emerge/resolver/output_helpers.py | 4 +-
pym/portage/__init__.py | 13 +-
pym/portage/_sets/dbapi.py | 25 +-
pym/portage/_sets/files.py | 4 +-
pym/portage/_sets/libs.py | 10 +-
pym/portage/_sets/security.py | 4 +-
pym/portage/dbapi/bintree.py | 76 +--
pym/portage/dbapi/porttree.py | 6 +-
pym/portage/dbapi/vartree.py | 36 +-
pym/portage/dep/__init__.py | 21 +-
pym/portage/emaint/modules/move/move.py | 18 +-
pym/portage/getbinpkg.py | 40 +
pym/portage/glsa.py | 9 +-
.../package/ebuild/_config/LocationsManager.py | 6 +-
pym/portage/package/ebuild/_config/MaskManager.py | 31 +-
.../package/ebuild/_config/special_env_vars.py | 2 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 86 ++-
.../ebuild/_parallel_manifest/ManifestScheduler.py | 6 +-
.../ebuild/_parallel_manifest/ManifestTask.py | 97 +++-
pym/portage/package/ebuild/config.py | 4 +-
pym/portage/package/ebuild/doebuild.py | 5 +-
pym/portage/package/ebuild/getmaskingreason.py | 20 +-
pym/portage/proxy/lazyimport.py | 4 +-
pym/portage/repository/config.py | 8 +-
pym/portage/tests/process/test_PopenProcess.py | 48 ++
pym/portage/util/_async/PopenProcess.py | 33 +
.../util/_dyn_libs/display_preserved_libs.py | 79 ++
pym/portage/util/_info_files.py | 138 ++++
56 files changed, 2205 insertions(+), 1102 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-10-29 12:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-10-29 12:23 UTC (permalink / raw
To: gentoo-commits
commit: 9db5b4a84b2c0723fb8b39c540f6182e46eeb4c3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 29 12:23:31 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Oct 29 12:23:31 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9db5b4a8
Merge tag 'v2.2.0_alpha142' into multilib
.gitignore | 1 +
bin/misc-functions.sh | 19 ++-
cnf/make.globals | 2 +-
man/make.conf.5 | 5 +
pym/_emerge/PipeReader.py | 6 +-
pym/_emerge/SpawnProcess.py | 165 ++++----------------
pym/_emerge/actions.py | 18 ++
pym/_emerge/depgraph.py | 37 ++++-
pym/_emerge/resolver/backtracking.py | 26 +++-
pym/portage/const.py | 1 +
pym/portage/dbapi/_MergeProcess.py | 6 +
pym/portage/dbapi/vartree.py | 140 ++++++++++++++++-
pym/portage/emaint/modules/logs/__init__.py | 2 +-
pym/portage/tests/process/test_PopenProcess.py | 44 +++++-
.../tests/resolver/test_slot_conflict_rebuild.py | 107 +++++++++++++
.../resolver/test_slot_operator_unsatisfied.py | 70 ++++++++
pym/portage/util/_async/PipeLogger.py | 146 +++++++++++++++++
pym/portage/util/_ctypes.py | 47 ++++++
18 files changed, 688 insertions(+), 154 deletions(-)
diff --cc pym/portage/const.py
index 58ec887,8c5bbf3..fe53907
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -95,8 -94,9 +95,9 @@@ SUPPORTED_FEATURES = frozenset(
"compress-index", "config-protect-if-modified",
"digest", "distcc", "distcc-pump", "distlocks",
"downgrade-backup", "ebuild-locks", "fakeroot",
- "fail-clean", "force-mirror", "force-prefix", "getbinpkg",
+ "fail-clean", "force-mirror", "force-multilib", "force-prefix", "getbinpkg",
"installsources", "keeptemp", "keepwork", "fixlafiles", "lmirror",
+ "merge-sync",
"metadata-transfer", "mirror", "multilib-strict", "news",
"noauto", "noclean", "nodoc", "noinfo", "noman",
"nostrip", "notitles", "parallel-fetch", "parallel-install",
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-11-30 16:44 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-11-30 16:44 UTC (permalink / raw
To: gentoo-commits
commit: 56e08beb42f99cdeddaa11bf1fe012a5b1c475b1
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 30 16:44:06 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Nov 30 16:44:06 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=56e08beb
Merge 2.2.0_alpha143
bin/archive-conf | 2 +-
bin/eapi.sh | 8 +
bin/ebuild-helpers/dodoc | 2 +-
bin/ebuild-helpers/doinfo | 2 +-
bin/ebuild-helpers/prepman | 2 +-
bin/ebuild-helpers/prepstrip | 75 +++++---
bin/ebuild.sh | 3 +-
bin/egencache | 2 +-
bin/emerge-webrsync | 9 +-
bin/glsa-check | 14 +-
bin/isolated-functions.sh | 2 +
bin/misc-functions.sh | 21 +-
bin/phase-functions.sh | 3 +-
bin/phase-helpers.sh | 28 ++-
bin/repoman | 61 +++++--
bin/save-ebuild-env.sh | 2 +
cnf/make.globals | 2 +-
doc/package/ebuild/eapi/4-python.docbook | 36 ++++
doc/package/ebuild/eapi/5-progress.docbook | 78 ++++++++
man/egencache.1 | 28 ++-
man/emerge.1 | 11 +-
man/portage.5 | 8 +-
man/repoman.1 | 5 +-
misc/emerge-delta-webrsync | 9 +-
pym/_emerge/AbstractEbuildProcess.py | 4 +-
pym/_emerge/BlockerDB.py | 7 +-
pym/_emerge/EbuildBuild.py | 4 +-
pym/_emerge/EbuildBuildDir.py | 4 +-
pym/_emerge/EbuildExecuter.py | 2 +-
pym/_emerge/EbuildMetadataPhase.py | 9 +
pym/_emerge/FakeVartree.py | 32 ++--
pym/_emerge/Package.py | 151 ++++++++++-----
pym/_emerge/PackageVirtualDbapi.py | 4 +-
pym/_emerge/Scheduler.py | 32 ++--
pym/_emerge/actions.py | 120 ++++++++----
pym/_emerge/depgraph.py | 205 ++++++++------------
pym/_emerge/main.py | 10 +
pym/_emerge/resolver/circular_dependency.py | 14 +-
pym/_emerge/resolver/output.py | 14 +-
pym/_emerge/resolver/slot_collision.py | 7 +-
pym/portage/__init__.py | 1 +
pym/portage/_sets/base.py | 4 +-
pym/portage/cache/flat_hash.py | 10 +-
pym/portage/dbapi/__init__.py | 19 ++-
pym/portage/dbapi/_similar_name_search.py | 57 ++++++
pym/portage/dbapi/bintree.py | 2 +-
pym/portage/dbapi/porttree.py | 7 +
pym/portage/dbapi/vartree.py | 29 ++--
pym/portage/dep/__init__.py | 67 ++++++-
pym/portage/dep/_slot_operator.py | 4 +-
pym/portage/dep/dep_check.py | 4 +-
pym/portage/eapi.py | 6 +
pym/portage/elog/mod_save.py | 24 ++-
pym/portage/elog/mod_save_summary.py | 21 ++-
pym/portage/emaint/modules/move/move.py | 22 ++-
pym/portage/package/ebuild/_config/UseManager.py | 119 +++++++++++-
.../package/ebuild/_config/special_env_vars.py | 7 +-
.../package/ebuild/_config/unpack_dependencies.py | 38 ++++
pym/portage/package/ebuild/_spawn_nofetch.py | 2 +-
pym/portage/package/ebuild/config.py | 5 +-
pym/portage/package/ebuild/doebuild.py | 38 +++--
pym/portage/package/ebuild/getmaskingstatus.py | 2 +-
pym/portage/repository/config.py | 13 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 16 +-
pym/portage/tests/emerge/test_simple.py | 2 +-
pym/portage/tests/repoman/test_simple.py | 2 +-
pym/portage/tests/resolver/ResolverPlayground.py | 17 +-
.../tests/resolver/test_unpack_dependencies.py | 65 ++++++
pym/portage/tests/resolver/test_use_aliases.py | 131 +++++++++++++
pym/portage/tests/update/test_update_dbentry.py | 45 +++++
pym/portage/update.py | 32 +++-
pym/portage/util/_desktop_entry.py | 5 +-
pym/portage/util/_eventloop/EventLoop.py | 27 ++-
pym/portage/util/movefile.py | 7 +-
pym/repoman/checks.py | 40 ++---
75 files changed, 1411 insertions(+), 511 deletions(-)
diff --cc pym/_emerge/Package.py
index f1b865c,86ed5f7..aac309a
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@@ -72,14 -79,9 +79,17 @@@ class Package(Task)
implicit_match = self.root_config.settings._iuse_effective_match
else:
implicit_match = self.root_config.settings._iuse_implicit_match
+ iuse = self.metadata["IUSE"]
+ if 'force-multilib' in self.root_config.settings.features:
+ if self.built is False:
+ for multilib_abis in self.root_config.settings.get("MULTILIB_ABIS", '').split():
+ iuse += " multilib_abi_" + multilib_abis
+ iuse += " abiwrapper"
+ self.metadata["IUSE"] = iuse
- self.iuse = self._iuse(iuse.split(), implicit_match)
+ usealiases = self.root_config.settings._use_manager.getUseAliases(self)
- self.iuse = self._iuse(self, self._metadata["IUSE"].split(), implicit_match,
++ self.iuse = self._iuse(self, iuse.split(), implicit_match,
+ usealiases, self.eapi)
++>>>>>>> v2.2.0_alpha143
if (self.iuse.enabled or self.iuse.disabled) and \
not eapi_attrs.iuse_defaults:
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-12-07 22:24 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-12-07 22:24 UTC (permalink / raw
To: gentoo-commits
commit: 2cff6e2b14e2b173f1f56869551bf968cf0a41cf
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 7 22:24:35 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 7 22:24:35 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2cff6e2b
Merge tag 'v2.2.0_alpha144' into multilib
bin/ebuild-helpers/prepstrip | 7 +++++--
pym/_emerge/AsynchronousLock.py | 1 +
pym/_emerge/actions.py | 2 +-
pym/portage/util/movefile.py | 12 +++++++++---
4 files changed, 16 insertions(+), 6 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-12-09 10:54 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-12-09 10:54 UTC (permalink / raw
To: gentoo-commits
commit: d9f6551e0b7f7b1b138cc40c51faa72be4bdf09d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 9 10:54:03 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Dec 9 10:54:03 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d9f6551e
Merge tag 'v2.2.0_alpha145' into multilib
man/emerge.1 | 4 +-
pym/_emerge/actions.py | 15 ++--
pym/_emerge/depgraph.py | 12 +++-
pym/_emerge/main.py | 17 ++++-
pym/portage/package/ebuild/doebuild.py | 2 +-
pym/portage/package/ebuild/getmaskingstatus.py | 7 ++
.../resolver/test_depclean_slot_unavailable.py | 79 ++++++++++++++++++++
7 files changed, 123 insertions(+), 13 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-12-14 20:14 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-12-14 20:14 UTC (permalink / raw
To: gentoo-commits
commit: d69ed258bab311ac51f1e2e4c0caaa14677d9b08
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 14 20:14:19 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 14 20:14:19 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d69ed258
Merge tag 'v2.2.0_alpha147' into multilib
pym/_emerge/Package.py | 12 +++++++++---
pym/_emerge/actions.py | 15 +++++++++------
pym/_emerge/depgraph.py | 3 +++
pym/_emerge/resolver/slot_collision.py | 3 +++
4 files changed, 24 insertions(+), 9 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-12-14 20:16 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-12-14 20:16 UTC (permalink / raw
To: gentoo-commits
commit: f4dccb3dc61bd45187f7491fa21d277704c39393
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 14 20:16:15 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 14 20:16:15 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f4dccb3d
Merge tag 'v2.2.0_alpha148' into multilib
bin/ebuild-helpers/prepstrip | 48 ++++++++--
bin/phase-functions.sh | 3 +-
bin/xattr-helper.py | 176 ++++++++++++++++++++++++++++++++
man/ebuild.5 | 7 +-
pym/portage/dbapi/_MergeProcess.py | 3 +
pym/portage/dbapi/vartree.py | 5 +-
pym/portage/dep/__init__.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 33 +++++-
8 files changed, 262 insertions(+), 15 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2012-12-16 10:49 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2012-12-16 10:49 UTC (permalink / raw
To: gentoo-commits
commit: 5728c6f5e9099f8b8076d0b8315be059a1244bda
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 16 10:49:27 2012 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Dec 16 10:49:27 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5728c6f5
Merge tag 'v2.2.0_alpha149' into multilib
bin/dispatch-conf | 2 +-
bin/repoman | 35 +++++++++++++++++++++++++------
pym/_emerge/BinpkgFetcher.py | 2 +-
pym/_emerge/SpawnProcess.py | 2 +-
pym/portage/__init__.py | 11 ++++++++++
pym/portage/getbinpkg.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 4 +-
pym/portage/package/ebuild/fetch.py | 2 +-
pym/portage/process.py | 2 +-
pym/repoman/checks.py | 10 +++++++-
10 files changed, 55 insertions(+), 17 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-12 11:21 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-12 11:21 UTC (permalink / raw
To: gentoo-commits
commit: 69dc95fb27bbe290ef60e5d826ec868d6baee4b5
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 12 11:20:06 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 12 11:20:06 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=69dc95fb
Merge 2.2.0_alpha151
.gitignore | 2 +
Makefile | 2 +-
bin/archive-conf | 3 +-
bin/binhost-snapshot | 3 +-
bin/clean_locks | 3 +-
bin/dispatch-conf | 3 +-
bin/ebuild | 4 +-
bin/ebuild-ipc.py | 175 ++----
bin/egencache | 67 +--
bin/emaint | 3 +-
bin/emerge | 5 +-
bin/emirrordist | 13 +
bin/env-update | 3 +-
bin/fixpackages | 3 +-
bin/glsa-check | 3 +-
bin/lock-helper.py | 3 +-
bin/phase-functions.sh | 6 +-
bin/phase-helpers.sh | 10 +-
bin/portageq | 3 +-
bin/quickpkg | 3 +-
bin/regenworld | 3 +-
bin/repoman | 27 +-
bin/xpak-helper.py | 3 +-
man/color.map.5 | 4 +-
man/ebuild.1 | 4 +-
man/ebuild.5 | 11 +-
man/egencache.1 | 4 +-
man/emerge.1 | 8 +-
man/emirrordist.1 | 143 +++++
man/make.conf.5 | 8 +-
man/portage.5 | 2 +-
man/quickpkg.1 | 20 +-
pym/_emerge/AbstractEbuildProcess.py | 2 +-
pym/_emerge/AsynchronousLock.py | 58 +--
pym/_emerge/AsynchronousTask.py | 14 +
pym/_emerge/BinpkgFetcher.py | 2 +-
pym/_emerge/BinpkgVerifier.py | 143 +++--
pym/_emerge/EbuildBuild.py | 4 +-
pym/_emerge/EbuildFetcher.py | 6 +-
pym/_emerge/EbuildMetadataPhase.py | 21 +-
pym/_emerge/FakeVartree.py | 72 ++-
pym/_emerge/FifoIpcDaemon.py | 29 +-
pym/_emerge/MergeListItem.py | 2 +-
pym/_emerge/MetadataRegen.py | 23 +-
pym/_emerge/PackageUninstall.py | 6 +-
pym/_emerge/PipeReader.py | 22 +-
pym/_emerge/PollScheduler.py | 6 +-
pym/_emerge/Scheduler.py | 13 +-
pym/_emerge/SpawnProcess.py | 26 +-
pym/_emerge/actions.py | 105 ++--
pym/_emerge/depgraph.py | 104 +++-
pym/_emerge/help.py | 6 +-
pym/_emerge/is_valid_package_atom.py | 2 +-
pym/_emerge/main.py | 6 +-
pym/portage/__init__.py | 4 +-
pym/portage/_emirrordist/Config.py | 132 +++++
pym/portage/_emirrordist/DeletionIterator.py | 83 +++
pym/portage/_emirrordist/DeletionTask.py | 129 ++++
pym/portage/_emirrordist/FetchIterator.py | 147 +++++
pym/portage/_emirrordist/FetchTask.py | 620 ++++++++++++++++++++
pym/portage/_emirrordist/MirrorDistTask.py | 218 +++++++
.../resolver => portage/_emirrordist}/__init__.py | 2 +-
pym/portage/_emirrordist/main.py | 437 ++++++++++++++
pym/portage/cache/flat_hash.py | 9 +-
pym/portage/checksum.py | 17 +-
pym/portage/dbapi/_MergeProcess.py | 18 +-
pym/portage/dbapi/_SyncfsProcess.py | 53 ++
pym/portage/dbapi/bintree.py | 48 +-
pym/portage/dbapi/dep_expand.py | 4 +-
pym/portage/dbapi/porttree.py | 29 +-
pym/portage/dbapi/vartree.py | 74 ++--
pym/portage/dep/__init__.py | 14 +-
pym/portage/locks.py | 11 +-
pym/portage/manifest.py | 47 +-
.../{_eapi_invalid.py => _metadata_invalid.py} | 0
.../ebuild/_parallel_manifest/ManifestScheduler.py | 19 +-
.../ebuild/_parallel_manifest/ManifestTask.py | 10 +-
pym/portage/package/ebuild/_spawn_nofetch.py | 7 +-
pym/portage/package/ebuild/config.py | 18 +-
pym/portage/package/ebuild/doebuild.py | 58 ++-
pym/portage/process.py | 14 +-
pym/portage/tests/dep/test_paren_reduce.py | 11 +-
pym/portage/tests/ebuild/test_doebuild_spawn.py | 39 +-
pym/portage/tests/emerge/test_simple.py | 8 +-
pym/portage/tests/process/test_PopenProcess.py | 7 +-
.../tests/process/test_PopenProcessBlockingIO.py | 63 ++
pym/portage/tests/repoman/test_echangelog.py | 6 +-
pym/portage/tests/runTests | 1 +
pym/portage/util/_ShelveUnicodeWrapper.py | 45 ++
pym/portage/util/_async/AsyncScheduler.py | 4 +-
pym/portage/util/_async/FileCopier.py | 17 +
pym/portage/util/_async/FileDigester.py | 73 +++
pym/portage/util/_async/PipeLogger.py | 36 +-
pym/portage/util/_async/PipeReaderBlockingIO.py | 91 +++
pym/portage/util/_async/SchedulerInterface.py | 25 +-
pym/portage/util/_async/run_main_scheduler.py | 41 ++
pym/portage/util/_eventloop/EventLoop.py | 271 ++++++---
pym/repoman/checks.py | 17 +-
runtests.sh | 34 +-
99 files changed, 3467 insertions(+), 770 deletions(-)
diff --cc bin/phase-functions.sh
index 50955af,01c6f55..32dd307
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -703,16 -562,11 +703,20 @@@ __dyn_install()
x=$(echo -n ${!f})
[[ -n $x ]] && echo "$x" > $f
done
+ # whitespace preserved
+ for f in QA_AM_MAINTAINER_MODE ; do
+ [[ -n ${!f} ]] && echo "${!f}" > $f
+ done
fi
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ #IUSE is changed in _post_src_install_chost_fix
+ #in pym/portage/package/ebuild/doebuild.py
+ #which is run after dyn_install, so useless to
+ #add internal USE flags here
+ if is_auto-multilib; then
+ echo "$(get_abi_order)" > MULTILIB_ABIS
+ fi
+ fi
echo "${USE}" > USE
echo "${EAPI:-0}" > EAPI
diff --cc bin/phase-helpers.sh
index 0ab8534,383f9ff..c7c3963
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@@ -212,10 -212,15 +212,16 @@@ use()
# Make sure we have this USE flag in IUSE
elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE ]] ; then
- [[ " ${FEATURES} " == *" force-multilib "* && $u == multilib ]] || \
- [[ $u =~ $PORTAGE_IUSE ]] || \
- if [[ ! $u =~ $PORTAGE_IUSE ]] ; then
++ if ( [[ ! " ${FEATURES} " == *" force-multilib "* && $u == multilib ]] && \
++ [[ ! $u =~ $PORTAGE_IUSE ]] ) ; then
+ if [[ ! ${EAPI} =~ ^(0|1|2|3|4|4-python|4-slot-abi)$ ]] ; then
+ # This is only strict starting with EAPI 5, since implicit IUSE
+ # is not well defined for earlier EAPIs (see bug #449708).
+ die "USE Flag '${u}' not in IUSE for ${CATEGORY}/${PF}"
+ fi
eqawarn "QA Notice: USE Flag '${u}' not" \
"in IUSE for ${CATEGORY}/${PF}"
+ fi
fi
local IFS=$' \t\n' prev_shopts=$- ret
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 7e7e8662ba9d189730f6ca6a8900e3823f9c4ee9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:17:38 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:17:38 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7e7e8662
Merge tag 'v2.2.0_alpha152' into multilib
Makefile | 14 ++-
bin/misc-functions.sh | 4 +
man/ru/ebuild.1 | 242 +++++++++++++++++++++++++++++++++++++++++++++++
pym/portage/__init__.py | 4 +
pym/portage/_selinux.py | 53 +++++-----
5 files changed, 286 insertions(+), 31 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 68f6c327ce05172ce970ff7933a1760821aa1fe2
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:17:49 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:17:49 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=68f6c327
Merge tag 'v2.2.0_alpha153' into multilib
Makefile | 17 ++++++++++-------
man/ebuild.1 | 12 ++++++------
pym/_emerge/EbuildPhase.py | 9 ++++++++-
pym/_emerge/SpawnProcess.py | 10 ++++++++--
.../package/ebuild/_config/LocationsManager.py | 18 +++++++++++++++---
pym/portage/package/ebuild/config.py | 18 ++++++++++++++++--
6 files changed, 63 insertions(+), 21 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 388a8c146ee5add6763ac8d2374c852c79f209c3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:18:03 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:18:03 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=388a8c14
Merge tag 'v2.2.0_alpha156' into multilib
.../package/ebuild/_config/KeywordsManager.py | 28 ++++++++++-----
pym/portage/tests/repoman/test_simple.py | 15 ++++++++
pym/portage/versions.py | 5 ++-
pym/repoman/utilities.py | 38 +++++++++++++++----
4 files changed, 68 insertions(+), 18 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 2062fd1c2f7fdb6c4fa15e3a87cf07f917872fab
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:18:07 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:18:07 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2062fd1c
Merge tag 'v2.2.0_alpha157' into multilib
.../package/ebuild/_config/KeywordsManager.py | 6 +++-
pym/portage/package/ebuild/_config/UseManager.py | 36 ++++++++++++++------
pym/portage/package/ebuild/config.py | 3 +-
pym/portage/versions.py | 10 +++--
4 files changed, 38 insertions(+), 17 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: a7cd0525f2c96780d3b1c4068a5116f34ff5dc92
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:18:12 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:18:12 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a7cd0525
Merge tag 'v2.2.0_alpha158' into multilib
bin/repoman | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: a8084e7f0be5e7b8f37bd040c3b98d2037d37631
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:17:58 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:17:58 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a8084e7f
Merge tag 'v2.2.0_alpha155' into multilib
bin/egencache | 30 +-
bin/glsa-check | 107 ++++---
bin/portageq | 10 +-
bin/repoman | 2 +-
pym/_emerge/DependencyArg.py | 10 +-
pym/_emerge/FakeVartree.py | 4 +-
pym/_emerge/JobStatusDisplay.py | 41 ++--
pym/_emerge/Package.py | 23 +-
pym/_emerge/Scheduler.py | 8 +-
pym/_emerge/UseFlagDisplay.py | 10 +-
pym/_emerge/actions.py | 23 +-
pym/_emerge/depgraph.py | 32 +-
pym/_emerge/emergelog.py | 12 +-
pym/_emerge/resolver/circular_dependency.py | 4 +-
pym/_emerge/resolver/output.py | 13 +-
pym/_emerge/resolver/output_helpers.py | 5 +-
pym/_emerge/resolver/slot_collision.py | 55 +++--
pym/portage/__init__.py | 11 +
pym/portage/_sets/__init__.py | 4 +
pym/portage/cache/ebuild_xattr.py | 2 +-
pym/portage/cache/flat_hash.py | 14 +-
pym/portage/cache/sqlite.py | 7 +-
pym/portage/const.py | 4 +-
pym/portage/dbapi/__init__.py | 4 +-
pym/portage/dbapi/_expand_new_virt.py | 4 +-
pym/portage/dbapi/bintree.py | 12 +-
pym/portage/dbapi/cpv_expand.py | 4 +-
pym/portage/dbapi/dep_expand.py | 4 +-
pym/portage/dbapi/porttree.py | 6 +-
pym/portage/dbapi/vartree.py | 126 ++++-----
pym/portage/dbapi/virtual.py | 3 +-
pym/portage/dep/__init__.py | 2 +
pym/portage/dep/_slot_operator.py | 4 +-
pym/portage/dep/dep_check.py | 11 +-
pym/portage/elog/mod_save_summary.py | 21 +-
pym/portage/getbinpkg.py | 4 +-
pym/portage/glsa.py | 301 +++++++++++---------
pym/portage/localization.py | 12 +-
pym/portage/manifest.py | 2 +
pym/portage/news.py | 10 +-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 7 +-
pym/portage/package/ebuild/config.py | 4 +-
pym/portage/package/ebuild/doebuild.py | 17 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 8 +-
pym/portage/process.py | 55 +++-
pym/portage/repository/config.py | 14 +-
.../{_emirrordist => tests/glsa}/__init__.py | 0
pym/portage/tests/{bin => glsa}/__test__ | 0
pym/portage/tests/glsa/test_security_set.py | 144 ++++++++++
pym/portage/tests/unicode/test_string_format.py | 51 ++--
pym/portage/update.py | 4 +-
pym/portage/util/digraph.py | 12 +-
pym/portage/util/movefile.py | 12 +-
pym/portage/versions.py | 6 +-
pym/portage/xml/metadata.py | 8 +-
pym/repoman/checks.py | 7 +-
pym/repoman/errors.py | 4 +-
pym/repoman/herdbase.py | 6 +-
pym/repoman/utilities.py | 24 +-
60 files changed, 829 insertions(+), 519 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 1874bf1ac75822b7f7c0af76b2e2697b48cda618
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:17:54 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:17:54 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1874bf1a
Merge tag 'v2.2.0_alpha154' into multilib
bin/ebuild | 2 +-
bin/ebuild.sh | 11 ++-
man/make.conf.5 | 3 +
man/portage.5 | 6 +-
man/ru/ebuild.1 | 36 +++++----
pym/_emerge/EbuildMetadataPhase.py | 5 +-
pym/_emerge/EbuildProcess.py | 12 ++-
pym/_emerge/EbuildSpawnProcess.py | 10 ++-
pym/_emerge/MiscFunctionsProcess.py | 7 ++-
pym/_emerge/SpawnProcess.py | 23 +++---
pym/_emerge/SubProcess.py | 9 +--
pym/_emerge/actions.py | 13 +++
pym/_emerge/depgraph.py | 17 ++--
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/doebuild.py | 52 +++----------
pym/portage/process.py | 15 ++++
pym/portage/util/_get_vm_info.py | 80 ++++++++++++++++++++
17 files changed, 202 insertions(+), 103 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: b232963a887bf2fcbbe54eab385b6cbfe7619df4
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:18:22 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:18:22 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b232963a
Merge tag 'v2.2.0_alpha160' into multilib
pym/_emerge/Package.py | 69 ++++++++++++++++++-------------
pym/_emerge/resolver/slot_collision.py | 20 +++++++++
pym/portage/dbapi/__init__.py | 4 +-
3 files changed, 63 insertions(+), 30 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 5f1383f2a237de3e2ac8aa98a1eae9ce4fc2eea6
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:18:17 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:18:17 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5f1383f2
Merge tag 'v2.2.0_alpha159' into multilib
cnf/make.conf | 15 +++++++++++++--
man/make.conf.5 | 12 ++++++------
pym/_emerge/depgraph.py | 7 +++++--
pym/portage/dbapi/__init__.py | 16 ++++++++++++----
pym/portage/dep/__init__.py | 8 +++++---
5 files changed, 41 insertions(+), 17 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-01-26 17:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-01-26 17:19 UTC (permalink / raw
To: gentoo-commits
commit: d4ea33518c44aa4d07f3f5dcc900a7b5a2d7436a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 26 17:18:26 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 26 17:18:26 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d4ea3351
Merge tag 'v2.2.0_alpha161' into multilib
pym/portage/dbapi/vartree.py | 2 +-
.../package/ebuild/_config/LocationsManager.py | 15 ++++++-----
pym/portage/package/ebuild/config.py | 7 +++--
pym/portage/repository/config.py | 7 +++--
pym/portage/util/_path.py | 27 ++++++++++++++++++++
5 files changed, 44 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-02-16 18:47 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-02-16 18:47 UTC (permalink / raw
To: gentoo-commits
commit: 7f5b665406eae057457f519ca8fc837f56aba8e2
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 16 18:46:50 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Feb 16 18:46:50 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7f5b6654
Merge v2.2.0_alpha163
bin/archive-conf | 4 +-
bin/ebuild | 3 +-
bin/isolated-functions.sh | 3 +-
bin/misc-functions.sh | 30 +-
bin/phase-functions.sh | 2 +-
bin/phase-helpers.sh | 11 +-
bin/repoman | 35 +-
man/ebuild.1 | 2 +-
man/ebuild.5 | 2 +-
man/emerge.1 | 15 +-
man/env-update.1 | 14 +-
man/etc-update.1 | 44 +--
man/portage.5 | 18 +-
man/ru/ebuild.1 | 3 +-
man/ru/env-update.1 | 35 ++
man/ru/etc-update.1 | 63 ++++
man/ru/fixpackages.1 | 22 ++
misc/emerge-delta-webrsync | 2 +-
pym/_emerge/SpawnProcess.py | 2 +-
pym/_emerge/actions.py | 73 ++--
pym/_emerge/depgraph.py | 392 +++++++++++++++++---
pym/_emerge/getloadavg.py | 5 +-
pym/_emerge/resolver/slot_collision.py | 2 +-
pym/portage/__init__.py | 58 ++-
pym/portage/data.py | 36 ++-
pym/portage/dbapi/__init__.py | 6 +-
pym/portage/dbapi/vartree.py | 6 +-
pym/portage/package/ebuild/_config/UseManager.py | 12 +-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/config.py | 50 ++-
.../package/ebuild/deprecated_profile_check.py | 46 ++-
pym/portage/package/ebuild/doebuild.py | 26 ++-
pym/portage/process.py | 2 +-
pym/portage/tests/emerge/test_simple.py | 2 +-
...test_complete_if_new_subslot_without_revbump.py | 74 ++++
.../test_regular_slot_change_without_revbump.py | 59 +++
.../resolver/test_slot_change_without_revbump.py | 69 ++++
.../tests/resolver/test_slot_operator_unsolved.py | 88 +++++
pym/portage/tests/runTests | 14 +-
pym/portage/util/__init__.py | 4 +-
pym/repoman/checks.py | 23 +-
pym/repoman/utilities.py | 5 +-
42 files changed, 1124 insertions(+), 242 deletions(-)
diff --cc bin/phase-helpers.sh
index c7c3963,ac1c076..68496c2
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@@ -210,10 -210,12 +210,13 @@@ use()
#fi
true
- # Make sure we have this USE flag in IUSE
- elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE ]] ; then
+ # Make sure we have this USE flag in IUSE, but exempt binary
+ # packages for API consumers like Entropy which do not require
+ # a full profile with IUSE_IMPLICIT and stuff (see bug #456830).
+ elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE &&
+ -n $PORTAGE_INTERNAL_CALLER ]] ; then
- if [[ ! $u =~ $PORTAGE_IUSE ]] ; then
+ if ( [[ ! " ${FEATURES} " == *" force-multilib "* && $u == multilib ]] && \
+ [[ ! $u =~ $PORTAGE_IUSE ]] ) ; then
if [[ ! ${EAPI} =~ ^(0|1|2|3|4|4-python|4-slot-abi)$ ]] ; then
# This is only strict starting with EAPI 5, since implicit IUSE
# is not well defined for earlier EAPIs (see bug #449708).
diff --cc pym/portage/package/ebuild/config.py
index aee20b0,fb7b741..c5ff688
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@@ -843,20 -844,9 +844,16 @@@ class config(object)
self[var] = default_val
self.backup_changes(var)
- features = []
- for x in ("globals", "defaults", "conf", "env"):
- v = self.configdict[x].get("FEATURES")
- if v is not None:
- features.append(v.split())
- features = stack_lists(features)
-
+ if portage._internal_caller:
+ self["PORTAGE_INTERNAL_CALLER"] = "1"
+ self.backup_changes("PORTAGE_INTERNAL_CALLER")
+ if 'force-multilib' in features:
+ #add multilib_abi internally to list of USE_EXPANDed vars
+ self["USE_EXPAND"] = "MULTILIB_ABI" + " " + self.get("USE_EXPAND", "")
+ self.backup_changes("USE_EXPAND")
+ default_abi = self.configdict["defaults"].get('DEFAULT_ABI', '').strip()
+ if default_abi:
+ self.configdict["defaults"]["USE"] = self.configdict["defaults"].get("USE", "") + " multilib_abi_" + default_abi
# initialize self.features
self.regenerate()
@@@ -1722,17 -1737,13 +1746,17 @@@
# FEATURES=test for all ebuilds, regardless of explicit IUSE.
iuse_implicit.add("test")
+ if 'force-multilib' in self.features:
+ for multilib_abis in self.get('MULTILIB_ABIS', '').split():
+ iuse_implicit.add("multilib_abi_" + multilib_abis)
+
return iuse_implicit
- def _getUseMask(self, pkg):
- return self._use_manager.getUseMask(pkg)
+ def _getUseMask(self, pkg, stable=None):
+ return self._use_manager.getUseMask(pkg, stable=stable)
- def _getUseForce(self, pkg):
- return self._use_manager.getUseForce(pkg)
+ def _getUseForce(self, pkg, stable=None):
+ return self._use_manager.getUseForce(pkg, stable=stable)
def _getMaskAtom(self, cpv, metadata):
"""
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-03-03 13:44 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-03-03 13:44 UTC (permalink / raw
To: gentoo-commits
commit: fe63300c9dcf440748c88a5606013b81ff9217c0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 3 13:43:20 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Mar 3 13:43:20 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=fe63300c
Merge tag 'v2.2.0_alpha164' into multilib
bin/ebuild-helpers/preplib | 32 --
bin/misc-functions.sh | 2 +-
bin/phase-helpers.sh | 5 +-
bin/portageq | 38 +-
bin/repoman | 481 ++++++++++++------------
doc/qa.docbook | 2 +-
man/emerge.1 | 4 +-
man/portage.5 | 11 +-
man/ru/ebuild.1 | 2 +-
man/ru/env-update.1 | 6 +-
pym/_emerge/Scheduler.py | 20 +-
pym/_emerge/depgraph.py | 40 ++-
pym/_emerge/help.py | 2 +-
pym/_emerge/resolver/output.py | 114 +++---
pym/_emerge/resolver/output_helpers.py | 3 +-
pym/portage/__init__.py | 10 +-
pym/portage/_sets/files.py | 6 +-
pym/portage/package/ebuild/config.py | 34 ++-
pym/portage/package/ebuild/digestgen.py | 107 +++---
pym/portage/process.py | 4 +
pym/portage/tests/lint/test_compile_modules.py | 20 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 6 +-
pym/portage/util/_eventloop/EventLoop.py | 8 +-
23 files changed, 494 insertions(+), 463 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-03-08 17:46 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-03-08 17:46 UTC (permalink / raw
To: gentoo-commits
commit: 6e28e4f677db82944f5658b47452f195641841bb
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 8 17:46:31 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Mar 8 17:46:31 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6e28e4f6
Merge tag 'v2.2.0_alpha166' into multilib
bin/repoman | 95 +++++++++++++++++++++------
pym/_emerge/actions.py | 3 +-
pym/_emerge/depgraph.py | 34 +++++++++-
pym/portage/tests/resolver/test_slot_abi.py | 85 +++++++++++++++++++++++-
4 files changed, 191 insertions(+), 26 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-03-23 16:24 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-03-23 16:24 UTC (permalink / raw
To: gentoo-commits
commit: 5a1193e5acd717b0afa77b56ef15f47036bd3c31
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 23 16:24:03 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Mar 23 16:24:03 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5a1193e5
Merge tag 'v2.2.0_alpha169' into multilib
bin/ebuild-helpers/ecompressdir | 33 ++-
bin/ebuild-helpers/prepallman | 5 +-
bin/ebuild-helpers/prepman | 5 +-
bin/ebuild-helpers/prepstrip | 9 +-
bin/emaint | 3 +-
bin/etc-update | 4 +-
bin/misc-functions.sh | 12 +-
bin/portageq | 304 ++++++++++++++++++--
bin/repoman | 8 +-
pym/_emerge/Task.py | 9 +-
pym/_emerge/actions.py | 32 ++-
pym/_emerge/depgraph.py | 125 +++++++--
pym/_emerge/is_valid_package_atom.py | 5 +-
pym/_emerge/resolver/output.py | 45 ++--
pym/_emerge/stdout_spinner.py | 13 +-
pym/portage/const.py | 6 +-
pym/portage/dbapi/vartree.py | 40 ++-
pym/portage/dep/__init__.py | 21 +--
pym/portage/emaint/__init__.py | 4 +-
pym/portage/emaint/modules/__init__.py | 4 +-
pym/portage/emaint/modules/binhost/__init__.py | 8 +-
pym/portage/emaint/modules/config/__init__.py | 8 +-
pym/portage/emaint/modules/logs/__init__.py | 8 +-
pym/portage/emaint/modules/move/__init__.py | 9 +-
pym/portage/emaint/modules/resume/__init__.py | 6 +-
pym/portage/emaint/modules/world/__init__.py | 8 +-
pym/portage/manifest.py | 3 +-
.../package/ebuild/_config/LocationsManager.py | 17 +-
pym/portage/package/ebuild/config.py | 2 +-
pym/portage/repository/config.py | 38 ++-
pym/portage/tests/__init__.py | 11 +-
pym/portage/tests/bin/setup_env.py | 12 +-
pym/portage/tests/emerge/test_simple.py | 15 +-
.../resolver/test_slot_operator_autounmask.py | 120 ++++++++
pym/portage/tests/runTests | 2 +-
pym/portage/update.py | 26 ++-
pym/portage/util/__init__.py | 19 +-
.../util/_dyn_libs/display_preserved_libs.py | 35 ++-
pym/portage/util/listdir.py | 8 +-
pym/portage/versions.py | 23 ++-
pym/repoman/checks.py | 6 +-
41 files changed, 831 insertions(+), 240 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-03-28 19:31 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-03-28 19:31 UTC (permalink / raw
To: gentoo-commits
commit: efee005bc838284ded7d7672c49b66fd2f5ae799
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 28 19:30:46 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Mar 28 19:30:46 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=efee005b
Merge tag 'v2.2.0_alpha170' into multilib
bin/ebuild-helpers/prepstrip | 3 +-
bin/repoman | 2 +-
cnf/make.globals | 5 +-
man/ebuild.1 | 4 +-
man/ebuild.5 | 9 ++-
man/make.conf.5 | 11 +++-
pym/_emerge/SpawnProcess.py | 9 ++-
pym/_emerge/depgraph.py | 27 +++++--
pym/portage/locks.py | 42 +++++++++---
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/config.py | 14 ++--
pym/portage/util/__init__.py | 65 ++++++++++++++++-
pym/portage/util/movefile.py | 75 ++++++++++++++++++--
13 files changed, 224 insertions(+), 45 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-04-03 11:51 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-04-03 11:51 UTC (permalink / raw
To: gentoo-commits
commit: 359a0020ed0f10e598faa8337f1b308b9bcfbe56
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 3 11:51:01 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Apr 3 11:51:01 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=359a0020
Merge tag 'v2.2.0_alpha171' into multilib
bin/ebuild | 23 ++++++++++-------------
bin/ebuild-helpers/ecompressdir | 4 ++--
bin/egencache | 11 ++++++++---
pym/portage/_emirrordist/main.py | 12 ++++++++----
pym/portage/dbapi/bintree.py | 19 +++++++++++++++++++
pym/portage/repository/config.py | 8 ++++++++
6 files changed, 55 insertions(+), 22 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-04-14 13:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-04-14 13:20 UTC (permalink / raw
To: gentoo-commits
commit: e1a20a8ef35e00a1fbeeaae1a9babfba8828ea4f
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 14 09:12:45 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Apr 14 09:12:45 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e1a20a8e
Merge tag 'v2.2.0_alpha173' into multilib
bin/misc-functions.sh | 10 ----------
bin/repoman | 10 ++++++++--
man/ebuild.5 | 1 +
man/emerge.1 | 5 +++++
man/make.conf.5 | 6 ++++--
man/portage.5 | 7 ++++++-
pym/_emerge/depgraph.py | 18 ++++++++++++++++--
7 files changed, 40 insertions(+), 17 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-05-10 8:01 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-05-10 8:01 UTC (permalink / raw
To: gentoo-commits
commit: 6d529d8fc81dd0d77bf19100db5e1dbea49abe7b
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri May 10 08:01:27 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri May 10 08:01:27 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6d529d8f
Merge tag 'v2.2.0_alpha174' into multilib
bin/ebuild | 8 +-
bin/misc-functions.sh | 13 +-
bin/phase-functions.sh | 2 +-
bin/repoman | 48 ++-
cnf/make.globals | 1 +
man/dispatch-conf.1 | 75 ++--
man/ebuild.5 | 5 +
man/emerge.1 | 39 ++-
man/make.conf.5 | 21 +
man/portage.5 | 11 +
man/repoman.1 | 4 +
man/ru/dispatch-conf.1 | 100 ++++
pym/_emerge/Package.py | 12 +-
pym/_emerge/actions.py | 24 +-
pym/_emerge/main.py | 7 +
pym/_emerge/search.py | 4 +-
pym/portage/_sets/libs.py | 9 +-
pym/portage/dbapi/bintree.py | 2 +-
pym/portage/dbapi/porttree.py | 2 +
pym/portage/dbapi/vartree.py | 87 +++-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/config.py | 133 ++++--
pym/portage/package/ebuild/getmaskingstatus.py | 15 +-
pym/portage/process.py | 11 +-
pym/portage/tests/__init__.py | 20 +-
pym/portage/tests/bin/setup_env.py | 44 +-
pym/portage/tests/dep/testAtom.py | 254 +++++-----
pym/portage/tests/dep/testCheckRequiredUse.py | 188 ++++----
pym/portage/tests/dep/testStandalone.py | 26 +-
pym/portage/tests/dep/test_best_match_to_list.py | 46 +-
pym/portage/tests/dep/test_dep_getcpv.py | 16 +-
pym/portage/tests/dep/test_dep_getrepo.py | 6 +-
pym/portage/tests/dep/test_dep_getslot.py | 10 +-
pym/portage/tests/dep/test_dep_getusedeps.py | 12 +-
pym/portage/tests/dep/test_get_operator.py | 24 +-
pym/portage/tests/dep/test_isjustname.py | 14 +-
pym/portage/tests/dep/test_isvalidatom.py | 6 +-
pym/portage/tests/dep/test_match_from_list.py | 120 +++---
pym/portage/tests/dep/test_paren_reduce.py | 50 +-
pym/portage/tests/dep/test_use_reduce.py | 519 ++++++++++----------
pym/portage/tests/ebuild/test_config.py | 4 +-
.../tests/env/config/test_PackageKeywordsFile.py | 8 +-
.../tests/env/config/test_PackageUseFile.py | 6 +-
.../tests/env/config/test_PortageModulesFile.py | 11 +-
pym/portage/tests/resolver/ResolverPlayground.py | 18 +-
pym/portage/tests/resolver/test_autounmask.py | 304 ++++++------
pym/portage/tests/resolver/test_backtracking.py | 6 +-
pym/portage/tests/resolver/test_depclean.py | 100 ++--
.../resolver/test_depclean_slot_unavailable.py | 15 +-
pym/portage/tests/resolver/test_multirepo.py | 4 +-
pym/portage/tests/util/test_stackDictList.py | 12 +-
pym/portage/tests/util/test_stackDicts.py | 41 +-
pym/portage/tests/util/test_stackLists.py | 18 +-
pym/portage/tests/util/test_uniqueArray.py | 14 +-
pym/portage/tests/util/test_varExpand.py | 80 ++--
pym/portage/tests/versions/test_cpv_sort_key.py | 7 +-
pym/portage/tests/versions/test_vercmp.py | 38 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 18 +-
.../util/_dyn_libs/display_preserved_libs.py | 2 +-
pym/portage/util/movefile.py | 10 +
pym/repoman/checks.py | 2 +
61 files changed, 1538 insertions(+), 1172 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-05-20 10:41 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-05-20 10:41 UTC (permalink / raw
To: gentoo-commits
commit: dff820f4c52ba830543c00e2d335e531bf7de8c0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon May 20 10:40:10 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon May 20 10:40:10 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=dff820f4
Merge v2.2.0_alpha176
NEWS | 2 +-
RELEASE-NOTES | 7 +-
bin/archive-conf | 16 ++--
bin/clean_locks | 2 -
bin/dispatch-conf | 9 +-
bin/dohtml.py | 5 +-
bin/ebuild-helpers/dohtml | 7 +-
bin/ebuild-helpers/portageq | 4 +-
bin/ebuild-ipc | 4 +-
bin/ebuild.sh | 8 +-
bin/egencache | 10 +-
bin/emerge | 1 -
bin/misc-functions.sh | 6 +-
bin/phase-functions.sh | 34 +++++--
bin/phase-helpers.sh | 23 ++---
bin/repoman | 104 +++++++-------------
cnf/make.globals | 8 +-
cnf/metadata.dtd | 2 +-
man/ebuild.5 | 6 +-
man/egencache.1 | 8 +-
man/emerge.1 | 4 +-
man/make.conf.5 | 36 +++++--
pym/_emerge/BinpkgFetcher.py | 8 ++-
pym/_emerge/EbuildBuild.py | 10 ++-
pym/_emerge/EbuildFetcher.py | 3 +-
pym/_emerge/JobStatusDisplay.py | 3 +-
pym/_emerge/actions.py | 6 +
pym/portage/dbapi/bintree.py | 89 +++++++++++------
pym/portage/getbinpkg.py | 33 +++++--
.../package/ebuild/_config/special_env_vars.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 21 ++---
pym/portage/package/ebuild/fetch.py | 9 ++-
pym/portage/tests/util/test_getconfig.py | 4 +-
pym/portage/util/env_update.py | 63 ++++++++-----
34 files changed, 324 insertions(+), 233 deletions(-)
diff --cc bin/phase-functions.sh
index 3031a5a,6d75ef1..828f929
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -558,36 -461,29 +558,40 @@@ __dyn_test()
return
fi
- if [[ ${EBUILD_FORCE_TEST} == 1 && test =~ $PORTAGE_IUSE ]]; then
- # If USE came from ${T}/environment then it might not have USE=test
- # like it's supposed to here.
- ! has test ${USE} && export USE="${USE} test"
- fi
-
trap "__abort_test" SIGINT SIGQUIT
+ for LOOP_ABI in $(get_abi_list); do
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
+
if [ -d "${S}" ]; then
cd "${S}"
else
cd "${WORKDIR}"
fi
- if ! has test $FEATURES && [ "${EBUILD_FORCE_TEST}" != "1" ]; then
- __vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
- elif has test $RESTRICT; then
+ if has test ${RESTRICT} ; then
einfo "Skipping make test/check due to ebuild restriction."
- __vecho ">>> Test phase [explicitly disabled]: ${CATEGORY}/${PF}"
+ __vecho ">>> Test phase [disabled because of RESTRICT=test]: ${CATEGORY}/${PF}"
+
+ # If ${EBUILD_FORCE_TEST} == 1 and FEATURES came from ${T}/environment
+ # then it might not have FEATURES=test like it's supposed to here.
+ elif [[ ${EBUILD_FORCE_TEST} != 1 ]] && ! has test ${FEATURES} ; then
+ __vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
else
+ # If ${EBUILD_FORCE_TEST} == 1 and USE came from ${T}/environment
+ # then it might not have USE=test like it's supposed to here.
+ if [[ ${EBUILD_FORCE_TEST} == 1 && test =~ ${PORTAGE_IUSE} ]] && \
+ ! has test ${USE} ; then
+ export USE="${USE} test"
+ fi
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if [ ${PORTAGE_BUILDDIR}/.tested.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already tested for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.tested.${LOOP_ABI}' to force testing."
+ continue
+ fi
+ fi
+
local save_sp=${SANDBOX_PREDICT}
addpredict /
__ebuild_phase pre_src_test
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-05-31 12:16 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-05-31 12:16 UTC (permalink / raw
To: gentoo-commits
commit: d14f303a43f380ea8054f2b25b7409c5850eb142
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri May 31 12:15:47 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri May 31 12:15:47 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=d14f303a
Merge tag 'v2.2.0_alpha177' into multilib
bin/ebuild | 3 ++-
bin/ebuild-helpers/ecompressdir | 15 +++++++++++++++
bin/egencache | 3 ++-
bin/quickpkg | 3 ++-
bin/repoman | 16 +++++++++++++++-
man/emerge.1 | 3 +++
man/portage.5 | 8 +++++++-
man/repoman.1 | 10 +++++++++-
pym/_emerge/main.py | 3 ++-
pym/portage/dbapi/porttree.py | 11 ++++++++++-
pym/portage/package/ebuild/fetch.py | 13 ++++++++++++-
pym/portage/repository/config.py | 15 ++++++++++++++-
12 files changed, 93 insertions(+), 10 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-08-04 11:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-08-04 11:19 UTC (permalink / raw
To: gentoo-commits
commit: 38858c9d01ae9d713b7124c2cb5db63ba137c6b8
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 4 11:16:52 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Aug 4 11:16:52 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=38858c9d
Merge tag 'v2.2.0_alpha193' into multilib
bin/isolated-functions.sh | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-08-04 11:19 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-08-04 11:19 UTC (permalink / raw
To: gentoo-commits
commit: ed2bdce054f8c05045da13241896e2ada5babb6d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 4 11:14:27 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Aug 4 11:14:27 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ed2bdce0
Merge v2.2.0_alpha192
Makefile | 14 +-
RELEASE-NOTES | 8 +
bin/bashrc-functions.sh | 4 +-
bin/binhost-snapshot | 13 +-
bin/chpathtool.py | 11 +-
bin/dispatch-conf | 2 +-
bin/ebuild | 53 +-
bin/ebuild-helpers/dohtml | 2 +-
bin/ebuild-helpers/portageq | 2 +-
bin/ebuild-helpers/prepstrip | 5 +-
bin/ebuild-helpers/{portageq => xattr/install} | 8 +-
bin/ebuild-ipc | 2 +-
bin/ebuild.sh | 36 +-
bin/egencache | 106 ++-
bin/emerge-webrsync | 65 +-
bin/filter-bash-environment.py | 18 +-
bin/fixpackages | 8 +
bin/glsa-check | 61 +-
bin/helper-functions.sh | 6 +-
bin/install.py | 248 +++++++
bin/isolated-functions.sh | 51 +-
bin/misc-functions.sh | 4 +-
bin/phase-functions.sh | 9 +-
bin/phase-helpers.sh | 18 +-
bin/portageq | 241 ++++---
bin/quickpkg | 18 +-
bin/repoman | 243 +++----
bin/save-ebuild-env.sh | 4 +-
bin/xattr-helper.py | 16 +-
bin/xpak-helper.py | 6 +-
cnf/{make.conf => make.conf.example} | 2 +-
...onf.alpha.diff => make.conf.example.alpha.diff} | 18 +-
...fbsd.diff => make.conf.example.amd64-fbsd.diff} | 18 +-
...onf.amd64.diff => make.conf.example.amd64.diff} | 18 +-
...ke.conf.arm.diff => make.conf.example.arm.diff} | 12 +-
....conf.hppa.diff => make.conf.example.hppa.diff} | 28 +-
....conf.ia64.diff => make.conf.example.ia64.diff} | 10 +-
....conf.m68k.diff => make.conf.example.m68k.diff} | 14 +-
....conf.mips.diff => make.conf.example.mips.diff} | 18 +-
...ke.conf.ppc.diff => make.conf.example.ppc.diff} | 26 +-
...onf.ppc64.diff => make.conf.example.ppc64.diff} | 24 +-
....conf.s390.diff => make.conf.example.s390.diff} | 10 +-
...make.conf.sh.diff => make.conf.example.sh.diff} | 17 +-
...fbsd.diff => make.conf.example.sparc-fbsd.diff} | 12 +-
...onf.sparc.diff => make.conf.example.sparc.diff} | 18 +-
...6-fbsd.diff => make.conf.example.x86-fbsd.diff} | 18 +-
...ke.conf.x86.diff => make.conf.example.x86.diff} | 18 +-
cnf/make.globals | 21 +-
cnf/repos.conf | 7 +
make.conf-repatch.sh | 40 --
make.conf.example-repatch.sh | 41 ++
man/color.map.5 | 16 +-
man/dispatch-conf.1 | 2 +-
man/ebuild.1 | 18 +-
man/ebuild.5 | 86 +--
man/egencache.1 | 23 +-
man/emaint.1 | 15 +-
man/emerge.1 | 252 ++++---
man/emirrordist.1 | 17 +-
man/env-update.1 | 9 +-
man/etc-update.1 | 2 +-
man/make.conf.5 | 127 ++--
man/portage.5 | 370 ++++++----
man/quickpkg.1 | 14 +-
man/repoman.1 | 43 +-
man/ru/color.map.5 | 217 ++++++
man/xpak.5 | 5 +-
misc/emerge-delta-webrsync | 523 ++++++++++-----
pym/_emerge/AbstractDepPriority.py | 5 +-
pym/_emerge/AsynchronousLock.py | 2 +-
pym/_emerge/Binpkg.py | 6 +-
pym/_emerge/DepPriority.py | 29 +-
pym/_emerge/DepPrioritySatisfiedRange.py | 24 +-
pym/_emerge/EbuildBuild.py | 18 +-
pym/_emerge/EbuildMetadataPhase.py | 1 -
pym/_emerge/EbuildPhase.py | 44 +-
pym/_emerge/MetadataRegen.py | 2 +
pym/_emerge/RootConfig.py | 13 +-
pym/_emerge/Scheduler.py | 51 +-
pym/_emerge/SpawnProcess.py | 3 +-
pym/_emerge/UnmergeDepPriority.py | 27 +-
pym/_emerge/actions.py | 742 ++++++++++++---------
pym/_emerge/clear_caches.py | 4 +-
pym/_emerge/depgraph.py | 184 +++--
pym/_emerge/main.py | 112 ++--
pym/_emerge/resolver/circular_dependency.py | 3 +-
pym/portage/__init__.py | 83 +--
pym/portage/_emirrordist/FetchTask.py | 19 +-
pym/portage/_emirrordist/main.py | 69 +-
pym/portage/_legacy_globals.py | 3 +-
pym/portage/_sets/__init__.py | 5 +-
pym/portage/cache/sqlite.py | 12 +-
pym/portage/cache/template.py | 13 +-
pym/portage/checksum.py | 8 +-
pym/portage/const.py | 6 +
pym/portage/data.py | 18 +-
pym/portage/dbapi/_MergeProcess.py | 9 +-
pym/portage/dbapi/__init__.py | 57 +-
pym/portage/dbapi/bintree.py | 2 +-
pym/portage/dbapi/porttree.py | 56 +-
pym/portage/dbapi/vartree.py | 12 +-
pym/portage/dep/__init__.py | 38 +-
pym/portage/dep/dep_check.py | 39 +-
pym/portage/dispatch_conf.py | 18 +-
pym/portage/eclass_cache.py | 14 +-
pym/portage/emaint/defaults.py | 11 +-
pym/portage/emaint/main.py | 134 ++--
pym/portage/emaint/modules/logs/__init__.py | 12 +-
pym/portage/output.py | 13 +-
.../package/ebuild/_config/LocationsManager.py | 33 +-
pym/portage/package/ebuild/_config/UseManager.py | 2 +-
.../package/ebuild/_config/special_env_vars.py | 20 +-
pym/portage/package/ebuild/_spawn_nofetch.py | 10 +-
pym/portage/package/ebuild/config.py | 129 ++--
pym/portage/package/ebuild/doebuild.py | 102 ++-
pym/portage/package/ebuild/fetch.py | 8 +-
pym/portage/package/ebuild/getmaskingreason.py | 12 +-
pym/portage/process.py | 67 +-
pym/portage/repository/config.py | 414 +++++++++---
pym/portage/tests/__init__.py | 8 +-
pym/portage/tests/dbapi/test_fakedbapi.py | 10 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 11 +-
pym/portage/tests/dep/test_isvalidatom.py | 5 +-
pym/portage/tests/dep/test_match_from_list.py | 7 +-
pym/portage/tests/ebuild/test_config.py | 20 +-
pym/portage/tests/ebuild/test_doebuild_fd_pipes.py | 137 ++++
pym/portage/tests/ebuild/test_spawn.py | 10 +-
pym/portage/tests/emerge/test_emerge_slot_abi.py | 4 +-
pym/portage/tests/emerge/test_simple.py | 55 +-
pym/portage/tests/lint/test_bash_syntax.py | 8 +-
pym/portage/tests/repoman/test_simple.py | 26 +-
pym/portage/tests/resolver/ResolverPlayground.py | 52 +-
pym/portage/tests/resolver/test_backtracking.py | 31 -
pym/portage/tests/resolver/test_depclean_order.py | 57 ++
pym/portage/tests/resolver/test_merge_order.py | 35 +-
pym/portage/tests/resolver/test_or_choices.py | 79 +++
.../resolver/test_slot_conflict_mask_update.py | 41 ++
.../tests/resolver/test_slot_conflict_update.py | 98 +++
pym/portage/tests/update/test_move_ent.py | 6 +-
pym/portage/tests/update/test_move_slot_ent.py | 6 +-
pym/portage/tests/update/test_update_dbentry.py | 6 +-
pym/portage/util/__init__.py | 206 +++---
pym/portage/util/_argparse.py | 42 ++
pym/portage/util/_async/ForkProcess.py | 6 +-
pym/portage/util/_desktop_entry.py | 16 +-
pym/portage/util/listdir.py | 122 ++--
pym/portage/util/movefile.py | 10 +-
pym/repoman/checks.py | 1 +
pym/repoman/utilities.py | 7 +-
149 files changed, 4709 insertions(+), 2542 deletions(-)
diff --cc pym/_emerge/actions.py
index b795f0e,4c53c25..f3874ec
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -3582,26 -3615,33 +3615,41 @@@ def run_action(emerge_config)
# it cancels all binary package options.
for opt in ("--getbinpkg", "--getbinpkgonly",
"--usepkg", "--usepkgonly"):
- myopts.pop(opt, None)
+ emerge_config.opts.pop(opt, None)
- adjust_configs(myopts, trees)
- apply_priorities(settings)
+ adjust_configs(emerge_config.opts, emerge_config.trees)
+ apply_priorities(emerge_config.target_config.settings)
+ if 'force-multilib' in settings.features:
+ if settings.get("NO_AUTO_FLAG", "") is "":
+ writemsg_level(bad("!!! Failed to find vars from extra profile") + "\n",level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! Please make sure that you did follow the instructions and included the extra profile\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! http://git.overlays.gentoo.org/gitweb/?p=proj/multilib-portage.git;a=blob;f=doc/portage-multilib-instructions\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! has some basic instructions for the setup\n"),level=logging.ERROR, noiselevel=-1)
+ return 1
+
- if myaction == 'version':
+ for fmt in emerge_config.target_config.settings["PORTAGE_BINPKG_FORMAT"].split():
+ if not fmt in portage.const.SUPPORTED_BINPKG_FORMATS:
+ if "--pkg-format" in emerge_config.opts:
+ problematic="--pkg-format"
+ else:
+ problematic="PORTAGE_BINPKG_FORMAT"
+
+ writemsg_level(("emerge: %s is not set correctly. Format " + \
+ "'%s' is not supported.\n") % (problematic, fmt),
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
+ if emerge_config.action == 'version':
writemsg_stdout(getportageversion(
- settings["PORTDIR"], None,
- settings.profile_path, settings["CHOST"],
- trees[settings['EROOT']]['vartree'].dbapi) + '\n', noiselevel=-1)
+ emerge_config.target_config.settings["PORTDIR"],
+ None,
+ emerge_config.target_config.settings.profile_path,
+ emerge_config.target_config.settings["CHOST"],
+ emerge_config.target_config.trees['vartree'].dbapi) + '\n',
+ noiselevel=-1)
return 0
- elif myaction == 'help':
+ elif emerge_config.action == 'help':
emerge_help()
return 0
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-08-18 20:55 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-08-18 20:55 UTC (permalink / raw
To: gentoo-commits
commit: 2efeb36f8e3fff17de8230d84081bf6b8a733ea2
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 18 20:55:28 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Aug 18 20:55:28 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2efeb36f
Merge tag 'v2.2.0' into multilib
bin/egencache | 15 ++++++--
bin/repoman | 30 +++++++++++++--
man/emerge.1 | 6 +--
man/make.conf.5 | 15 ++++++--
man/portage.5 | 13 +++++--
man/repoman.1 | 7 ++++
man/ru/ebuild.1 | 4 +-
pym/_emerge/actions.py | 12 ++++--
pym/_emerge/depgraph.py | 3 +-
pym/portage/__init__.py | 18 ---------
pym/portage/_emirrordist/main.py | 15 ++++++--
pym/portage/cache/fs_template.py | 5 ++-
pym/portage/const.py | 2 -
pym/portage/data.py | 2 +-
pym/portage/dbapi/bintree.py | 14 ++++++-
pym/portage/dbapi/vartree.py | 4 +-
pym/portage/locks.py | 7 +++-
pym/portage/package/ebuild/config.py | 9 +++--
pym/portage/package/ebuild/doebuild.py | 6 ++-
pym/portage/process.py | 6 ++-
pym/portage/repository/config.py | 2 +
pym/portage/util/__init__.py | 4 ++
pym/portage/util/_desktop_entry.py | 13 +++++++
pym/repoman/checks.py | 67 +++++++++++++++++++---------------
pym/repoman/errors.py | 2 +-
25 files changed, 188 insertions(+), 93 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-08-25 19:50 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-08-25 19:50 UTC (permalink / raw
To: gentoo-commits
commit: af379d621327813e4a3e41af885c0d13c42999ac
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 25 19:50:00 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Aug 25 19:50:00 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=af379d62
Merge v2.2.1
NEWS | 5 ++
bin/archive-conf | 26 +------
bin/ebuild-helpers/doins | 1 +
bin/repoman | 17 ++++-
man/make.conf.5 | 12 +++
man/repoman.1 | 5 +-
pym/_emerge/AbstractEbuildProcess.py | 39 ++++++++++
pym/_emerge/SpawnProcess.py | 38 +++++++++-
pym/portage/const.py | 8 +-
pym/portage/dep/dep_check.py | 31 +++++---
pym/portage/package/ebuild/doebuild.py | 32 +++++++-
pym/portage/process.py | 80 ++++++++++++++++++--
.../tests/resolver/test_autounmask_multilib_use.py | 85 ++++++++++++++++++++++
pym/portage/tests/resolver/test_or_choices.py | 55 ++++++++++++++
pym/portage/util/_desktop_entry.py | 7 +-
15 files changed, 391 insertions(+), 50 deletions(-)
diff --cc pym/portage/const.py
index 38741f8,214ede4..b6aac96
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -102,10 -101,12 +102,12 @@@ SUPPORTED_FEATURES = frozenset(
"compress-index", "config-protect-if-modified",
"digest", "distcc", "distcc-pump", "distlocks",
"downgrade-backup", "ebuild-locks", "fakeroot",
- "fail-clean", "force-mirror", "force-prefix", "getbinpkg",
+ "fail-clean", "force-mirror", "force-multilib", "force-prefix", "getbinpkg",
- "installsources", "keeptemp", "keepwork", "fixlafiles", "lmirror",
+ "installsources", "ipc-sandbox",
+ "keeptemp", "keepwork", "fixlafiles", "lmirror",
"merge-sync",
- "metadata-transfer", "mirror", "multilib-strict", "news",
+ "metadata-transfer", "mirror", "multilib-strict",
+ "network-sandbox", "news",
"noauto", "noclean", "nodoc", "noinfo", "noman",
"nostrip", "notitles", "parallel-fetch", "parallel-install",
"prelink-checksums", "preserve-libs",
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-09-10 16:53 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-09-10 16:53 UTC (permalink / raw
To: gentoo-commits
commit: ccdd40c3588b47a3048ec51c2bc0eb28f9023930
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue Sep 10 16:52:40 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue Sep 10 16:52:40 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ccdd40c3
Merge tag 'v2.2.2' into multilib
bin/dohtml.py | 46 ++++++++++--
bin/eapi.sh | 4 +
bin/ebuild-helpers/doexe | 3 +-
bin/ebuild-helpers/doins | 2 +-
bin/ebuild-helpers/keepdir | 20 +++++
bin/ebuild-helpers/newins | 10 +--
bin/ebuild-helpers/unprivileged/chown | 10 ++-
bin/ebuild.sh | 2 +-
bin/install.py | 5 ++
bin/phase-helpers.sh | 116 +++++++++++++++++++++--------
bin/save-ebuild-env.sh | 2 +-
doc/package/ebuild/eapi/4-python.docbook | 1 -
doc/package/ebuild/eapi/5-progress.docbook | 1 -
pym/_emerge/AsynchronousLock.py | 21 +++---
pym/_emerge/EbuildMetadataPhase.py | 20 ++---
pym/_emerge/FakeVartree.py | 11 ++-
pym/_emerge/FifoIpcDaemon.py | 16 ++--
pym/_emerge/PipeReader.py | 25 ++++---
pym/_emerge/SpawnProcess.py | 30 +++++---
pym/_emerge/SubProcess.py | 19 ++++-
pym/_emerge/actions.py | 63 ++++++++++++----
pym/portage/dbapi/_MergeProcess.py | 21 +++---
pym/portage/locks.py | 16 ++--
pym/portage/package/ebuild/doebuild.py | 19 +++++
pym/portage/process.py | 40 +++++++++-
pym/portage/repository/config.py | 2 +-
pym/portage/tests/process/test_poll.py | 36 ++++-----
pym/portage/util/__init__.py | 43 +++++++----
pym/portage/util/_async/PipeLogger.py | 21 +++---
pym/portage/util/_eventloop/EventLoop.py | 29 +++++---
pym/portage/util/movefile.py | 14 +++-
31 files changed, 475 insertions(+), 193 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-09-15 11:06 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-09-15 11:06 UTC (permalink / raw
To: gentoo-commits
commit: b8889dd3884d43f911ff0d7faffa1fd836ad28b0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 15 11:06:10 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Sep 15 11:06:10 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b8889dd3
Merge tag 'v2.2.4' into multilib
bin/dohtml.py | 5 +++--
bin/eapi.sh | 2 +-
doc/package/ebuild/eapi/5-progress.docbook | 6 ++++++
pym/portage/util/_ctypes.py | 2 +-
4 files changed, 11 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-09-15 11:39 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-09-15 11:39 UTC (permalink / raw
To: gentoo-commits
commit: 64e7d296a0dc87d73bcc9d28b09dae71769e2aa1
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 15 11:39:10 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Sep 15 11:39:10 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=64e7d296
Merge tag 'v2.2.5' into multilib
bin/misc-functions.sh | 1 +
pym/portage/repository/config.py | 15 ++++++++++-----
pym/portage/util/movefile.py | 15 +++++++--------
3 files changed, 18 insertions(+), 13 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2013-09-15 20:54 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2013-09-15 20:54 UTC (permalink / raw
To: gentoo-commits
commit: 5e951e83a79c1e7e6ae64d60f768b4b46e4c6f9e
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 15 20:54:25 2013 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Sep 15 20:54:25 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5e951e83
Merge tag 'v2.2.6' into multilib
pym/portage/repository/config.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2014-06-02 20:00 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2014-06-02 20:00 UTC (permalink / raw
To: gentoo-commits
commit: aa18688b2ff79a1d2c6b2036a3beb79781363051
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 2 19:59:31 2014 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Jun 2 19:59:31 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=aa18688b
Merge v2.2.10
doc/fragment/date => .portage_not_installed | 0
DEVELOPING | 32 +-
README | 49 +
RELEASE-NOTES | 28 +-
bin/archive-conf | 4 +-
bin/binhost-snapshot | 6 +-
bin/check-implicit-pointer-usage.py | 2 +-
bin/chpathtool.py | 65 +-
bin/clean_locks | 10 +-
bin/dispatch-conf | 4 +-
bin/dohtml.py | 4 +-
bin/ebuild | 10 +-
bin/ebuild-helpers/prepstrip | 15 +-
bin/ebuild-ipc.py | 6 +-
bin/ebuild.sh | 2 +-
bin/egencache | 142 +--
bin/emaint | 8 +-
bin/emerge | 8 +-
bin/emerge-webrsync | 6 +-
bin/emirrordist | 4 +-
bin/env-update | 4 +-
bin/filter-bash-environment.py | 4 +-
bin/fixpackages | 4 +-
bin/glsa-check | 6 +-
bin/helper-functions.sh | 57 +-
bin/install.py | 6 +-
bin/isolated-functions.sh | 13 +-
bin/lock-helper.py | 4 +-
bin/misc-functions.sh | 22 +-
bin/phase-functions.sh | 4 +-
bin/phase-helpers.sh | 19 +-
bin/portageq | 62 +-
bin/quickpkg | 4 +-
bin/regenworld | 4 +-
bin/repoman | 300 +++---
bin/save-ebuild-env.sh | 7 +-
bin/xattr-helper.py | 116 ++-
bin/xpak-helper.py | 4 +-
cnf/sets/portage.conf | 2 +-
doc/config/sets.docbook | 5 +-
man/ebuild.5 | 30 +-
man/emerge.1 | 31 +-
man/make.conf.5 | 30 +-
man/portage.5 | 134 ++-
man/ru/ebuild.1 | 16 +-
misc/emerge-delta-webrsync | 4 +-
mkrelease.sh | 89 +-
pym/_emerge/Binpkg.py | 1 +
pym/_emerge/BinpkgExtractorAsync.py | 15 +-
pym/_emerge/BlockerCache.py | 6 +-
pym/_emerge/EbuildExecuter.py | 11 +-
pym/_emerge/MergeListItem.py | 14 +-
pym/_emerge/Package.py | 5 +-
pym/_emerge/Scheduler.py | 7 +-
pym/_emerge/SpawnProcess.py | 8 +-
pym/_emerge/actions.py | 31 +-
pym/_emerge/countdown.py | 18 +-
pym/_emerge/create_depgraph_params.py | 3 +-
pym/_emerge/depgraph.py | 1067 ++++++++++++++------
pym/_emerge/help.py | 4 +-
pym/_emerge/main.py | 17 +-
pym/_emerge/resolver/output.py | 109 +-
pym/_emerge/resolver/output_helpers.py | 7 +-
pym/_emerge/resolver/package_tracker.py | 301 ++++++
pym/_emerge/resolver/slot_collision.py | 149 ++-
pym/_emerge/unmerge.py | 5 +-
pym/portage/__init__.py | 20 +-
pym/portage/_emirrordist/MirrorDistTask.py | 3 +-
pym/portage/_emirrordist/main.py | 20 +-
pym/portage/_global_updates.py | 224 ++--
pym/portage/_selinux.py | 4 +-
pym/portage/_sets/__init__.py | 2 +-
pym/portage/_sets/base.py | 3 +-
pym/portage/cache/flat_hash.py | 3 +-
pym/portage/cache/fs_template.py | 3 +-
pym/portage/cache/metadata.py | 3 +-
pym/portage/cache/sqlite.py | 3 +-
pym/portage/cache/template.py | 3 +-
pym/portage/checksum.py | 12 +-
pym/portage/const.py | 169 +++-
pym/portage/cvstree.py | 274 ++---
pym/portage/data.py | 15 +-
pym/portage/dbapi/bintree.py | 15 +-
pym/portage/dbapi/porttree.py | 9 +-
pym/portage/dbapi/vartree.py | 54 +-
pym/portage/debug.py | 10 +-
pym/portage/dep/__init__.py | 3 +-
pym/portage/dispatch_conf.py | 334 +++---
pym/portage/eclass_cache.py | 14 +-
pym/portage/elog/__init__.py | 3 +-
pym/portage/elog/mod_echo.py | 3 +-
pym/portage/elog/mod_syslog.py | 13 +-
pym/portage/emaint/main.py | 23 +-
pym/portage/emaint/module.py | 8 +-
pym/portage/emaint/modules/binhost/binhost.py | 4 +-
pym/portage/env/loaders.py | 26 +-
pym/portage/exception.py | 54 +-
pym/portage/getbinpkg.py | 172 ++--
pym/portage/glsa.py | 4 +-
pym/portage/localization.py | 7 +-
pym/portage/locks.py | 44 +-
pym/portage/mail.py | 7 +-
pym/portage/manifest.py | 3 +-
pym/portage/output.py | 32 +-
.../package/ebuild/_config/LocationsManager.py | 4 +-
pym/portage/package/ebuild/_config/MaskManager.py | 4 +-
pym/portage/package/ebuild/_config/UseManager.py | 2 +-
pym/portage/package/ebuild/config.py | 18 +-
pym/portage/package/ebuild/fetch.py | 7 +-
pym/portage/package/ebuild/getmaskingreason.py | 2 +-
pym/portage/package/ebuild/getmaskingstatus.py | 3 +-
pym/portage/process.py | 7 +-
pym/portage/proxy/lazyimport.py | 3 +-
pym/portage/repository/config.py | 35 +-
pym/portage/tests/__init__.py | 54 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 12 +-
pym/portage/tests/dep/test_match_from_list.py | 3 +-
pym/portage/tests/ebuild/test_config.py | 5 +-
pym/portage/tests/emerge/test_emerge_slot_abi.py | 6 +-
pym/portage/tests/emerge/test_simple.py | 23 +-
pym/portage/tests/lint/test_compile_modules.py | 22 +-
pym/portage/tests/repoman/test_simple.py | 7 +-
pym/portage/tests/resolver/ResolverPlayground.py | 113 +--
pym/portage/tests/resolver/test_backtracking.py | 13 +-
pym/portage/tests/resolver/test_blocker.py | 48 +
pym/portage/tests/resolver/test_multirepo.py | 84 +-
pym/portage/tests/resolver/test_onlydeps.py | 34 +
pym/portage/tests/resolver/test_package_tracker.py | 261 +++++
pym/portage/tests/resolver/test_slot_collisions.py | 106 +-
.../tests/resolver/test_slot_conflict_rebuild.py | 303 +++++-
pym/portage/tests/resolver/test_useflags.py | 78 ++
pym/portage/tests/runTests | 4 +-
pym/portage/tests/unicode/test_string_format.py | 3 +-
pym/portage/tests/util/test_getconfig.py | 27 +-
pym/portage/tests/util/test_whirlpool.py | 4 +-
pym/portage/update.py | 3 +-
pym/portage/util/ExtractKernelVersion.py | 6 +-
pym/portage/util/SlotObject.py | 1 -
pym/portage/util/__init__.py | 123 +--
.../util/_dyn_libs/PreservedLibsRegistry.py | 3 +-
pym/portage/util/_info_files.py | 20 +-
pym/portage/util/_urlopen.py | 5 +-
pym/portage/util/digraph.py | 36 +-
pym/portage/util/env_update.py | 11 +-
pym/portage/util/lafilefixer.py | 10 +-
pym/portage/util/movefile.py | 34 +-
pym/portage/util/writeable_check.py | 79 ++
pym/portage/versions.py | 14 +-
pym/portage/xpak.py | 8 +-
pym/repoman/checks.py | 33 +-
pym/repoman/utilities.py | 44 +
runtests.sh | 17 +-
tabcheck.py | 2 +-
153 files changed, 4585 insertions(+), 1926 deletions(-)
diff --cc pym/portage/const.py
index b6aac96,1785bff..d71bbf2
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -83,42 -84,117 +84,119 @@@ CVS_PACKAGE_ATOM = "dev-vcs/cvs
GIT_PACKAGE_ATOM = "dev-vcs/git"
RSYNC_PACKAGE_ATOM = "net-misc/rsync"
- INCREMENTALS = ("USE", "USE_EXPAND", "USE_EXPAND_HIDDEN",
- "FEATURES", "ACCEPT_KEYWORDS",
- "CONFIG_PROTECT_MASK", "CONFIG_PROTECT",
- "IUSE_IMPLICIT",
- "PRELINK_PATH", "PRELINK_PATH_MASK",
- "PROFILE_ONLY_VARIABLES",
- "USE_EXPAND_IMPLICIT", "USE_EXPAND_UNPREFIXED",
- "NO_AUTO_FLAG", "RESTRICT_MULTILIB_BINARIES")
- EBUILD_PHASES = ("pretend", "setup", "unpack", "prepare", "configure",
- "compile", "test", "install",
- "package", "preinst", "postinst","prerm", "postrm",
- "nofetch", "config", "info", "other")
+ INCREMENTALS = (
+ "ACCEPT_KEYWORDS",
+ "CONFIG_PROTECT",
+ "CONFIG_PROTECT_MASK",
+ "FEATURES",
+ "IUSE_IMPLICIT",
+ "PRELINK_PATH",
+ "PRELINK_PATH_MASK",
+ "PROFILE_ONLY_VARIABLES",
+ "USE",
+ "USE_EXPAND",
+ "USE_EXPAND_HIDDEN",
+ "USE_EXPAND_IMPLICIT",
+ "USE_EXPAND_UNPREFIXED",
++ "NO_AUTO_FLAG", "RESTRICT_MULTILIB_BINARIES"
+ )
+ EBUILD_PHASES = (
+ "pretend",
+ "setup",
+ "unpack",
+ "prepare",
+ "configure",
+ "compile",
+ "test",
+ "install",
+ "package",
+ "preinst",
+ "postinst",
+ "prerm",
+ "postrm",
+ "nofetch",
+ "config",
+ "info",
+ "other",
+ )
SUPPORTED_FEATURES = frozenset([
- "assume-digests", "binpkg-logs", "buildpkg", "buildsyspkg", "candy",
- "ccache", "cgroup", "chflags", "clean-logs",
- "collision-protect", "compress-build-logs", "compressdebug",
- "compress-index", "config-protect-if-modified",
- "digest", "distcc", "distcc-pump", "distlocks",
- "downgrade-backup", "ebuild-locks", "fakeroot",
- "fail-clean", "force-mirror", "force-multilib", "force-prefix", "getbinpkg",
- "installsources", "ipc-sandbox",
- "keeptemp", "keepwork", "fixlafiles", "lmirror",
- "merge-sync",
- "metadata-transfer", "mirror", "multilib-strict",
- "network-sandbox", "news",
- "noauto", "noclean", "nodoc", "noinfo", "noman",
- "nostrip", "notitles", "parallel-fetch", "parallel-install",
- "prelink-checksums", "preserve-libs",
- "protect-owned", "python-trace", "sandbox",
- "selinux", "sesandbox", "sfperms",
- "sign", "skiprocheck", "split-elog", "split-log", "splitdebug",
- "strict", "stricter", "suidctl", "test", "test-fail-continue",
- "unknown-features-filter", "unknown-features-warn",
- "unmerge-backup",
- "unmerge-logs", "unmerge-orphans", "userfetch", "userpriv",
- "usersandbox", "usersync", "webrsync-gpg", "xattr"])
+ "assume-digests",
+ "binpkg-logs",
+ "buildpkg",
+ "buildsyspkg",
+ "candy",
+ "ccache",
+ "cgroup",
+ "chflags",
+ "clean-logs",
+ "collision-protect",
+ "compress-build-logs",
+ "compressdebug",
+ "compress-index",
+ "config-protect-if-modified",
+ "digest",
+ "distcc",
+ "distcc-pump",
+ "distlocks",
+ "downgrade-backup",
+ "ebuild-locks",
+ "fail-clean",
+ "fakeroot",
+ "fixlafiles",
+ "force-mirror",
++ "force-multilib",
+ "force-prefix",
+ "getbinpkg",
+ "installsources",
+ "ipc-sandbox",
+ "keeptemp",
+ "keepwork",
+ "lmirror",
+ "merge-sync",
+ "metadata-transfer",
+ "mirror",
+ "multilib-strict",
+ "network-sandbox",
+ "news",
+ "noauto",
+ "noclean",
+ "nodoc",
+ "noinfo",
+ "noman",
+ "nostrip",
+ "notitles",
+ "parallel-fetch",
+ "parallel-install",
+ "prelink-checksums",
+ "preserve-libs",
+ "protect-owned",
+ "python-trace",
+ "sandbox",
+ "selinux",
+ "sesandbox",
+ "sfperms",
+ "sign",
+ "skiprocheck",
+ "splitdebug",
+ "split-elog",
+ "split-log",
+ "strict",
+ "stricter",
+ "suidctl",
+ "test",
+ "test-fail-continue",
+ "unknown-features-filter",
+ "unknown-features-warn",
+ "unmerge-backup",
+ "unmerge-logs",
+ "unmerge-orphans",
+ "userfetch",
+ "userpriv",
+ "usersandbox",
+ "usersync",
+ "webrsync-gpg",
+ "xattr",
+ ])
EAPI = 5
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2014-12-12 20:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2014-12-12 20:23 UTC (permalink / raw
To: gentoo-commits
commit: 07ca37d0205f4938d99d387f082d46b9e67e5fb4
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 12 20:21:32 2014 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 12 20:21:32 2014 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=07ca37d0
Merge tag 'v2.2.14' into multilib
NEWS | 9 +
RELEASE-NOTES | 36 +
bin/archive-conf | 4 +-
bin/binhost-snapshot | 4 +-
bin/chpathtool.py | 8 +-
bin/clean_locks | 4 +-
bin/deprecated-path | 28 +
bin/dispatch-conf | 4 +-
bin/ebuild | 4 +-
bin/ebuild-helpers/portageq | 20 +-
bin/ebuild-ipc.py | 84 +-
bin/ebuild.sh | 131 +--
bin/egencache | 4 +-
bin/emaint | 4 +-
bin/emerge | 5 +-
bin/emerge-webrsync | 4 +-
bin/env-update | 4 +-
bin/fixpackages | 4 +-
bin/glsa-check | 4 +-
bin/install-qa-check.d/05double-D | 17 +
bin/install-qa-check.d/05prefix | 117 +++
bin/install-qa-check.d/10executable-issues | 140 +++
bin/install-qa-check.d/10ignored-flags | 99 +++
bin/install-qa-check.d/20deprecated-directories | 18 +
bin/install-qa-check.d/20runtime-directories | 26 +
bin/install-qa-check.d/60bash-completion | 130 +++
bin/install-qa-check.d/60openrc | 41 +
bin/install-qa-check.d/60pkgconfig | 15 +
bin/install-qa-check.d/60pngfix | 35 +
bin/install-qa-check.d/60systemd | 25 +
bin/install-qa-check.d/60udev | 21 +
bin/install-qa-check.d/80libraries | 158 ++++
bin/install-qa-check.d/80multilib-strict | 50 ++
bin/install-qa-check.d/90gcc-warnings | 168 ++++
bin/install-qa-check.d/90world-writable | 25 +
bin/misc-functions.sh | 948 +--------------------
bin/phase-functions.sh | 6 +
bin/phase-helpers.sh | 4 +
bin/portageq | 347 +++++---
bin/quickpkg | 4 +-
bin/regenworld | 4 +-
bin/repoman | 4 +-
bin/xattr-helper.py | 6 +-
man/emerge.1 | 10 +-
misc/emerge-delta-webrsync | 6 +-
pym/_emerge/actions.py | 17 +-
pym/_emerge/depgraph.py | 134 ++-
pym/_emerge/main.py | 15 +-
pym/_emerge/post_emerge.py | 5 +-
pym/portage/dbapi/vartree.py | 42 +-
pym/portage/emaint/modules/binhost/__init__.py | 8 +-
pym/portage/emaint/modules/config/__init__.py | 8 +-
pym/portage/emaint/modules/logs/__init__.py | 8 +-
pym/portage/emaint/modules/merges/__init__.py | 7 +-
pym/portage/emaint/modules/move/__init__.py | 8 +-
pym/portage/emaint/modules/resume/__init__.py | 6 +-
pym/portage/emaint/modules/world/__init__.py | 8 +-
pym/portage/tests/__init__.py | 4 +-
pym/portage/tests/emerge/test_simple.py | 29 +-
pym/portage/tests/resolver/ResolverPlayground.py | 30 +-
...uild.py => test_slot_conflict_force_rebuild.py} | 24 +-
...build.py => test_slot_operator_required_use.py} | 40 +-
...test_solve_non_slot_operator_slot_conflicts.py} | 45 +-
setup.py | 41 +-
testpath | 11 +
65 files changed, 1942 insertions(+), 1337 deletions(-)
diff --cc bin/misc-functions.sh
index e8e9d4e,cc652a9..416e2bf
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -170,66 -168,34 +170,35 @@@ install_qa_check()
local EPREFIX= ED=${D}
fi
+ [[ -d "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
- qa_var="QA_FLAGS_IGNORED_${ARCH/-/_}"
- eval "[[ -n \${!qa_var} ]] && QA_FLAGS_IGNORED=(\"\${${qa_var}[@]}\")"
- if [[ ${#QA_FLAGS_IGNORED[@]} -eq 1 ]] ; then
- local shopts=$-
- set -o noglob
- QA_FLAGS_IGNORED=(${QA_FLAGS_IGNORED})
- set +o noglob
- set -${shopts}
- fi
+ # Run QA checks from install-qa-check.d.
+ # Note: checks need to be run *before* stripping.
+ local f
+ # TODO: handle nullglob-like
+ for f in "${PORTAGE_BIN_PATH}"/install-qa-check.d/*; do
+ # Run in a subshell to treat it like external script,
+ # but use 'source' to pass all variables through.
+ (
+ source "${f}" || eerror "Post-install QA check ${f##*/} failed to run"
+ )
+ done
- # Check for files built without respecting *FLAGS. Note that
- # -frecord-gcc-switches must be in all *FLAGS variables, in
- # order to avoid false positive results here.
- # NOTE: This check must execute before prepall/prepstrip, since
- # prepstrip strips the .GCC.command.line sections.
- if type -P scanelf > /dev/null && ! has binchecks ${RESTRICT} && \
- [[ "${CFLAGS}" == *-frecord-gcc-switches* ]] && \
- [[ "${CXXFLAGS}" == *-frecord-gcc-switches* ]] && \
- [[ "${FFLAGS}" == *-frecord-gcc-switches* ]] && \
- [[ "${FCFLAGS}" == *-frecord-gcc-switches* ]] ; then
- rm -f "${T}"/scanelf-ignored-CFLAGS.log
- for x in $(scanelf -qyRF '#k%p' -k '!.GCC.command.line' "${ED}") ; do
- # Separate out file types that are known to support
- # .GCC.command.line sections, using the `file` command
- # similar to how prepstrip uses it.
- f=$(file "${x}") || continue
- [[ -z ${f} ]] && continue
- if [[ ${f} == *"SB executable"* ||
- ${f} == *"SB shared object"* ]] ; then
- echo "${x}" >> "${T}"/scanelf-ignored-CFLAGS.log
+ # Run QA checks from repositories
+ # (yes, PORTAGE_ECLASS_LOCATIONS contains repo paths...)
+ local repo_location
+ for repo_location in "${PORTAGE_ECLASS_LOCATIONS[@]}"; do
+ for f in "${repo_location}"/metadata/install-qa-check.d/*; do
+ if [[ -f ${f} ]]; then
+ (
+ # allow inheriting eclasses
+ _IN_INSTALL_QA_CHECK=1
+ source "${f}" || eerror "Post-install QA check ${f##*/} failed to run"
+ )
fi
done
-
- if [[ -f "${T}"/scanelf-ignored-CFLAGS.log ]] ; then
-
- if [ "${QA_STRICT_FLAGS_IGNORED-unset}" = unset ] ; then
- for x in "${QA_FLAGS_IGNORED[@]}" ; do
- sed -e "s#^${x#/}\$##" -i "${T}"/scanelf-ignored-CFLAGS.log
- done
- fi
- # Filter anything under /usr/lib/debug/ in order to avoid
- # duplicate warnings for splitdebug files.
- sed -e "s#^usr/lib/debug/.*##" -e "/^\$/d" -e "s#^#/#" \
- -i "${T}"/scanelf-ignored-CFLAGS.log
- f=$(<"${T}"/scanelf-ignored-CFLAGS.log)
- if [[ -n ${f} ]] ; then
- __vecho -ne '\n'
- eqawarn "${BAD}QA Notice: Files built without respecting CFLAGS have been detected${NORMAL}"
- eqawarn " Please include the following list of files in your report:"
- eqawarn "${f}"
- __vecho -ne '\n'
- sleep 1
- else
- rm -f "${T}"/scanelf-ignored-CFLAGS.log
- fi
- fi
- fi
+ done
export STRIP_MASK
prepall
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2014-12-12 20:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2014-12-12 20:23 UTC (permalink / raw
To: gentoo-commits
commit: 5552a997355cd5937c62f5b155ab878dd94894d3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 12 20:20:54 2014 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 12 20:20:54 2014 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5552a997
Merge tag 'v2.2.13' into multilib
.gitignore | 1 +
.travis.yml | 13 +
DEVELOPING | 22 +-
MANIFEST.in | 18 +
Makefile | 215 -------
NEWS | 12 +-
RELEASE-NOTES | 27 +
bin/misc-functions.sh | 126 +++-
bin/phase-functions.sh | 146 ++---
bin/phase-helpers.sh | 28 +-
bin/repoman | 12 -
bin/save-ebuild-env.sh | 2 +-
cnf/sets/portage.conf | 5 +
doc/Makefile | 11 -
doc/fragment/version | 1 -
mkrelease.sh | 141 -----
pym/_emerge/Binpkg.py | 7 +-
pym/_emerge/EbuildBuild.py | 6 +-
pym/_emerge/FakeVartree.py | 4 +-
pym/_emerge/MiscFunctionsProcess.py | 6 +-
pym/_emerge/actions.py | 4 +-
pym/_emerge/depgraph.py | 207 +++++--
pym/_emerge/resolver/output_helpers.py | 2 +-
pym/_emerge/resolver/package_tracker.py | 2 +-
pym/portage/__init__.py | 16 +-
pym/portage/_global_updates.py | 4 +-
pym/portage/_sets/dbapi.py | 81 ++-
pym/portage/const.py | 9 +-
pym/portage/dbapi/vartree.py | 5 +-
pym/portage/dep/_slot_operator.py | 27 +-
pym/portage/dep/dep_check.py | 20 +-
pym/portage/emaint/modules/merges/merges.py | 8 +-
pym/portage/emaint/modules/move/move.py | 5 +-
pym/portage/mail.py | 12 +-
pym/portage/news.py | 8 +-
pym/portage/package/ebuild/config.py | 4 +
pym/portage/package/ebuild/doebuild.py | 8 +-
pym/portage/tests/__init__.py | 24 +-
.../date => pym/portage/tests/bin/__test__.py | 0
.../tests/{bin/__test__ => dbapi/__test__.py} | 0
pym/portage/tests/dbapi/test_portdb_cache.py | 23 +-
.../tests/{dbapi/__test__ => dep/__test__.py} | 0
.../tests/{dep/__test__ => ebuild/__test__.py} | 0
pym/portage/tests/ebuild/test_config.py | 71 ++-
.../tests/{ebuild/__test__ => emerge/__test__.py} | 0
pym/portage/tests/emerge/test_emerge_slot_abi.py | 7 +-
pym/portage/tests/emerge/test_simple.py | 26 +-
.../tests/{emerge/__test__ => env/__test__.py} | 0
.../tests/env/{__test__ => config/__test__.py} | 0
.../{env/config/__test__ => glsa/__test__.py} | 0
pym/portage/tests/glsa/test_security_set.py | 3 +-
.../{glsa/__test__ => lafilefixer/__test__.py} | 0
.../__test__ => lazyimport/__test__.py} | 0
.../{lazyimport/__test__ => lint/__test__.py} | 0
pym/portage/tests/lint/test_compile_modules.py | 10 +-
pym/portage/tests/lint/test_import_modules.py | 8 +-
.../tests/{lint/__test__ => locks/__test__.py} | 0
.../tests/{locks/__test__ => news/__test__.py} | 0
.../tests/{news/__test__ => process/__test__.py} | 0
.../{process/__test__ => repoman/__test__.py} | 0
pym/portage/tests/repoman/test_simple.py | 8 +-
pym/portage/tests/resolver/ResolverPlayground.py | 35 +-
.../{repoman/__test__ => resolver/__test__.py} | 0
.../tests/resolver/test_autounmask_use_breakage.py | 63 ++
pym/portage/tests/resolver/test_or_choices.py | 73 +++
.../test_slot_conflict_unsatisfied_deep_deps.py | 115 ++++
...nsatisfied.py => test_slot_operator_rebuild.py} | 52 +-
pym/portage/tests/{runTests => runTests.py} | 0
.../{resolver/__test__ => sets/base/__test__.py} | 0
.../sets/{base/__test__ => files/__test__.py} | 0
.../sets/{files/__test__ => shell/__test__.py} | 0
.../{sets/shell/__test__ => unicode/__test__.py} | 0
.../tests/{unicode/__test__ => update/__test__.py} | 0
.../tests/{update/__test__ => util/__test__.py} | 0
pym/portage/tests/util/test_getconfig.py | 4 +-
.../tests/{util/__test__ => versions/__test__.py} | 0
pym/portage/tests/xpak/__test__ | 0
.../tests/{versions/__test__ => xpak/__test__.py} | 0
pym/repoman/checks.py | 16 -
runtests.sh | 8 +-
setup.py | 657 +++++++++++++++++++++
81 files changed, 1758 insertions(+), 670 deletions(-)
diff --cc bin/phase-functions.sh
index 03b4c6f,9bc3eb5..73f9692
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -561,8 -472,7 +569,9 @@@ __dyn_test()
fi
trap "__abort_test" SIGINT SIGQUIT
- __start_distcc
+ for LOOP_ABI in $(get_abi_list); do
+ [[ " ${FEATURES} " == *" force-multilib "* ]] && is_ebuild && { set_abi ${LOOP_ABI}; source "${T}"/environment || die ; }
++ __start_distcc
if [ -d "${S}" ]; then
cd "${S}"
@@@ -597,13 -499,11 +606,17 @@@
local save_sp=${SANDBOX_PREDICT}
addpredict /
__ebuild_phase pre_src_test
+
+ __vecho ">>> Test phase: ${CATEGORY}/${PF}"
__ebuild_phase src_test
+
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if is_auto-multilib && is_ebuild; then
+ >> "$PORTAGE_BUILDDIR"/.tested."${LOOP_ABI}" || die "IO Failure -- Failed to 'touch .tested.${LOOP_ABI}'"
+ fi
+ fi
+ __vecho ">>> Completed testing ${CATEGORY}/${PF}"
+
>> "$PORTAGE_BUILDDIR/.tested" || \
die "Failed to create $PORTAGE_BUILDDIR/.tested"
__ebuild_phase post_src_test
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2014-12-12 20:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2014-12-12 20:23 UTC (permalink / raw
To: gentoo-commits
commit: 6a8389a3a9f6af80bbb4108d5bb6f4b847b44577
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 12 20:22:45 2014 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 12 20:22:45 2014 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6a8389a3
Merge tag 'v2.2.15' into multilib
Portage-2.2.15 release
RELEASE-NOTES | 52 +++
bin/bashrc-functions.sh | 7 +-
bin/dispatch-conf | 63 ++--
bin/ebuild | 6 +-
bin/ebuild.sh | 85 +++--
bin/etc-update | 164 +++++++++-
bin/install-qa-check.d/05double-D | 9 +-
bin/install-qa-check.d/90world-writable | 27 +-
bin/install.py | 2 +-
bin/isolated-functions.sh | 68 ++++
bin/misc-functions.sh | 71 ++--
bin/phase-functions.sh | 2 +-
bin/portageq | 14 +-
bin/quickpkg | 4 +-
bin/save-ebuild-env.sh | 4 +-
cnf/make.globals | 3 +-
man/ebuild.5 | 7 +-
man/emerge.1 | 28 +-
man/make.conf.5 | 6 +
man/portage.5 | 30 +-
pym/_emerge/Package.py | 18 +-
pym/_emerge/actions.py | 103 +++++-
pym/_emerge/create_depgraph_params.py | 5 +
pym/_emerge/depgraph.py | 232 ++++++++++---
pym/_emerge/main.py | 13 +-
pym/_emerge/sync/old_tree_timestamp.py | 5 +-
pym/_emerge/unmerge.py | 42 ++-
pym/portage/__init__.py | 27 ++
pym/portage/_global_updates.py | 4 +-
pym/portage/_selinux.py | 14 +-
pym/portage/cache/fs_template.py | 25 +-
pym/portage/const.py | 2 +
pym/portage/data.py | 134 ++++++--
.../dbapi/_ContentsCaseSensitivityManager.py | 93 ++++++
pym/portage/dbapi/bintree.py | 28 ++
pym/portage/dbapi/vartree.py | 361 ++++++++++++---------
pym/portage/dep/dep_check.py | 53 ++-
pym/portage/dispatch_conf.py | 157 +++++++--
pym/portage/exception.py | 1 +
pym/portage/locks.py | 9 +-
pym/portage/news.py | 9 +-
.../package/ebuild/_config/LocationsManager.py | 11 +-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/config.py | 110 +++++--
pym/portage/package/ebuild/doebuild.py | 24 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 9 +-
pym/portage/repository/config.py | 2 +-
pym/portage/tests/__init__.py | 4 +-
.../tests/ebuild/test_use_expand_incremental.py | 132 ++++++++
pym/portage/tests/emerge/test_config_protect.py | 292 +++++++++++++++++
pym/portage/tests/emerge/test_simple.py | 10 +-
pym/portage/tests/resolver/ResolverPlayground.py | 10 +
.../tests/resolver/test_onlydeps_circular.py | 51 +++
pym/portage/tests/resolver/test_or_choices.py | 59 +++-
..._slot_operator_update_probe_parent_downgrade.py | 68 ++++
pym/portage/tests/resolver/test_virtual_slot.py | 75 +++++
pym/portage/tests/resolver/test_with_test_deps.py | 44 +++
pym/portage/update.py | 6 +-
pym/portage/util/__init__.py | 49 ++-
pym/portage/util/movefile.py | 2 +-
pym/portage/util/path.py | 48 +++
pym/portage/util/writeable_check.py | 2 +-
setup.py | 25 +-
63 files changed, 2524 insertions(+), 500 deletions(-)
diff --cc bin/misc-functions.sh
index 416e2bf,e08c228..22ab339
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -170,18 -168,21 +170,22 @@@ install_qa_check()
local EPREFIX= ED=${D}
fi
+ [[ -d "${ED}" ]] || return 0
cd "${ED}" || die "cd failed"
- # Run QA checks from install-qa-check.d.
- # Note: checks need to be run *before* stripping.
- local f
- # TODO: handle nullglob-like
- for f in "${PORTAGE_BIN_PATH}"/install-qa-check.d/*; do
- # Run in a subshell to treat it like external script,
- # but use 'source' to pass all variables through.
- (
- source "${f}" || eerror "Post-install QA check ${f##*/} failed to run"
+ # Collect the paths for QA checks, highest prio first.
+ paths=(
+ # sysadmin overrides
+ "${PORTAGE_OVERRIDE_EPREFIX}"/usr/local/lib/install-qa-check.d
+ # system-wide package installs
+ "${PORTAGE_OVERRIDE_EPREFIX}"/usr/lib/install-qa-check.d
+ )
+
+ # Now repo-specific checks.
+ # (yes, PORTAGE_ECLASS_LOCATIONS contains repo paths...)
+ for d in "${PORTAGE_ECLASS_LOCATIONS[@]}"; do
+ paths+=(
+ "${d}"/metadata/install-qa-check.d
)
done
diff --cc pym/portage/package/ebuild/config.py
index a7e8bd6,59e239b..f9603e7
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@@ -880,13 -915,8 +915,15 @@@ class config(object)
# initialize self.features
self.regenerate()
+ if 'force-multilib' in self.features:
+ #add multilib_abi internally to list of USE_EXPANDed vars
+ self["USE_EXPAND"] = "MULTILIB_ABI" + " " + self.get("USE_EXPAND", "")
+ self.backup_changes("USE_EXPAND")
+ default_abi = self.configdict["defaults"].get('DEFAULT_ABI', '').strip()
+ if default_abi:
+ self.configdict["defaults"]["USE"] = self.configdict["defaults"].get("USE", "") + " multilib_abi_" + default_abi
+ if unprivileged:
+ self.features.add('unprivileged')
if bsd_chflags:
self.features.add('chflags')
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2014-12-12 20:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2014-12-12 20:23 UTC (permalink / raw
To: gentoo-commits
commit: 26b0a5471a0f42cd331351b43506930e46160960
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 12 20:16:52 2014 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 12 20:16:52 2014 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=26b0a547
Merge tag 'v2.2.11' into multilib
DEVELOPING | 97 ++++++++++------
RELEASE-NOTES | 34 +++++-
bin/chpathtool.py | 9 +-
bin/ebuild-helpers/xattr/install | 27 ++++-
bin/emerge | 9 +-
bin/repoman | 23 +++-
man/emerge.1 | 14 +++
man/make.conf.5 | 127 ++++++++++-----------
man/repoman.1 | 4 +
pym/_emerge/Binpkg.py | 2 +-
pym/_emerge/EbuildBuild.py | 9 +-
pym/_emerge/PackageMerge.py | 5 +-
pym/_emerge/TaskSequence.py | 25 +++-
pym/_emerge/UserQuery.py | 71 ++++++++++++
pym/_emerge/actions.py | 31 ++---
pym/_emerge/depgraph.py | 53 +++++++--
pym/_emerge/main.py | 17 +++
pym/_emerge/resolver/output.py | 5 +-
pym/_emerge/resolver/output_helpers.py | 20 +---
pym/_emerge/search.py | 10 +-
pym/_emerge/unmerge.py | 5 +-
pym/_emerge/userquery.py | 55 ---------
pym/portage/dbapi/vartree.py | 42 +++----
pym/portage/dep/dep_check.py | 14 ---
pym/portage/dispatch_conf.py | 3 +-
pym/portage/emaint/module.py | 2 +-
pym/portage/exception.py | 4 +
pym/portage/glsa.py | 1 +
pym/portage/localization.py | 12 ++
pym/portage/package/ebuild/config.py | 13 ++-
.../tests/resolver/test_slot_conflict_rebuild.py | 41 +++++++
pym/portage/util/__init__.py | 3 +-
pym/portage/util/writeable_check.py | 29 +++--
pym/repoman/checks.py | 10 --
pym/repoman/utilities.py | 2 +-
35 files changed, 546 insertions(+), 282 deletions(-)
diff --cc pym/_emerge/actions.py
index e7b3622,b935139..5598b3c
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -3051,8 -3055,8 +3055,8 @@@ def getportageversion(portdir, _unused
gccver = getgccversion(chost)
unameout=platform.release()+" "+platform.machine()
- return "Portage %s (%s, %s, %s, %s)" % \
- (portage.VERSION + "-multilib", profilever, gccver, ",".join(libcver), unameout)
+ return "Portage %s (%s, %s, %s, %s, %s)" % \
- (portage.VERSION, pythonver, profilever, gccver, ",".join(libcver), unameout)
++ (portage.VERSION + "-multilib", pythonver, profilever, gccver, ",".join(libcver), unameout)
def git_sync_timestamps(portdb, portdir):
"""
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2014-12-12 20:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2014-12-12 20:23 UTC (permalink / raw
To: gentoo-commits
commit: 723161745437fcc4a90a7307f6412201f5edd225
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 12 20:17:36 2014 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Dec 12 20:17:36 2014 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=72316174
Merge tag 'v2.2.12' into multilib
NEWS | 17 +-
RELEASE-NOTES | 21 ++
bin/chpathtool.py | 9 +-
bin/ebuild-helpers/emake | 4 +-
bin/misc-functions.sh | 44 +++-
bin/phase-helpers.sh | 8 +-
bin/quickpkg | 4 +-
bin/repoman | 12 +-
pym/_emerge/Scheduler.py | 2 +-
pym/_emerge/actions.py | 13 +-
pym/_emerge/depgraph.py | 7 +-
pym/_emerge/main.py | 5 +-
pym/_emerge/sync/old_tree_timestamp.py | 12 +-
pym/_emerge/unmerge.py | 3 +-
pym/portage/_emirrordist/FetchTask.py | 6 +-
pym/portage/_sets/dbapi.py | 4 +-
pym/portage/cache/sqlite.py | 4 +-
pym/portage/const.py | 3 +-
pym/portage/dbapi/__init__.py | 6 +-
pym/portage/dbapi/vartree.py | 10 +-
pym/portage/emaint/main.py | 6 +-
pym/portage/emaint/modules/merges/__init__.py | 30 +++
pym/portage/emaint/modules/merges/merges.py | 290 +++++++++++++++++++++++
pym/portage/localization.py | 7 +-
pym/portage/output.py | 6 +-
pym/portage/util/_eventloop/EventLoop.py | 8 +-
pym/portage/util/_eventloop/PollSelectAdapter.py | 6 +-
27 files changed, 481 insertions(+), 66 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2015-05-05 11:29 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2015-05-05 11:29 UTC (permalink / raw
To: gentoo-commits
commit: 600cb1fd9daed3b01d8f51b38c29f000376b6513
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Tue May 5 11:30:56 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Tue May 5 11:30:56 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=600cb1fd
Merge tag 'v2.2.18' into multilib
Portage-2.2.18 release
NEWS | 11 +
RELEASE-NOTES | 69 ++
bin/chpathtool.py | 22 +-
bin/eapi.sh | 114 +-
bin/ebuild | 1 +
bin/ebuild-helpers/dohtml | 4 +
bin/ebuild.sh | 13 +-
bin/egencache | 38 +-
bin/emerge-webrsync | 4 +-
bin/isolated-functions.sh | 21 +-
bin/phase-functions.sh | 13 +-
bin/phase-helpers.sh | 315 +++++-
bin/portageq | 16 +-
bin/regenworld | 4 +-
bin/repoman | 15 +-
bin/save-ebuild-env.sh | 5 +-
bin/socks5-server.py | 227 ++++
cnf/make.conf.example | 2 +-
cnf/repo.postsync.d/example | 51 +
cnf/repos.conf | 1 +
cnf/sets/portage.conf | 12 +-
doc/config/sets.docbook | 47 +-
man/ebuild.5 | 21 +-
man/egencache.1 | 15 +-
man/emaint.1 | 71 +-
man/emerge.1 | 91 +-
man/make.conf.5 | 14 +-
man/portage.5 | 232 ++++-
man/repoman.1 | 2 +-
pym/_emerge/AbstractPollTask.py | 52 +-
pym/_emerge/BinpkgExtractorAsync.py | 25 +-
pym/_emerge/FakeVartree.py | 16 +-
pym/_emerge/Package.py | 58 +-
pym/_emerge/Scheduler.py | 1 +
pym/_emerge/actions.py | 1095 ++------------------
pym/_emerge/create_depgraph_params.py | 22 +
pym/_emerge/create_world_atom.py | 6 +-
pym/_emerge/depgraph.py | 550 +++++++---
pym/_emerge/help.py | 2 +-
pym/_emerge/main.py | 81 +-
pym/_emerge/resolver/DbapiProvidesIndex.py | 101 ++
pym/_emerge/resolver/output.py | 19 +-
pym/_emerge/resolver/output_helpers.py | 19 +-
pym/_emerge/resolver/package_tracker.py | 42 +-
pym/_emerge/resolver/slot_collision.py | 35 +-
pym/_emerge/search.py | 188 ++--
pym/portage/__init__.py | 4 +-
pym/portage/_sets/ProfilePackageSet.py | 34 +
pym/portage/_sets/__init__.py | 19 +-
pym/portage/_sets/files.py | 157 ++-
pym/portage/_sets/profiles.py | 27 +-
pym/portage/cache/index/IndexStreamIterator.py | 27 +
.../sync => portage/cache/index}/__init__.py | 2 +-
pym/portage/cache/index/pkg_desc_index.py | 59 ++
pym/portage/dbapi/DummyTree.py | 16 +
pym/portage/dbapi/IndexedPortdb.py | 171 +++
pym/portage/dbapi/IndexedVardb.py | 114 ++
pym/portage/dbapi/_VdbMetadataDelta.py | 153 +++
pym/portage/dbapi/bintree.py | 38 +-
pym/portage/dbapi/vartree.py | 72 +-
pym/portage/dep/__init__.py | 31 +-
pym/portage/dep/_slot_operator.py | 13 +
pym/portage/dep/dep_check.py | 16 +-
pym/portage/dep/soname/SonameAtom.py | 72 ++
.../resolver => portage/dep/soname}/__init__.py | 2 +-
pym/portage/dep/soname/multilib_category.py | 114 ++
pym/portage/dep/soname/parse.py | 47 +
pym/portage/dispatch_conf.py | 68 +-
pym/portage/eapi.py | 2 +-
pym/portage/emaint/main.py | 33 +-
pym/portage/emaint/modules/merges/merges.py | 15 +-
pym/portage/emaint/modules/sync/__init__.py | 55 +
pym/portage/emaint/modules/sync/sync.py | 289 ++++++
pym/portage/locks.py | 2 +-
pym/portage/metadata.py | 208 ++++
pym/portage/{emaint => }/module.py | 40 +-
pym/portage/news.py | 6 +-
.../package/ebuild/_config/KeywordsManager.py | 6 +-
.../package/ebuild/_config/LocationsManager.py | 37 +-
pym/portage/package/ebuild/_config/MaskManager.py | 12 +-
pym/portage/package/ebuild/_config/UseManager.py | 112 +-
.../package/ebuild/_config/special_env_vars.py | 6 +-
pym/portage/package/ebuild/config.py | 35 +-
pym/portage/package/ebuild/doebuild.py | 165 ++-
pym/portage/package/ebuild/fetch.py | 7 +-
pym/portage/{emaint => }/progress.py | 0
pym/portage/repository/config.py | 121 ++-
pym/portage/sync/__init__.py | 38 +
pym/portage/sync/config_checks.py | 72 ++
pym/portage/sync/controller.py | 321 ++++++
.../sync/getaddrinfo_validate.py | 0
pym/{repoman => portage/sync/modules}/__init__.py | 0
pym/portage/sync/modules/cvs/__init__.py | 45 +
pym/portage/sync/modules/cvs/cvs.py | 67 ++
pym/portage/sync/modules/git/__init__.py | 55 +
pym/portage/sync/modules/git/git.py | 86 ++
pym/portage/sync/modules/rsync/__init__.py | 28 +
pym/portage/sync/modules/rsync/rsync.py | 543 ++++++++++
pym/portage/sync/modules/svn/__init__.py | 31 +
pym/portage/sync/modules/svn/svn.py | 89 ++
pym/portage/sync/modules/webrsync/__init__.py | 49 +
pym/portage/sync/modules/webrsync/webrsync.py | 66 ++
.../sync/old_tree_timestamp.py | 0
pym/portage/sync/syncbase.py | 136 +++
pym/portage/tests/dbapi/test_fakedbapi.py | 11 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 18 +-
pym/portage/tests/glsa/test_security_set.py | 5 +-
pym/portage/tests/lint/metadata.py | 11 +
pym/portage/tests/lint/test_compile_modules.py | 13 +
pym/portage/tests/resolver/ResolverPlayground.py | 11 +-
.../tests/resolver/soname}/__init__.py | 2 +-
.../tests/resolver/soname/__test__.py} | 2 +-
.../tests/resolver/soname/test_autounmask.py | 103 ++
pym/portage/tests/resolver/soname/test_depclean.py | 61 ++
.../tests/resolver/soname/test_downgrade.py | 240 +++++
.../tests/resolver/soname/test_or_choices.py | 92 ++
.../tests/resolver/soname/test_reinstall.py | 87 ++
.../tests/resolver/soname/test_skip_update.py | 86 ++
.../soname/test_slot_conflict_reinstall.py | 342 ++++++
.../resolver/soname/test_slot_conflict_update.py | 117 +++
.../tests/resolver/soname/test_soname_provided.py | 78 ++
.../tests/resolver/soname/test_unsatisfiable.py | 71 ++
.../tests/resolver/soname/test_unsatisfied.py | 87 ++
pym/portage/tests/resolver/test_backtracking.py | 9 +-
pym/portage/tests/resolver/test_changed_deps.py | 120 +++
pym/portage/tests/resolver/test_or_choices.py | 80 +-
pym/portage/tests/resolver/test_package_tracker.py | 4 +-
.../tests/resolver/test_profile_default_eapi.py | 126 +++
.../tests/resolver/test_profile_package_set.py | 123 +++
.../resolver => portage/tests/sync}/__init__.py | 2 +-
pym/portage/tests/sync/test_sync_local.py | 189 ++++
pym/portage/util/__init__.py | 57 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 61 +-
pym/portage/util/_dyn_libs/NeededEntry.py | 82 ++
pym/portage/util/_dyn_libs/soname_deps.py | 138 +++
pym/portage/util/compression_probe.py | 79 ++
pym/portage/util/cpuinfo.py | 18 +
.../resolver => portage/util/elf}/__init__.py | 2 +-
pym/portage/util/elf/constants.py | 45 +
pym/portage/util/elf/header.py | 65 ++
.../resolver => portage/util/endian}/__init__.py | 2 +-
pym/portage/util/endian/decode.py | 48 +
pym/portage/util/iterators/MultiIterGroupBy.py | 94 ++
.../util/iterators}/__init__.py | 2 +-
pym/portage/util/socks5.py | 81 ++
pym/repoman/check_missingslot.py | 31 +
pym/repoman/utilities.py | 7 +-
setup.py | 4 +-
148 files changed, 8855 insertions(+), 1847 deletions(-)
diff --cc pym/_emerge/actions.py
index 1385d34,b667537..614144a
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -3139,147 -2301,8 +2301,8 @@@ def getportageversion(portdir, _unused
unameout=platform.release()+" "+platform.machine()
return "Portage %s (%s, %s, %s, %s, %s)" % \
- (portage.VERSION, pythonver, profilever, gccver, ",".join(libcver), unameout)
+ (portage.VERSION + "-multilib", pythonver, profilever, gccver, ",".join(libcver), unameout)
- def git_sync_timestamps(portdb, portdir):
- """
- Since git doesn't preserve timestamps, synchronize timestamps between
- entries and ebuilds/eclasses. Assume the cache has the correct timestamp
- for a given file as long as the file in the working tree is not modified
- (relative to HEAD).
- """
-
- cache_db = portdb._pregen_auxdb.get(portdir)
-
- try:
- if cache_db is None:
- # portdbapi does not populate _pregen_auxdb
- # when FEATURES=metadata-transfer is enabled
- cache_db = portdb._create_pregen_cache(portdir)
- except CacheError as e:
- writemsg_level("!!! Unable to instantiate cache: %s\n" % (e,),
- level=logging.ERROR, noiselevel=-1)
- return 1
-
- if cache_db is None:
- return os.EX_OK
-
- if cache_db.validation_chf != 'mtime':
- # newer formats like md5-dict do not require mtime sync
- return os.EX_OK
-
- writemsg_level(">>> Synchronizing timestamps...\n")
-
- ec_dir = os.path.join(portdir, "eclass")
- try:
- ec_names = set(f[:-7] for f in os.listdir(ec_dir) \
- if f.endswith(".eclass"))
- except OSError as e:
- writemsg_level("!!! Unable to list eclasses: %s\n" % (e,),
- level=logging.ERROR, noiselevel=-1)
- return 1
-
- args = [portage.const.BASH_BINARY, "-c",
- "cd %s && git diff-index --name-only --diff-filter=M HEAD" % \
- portage._shell_quote(portdir)]
- proc = subprocess.Popen(args, stdout=subprocess.PIPE)
- modified_files = set(_unicode_decode(l).rstrip("\n") for l in proc.stdout)
- rval = proc.wait()
- proc.stdout.close()
- if rval != os.EX_OK:
- return rval
-
- modified_eclasses = set(ec for ec in ec_names \
- if os.path.join("eclass", ec + ".eclass") in modified_files)
-
- updated_ec_mtimes = {}
-
- for cpv in cache_db:
- cpv_split = portage.catpkgsplit(cpv)
- if cpv_split is None:
- writemsg_level("!!! Invalid cache entry: %s\n" % (cpv,),
- level=logging.ERROR, noiselevel=-1)
- continue
-
- cat, pn, ver, rev = cpv_split
- cat, pf = portage.catsplit(cpv)
- relative_eb_path = os.path.join(cat, pn, pf + ".ebuild")
- if relative_eb_path in modified_files:
- continue
-
- try:
- cache_entry = cache_db[cpv]
- eb_mtime = cache_entry.get("_mtime_")
- ec_mtimes = cache_entry.get("_eclasses_")
- except KeyError:
- writemsg_level("!!! Missing cache entry: %s\n" % (cpv,),
- level=logging.ERROR, noiselevel=-1)
- continue
- except CacheError as e:
- writemsg_level("!!! Unable to access cache entry: %s %s\n" % \
- (cpv, e), level=logging.ERROR, noiselevel=-1)
- continue
-
- if eb_mtime is None:
- writemsg_level("!!! Missing ebuild mtime: %s\n" % (cpv,),
- level=logging.ERROR, noiselevel=-1)
- continue
-
- try:
- eb_mtime = long(eb_mtime)
- except ValueError:
- writemsg_level("!!! Invalid ebuild mtime: %s %s\n" % \
- (cpv, eb_mtime), level=logging.ERROR, noiselevel=-1)
- continue
-
- if ec_mtimes is None:
- writemsg_level("!!! Missing eclass mtimes: %s\n" % (cpv,),
- level=logging.ERROR, noiselevel=-1)
- continue
-
- if modified_eclasses.intersection(ec_mtimes):
- continue
-
- missing_eclasses = set(ec_mtimes).difference(ec_names)
- if missing_eclasses:
- writemsg_level("!!! Non-existent eclass(es): %s %s\n" % \
- (cpv, sorted(missing_eclasses)), level=logging.ERROR,
- noiselevel=-1)
- continue
-
- eb_path = os.path.join(portdir, relative_eb_path)
- try:
- current_eb_mtime = os.stat(eb_path)
- except OSError:
- writemsg_level("!!! Missing ebuild: %s\n" % \
- (cpv,), level=logging.ERROR, noiselevel=-1)
- continue
-
- inconsistent = False
- for ec, (ec_path, ec_mtime) in ec_mtimes.items():
- updated_mtime = updated_ec_mtimes.get(ec)
- if updated_mtime is not None and updated_mtime != ec_mtime:
- writemsg_level("!!! Inconsistent eclass mtime: %s %s\n" % \
- (cpv, ec), level=logging.ERROR, noiselevel=-1)
- inconsistent = True
- break
-
- if inconsistent:
- continue
-
- if current_eb_mtime != eb_mtime:
- os.utime(eb_path, (eb_mtime, eb_mtime))
-
- for ec, (ec_path, ec_mtime) in ec_mtimes.items():
- if ec in updated_ec_mtimes:
- continue
- ec_path = os.path.join(ec_dir, ec + ".eclass")
- current_mtime = os.stat(ec_path)[stat.ST_MTIME]
- if current_mtime != ec_mtime:
- os.utime(ec_path, (ec_mtime, ec_mtime))
- updated_ec_mtimes[ec] = ec_mtime
-
- return os.EX_OK
class _emerge_config(SlotObject):
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2015-10-04 11:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2015-10-04 11:38 UTC (permalink / raw
To: gentoo-commits
commit: 80edd8061fe4571eb8749bba1f3c452ac0a22042
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 4 11:35:31 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 4 11:35:31 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=80edd806
Merge tag 'v2.2.20' into multilib
Release 2.2.20
NEWS | 6 +
RELEASE-NOTES | 11 +
bin/ebuild-helpers/doconfd | 5 +-
bin/ebuild-helpers/dodoc | 5 +-
bin/ebuild-helpers/doenvd | 5 +-
bin/ebuild-helpers/doheader | 5 +-
bin/ebuild-helpers/doinitd | 5 +-
bin/ebuild-helpers/dolib.a | 3 +-
bin/ebuild-helpers/dolib.so | 3 +-
bin/egencache | 17 +-
bin/repoman | 9 +-
cnf/make.conf.example | 6 +-
man/make.conf.5 | 4 +-
man/repoman.1 | 5 +-
pym/portage/dbapi/bintree.py | 7 +-
pym/portage/repository/config.py | 12 ++
pym/portage/sync/modules/rsync/rsync.py | 13 +-
pym/portage/sync/modules/squashdelta/README | 124 -----------
pym/portage/sync/modules/squashdelta/__init__.py | 37 ----
.../sync/modules/squashdelta/squashdelta.py | 237 ---------------------
setup.py | 2 +-
21 files changed, 81 insertions(+), 440 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2015-10-04 11:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2015-10-04 11:38 UTC (permalink / raw
To: gentoo-commits
commit: b0547d42cce2be3442cef58316e95684d64b471e
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 4 11:35:51 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 4 11:35:51 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=b0547d42
Merge tag 'v2.2.20.1' into multilib
New version
bin/egencache | 2 --
bin/repoman | 9 +++++++--
cnf/sets/portage.conf | 2 +-
man/egencache.1 | 2 +-
man/emaint.1 | 4 ++--
man/make.conf.5 | 44 ++++++++++++++++++++++++++++++++++++--------
man/repoman.1 | 4 ++--
pym/portage/const.py | 1 +
pym/repoman/checks.py | 7 +++----
pym/repoman/errors.py | 2 +-
pym/repoman/utilities.py | 7 +++++--
setup.py | 2 +-
12 files changed, 60 insertions(+), 26 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2015-10-04 11:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2015-10-04 11:38 UTC (permalink / raw
To: gentoo-commits
commit: 60c36c144d304311433dcd19662cc2cc2181c2a7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 4 11:35:08 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 4 11:35:08 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=60c36c14
Merge v2.2.19
NEWS | 9 +
RELEASE-NOTES | 50 +-
bin/dispatch-conf | 9 +-
bin/ebuild-helpers/bsd/sed | 4 +-
bin/ebuild-helpers/emake | 28 +-
bin/ebuild-helpers/portageq | 4 +-
bin/ebuild-helpers/unprivileged/chown | 4 +-
bin/ebuild-helpers/xattr/install | 14 +-
bin/ebuild.sh | 10 +-
bin/emerge-webrsync | 4 +-
bin/install-qa-check.d/10executable-issues | 12 +-
bin/install-qa-check.d/90gcc-warnings | 2 +-
bin/misc-functions.sh | 15 +-
bin/phase-functions.sh | 12 +-
bin/phase-helpers.sh | 2 +-
bin/portageq | 18 +-
bin/quickpkg | 1 -
bin/repoman | 58 +-
cnf/dispatch-conf.conf | 2 +-
cnf/make.globals | 6 +-
cnf/repos.conf | 4 +
man/ebuild.5 | 22 +-
man/make.conf.5 | 31 +
man/portage.5 | 8 +-
pym/_emerge/Binpkg.py | 33 +-
pym/_emerge/BinpkgExtractorAsync.py | 5 +-
pym/_emerge/BinpkgFetcher.py | 13 +-
pym/_emerge/BinpkgPrefetcher.py | 2 +-
pym/_emerge/BinpkgVerifier.py | 6 +-
pym/_emerge/EbuildBinpkg.py | 9 +-
pym/_emerge/EbuildBuild.py | 36 +-
pym/_emerge/EbuildMerge.py | 3 +-
pym/_emerge/JobStatusDisplay.py | 4 +-
pym/_emerge/Package.py | 67 +-
pym/_emerge/PackageMerge.py | 9 +-
pym/_emerge/Scheduler.py | 26 +-
pym/_emerge/actions.py | 5 +-
pym/_emerge/clear_caches.py | 1 -
pym/_emerge/depgraph.py | 16 +-
pym/_emerge/is_valid_package_atom.py | 5 +-
pym/_emerge/resolver/output.py | 21 +-
pym/_emerge/search.py | 24 +-
pym/portage/_emirrordist/Config.py | 6 +-
pym/portage/_emirrordist/MirrorDistTask.py | 4 +-
pym/portage/_sets/ProfilePackageSet.py | 3 +-
pym/portage/_sets/files.py | 5 +-
pym/portage/_sets/profiles.py | 3 +-
pym/portage/cache/index/pkg_desc_index.py | 1 +
pym/portage/checksum.py | 2 +-
pym/portage/const.py | 5 +
pym/portage/dbapi/_MergeProcess.py | 9 +-
pym/portage/dbapi/_VdbMetadataDelta.py | 25 +-
pym/portage/dbapi/__init__.py | 10 +-
pym/portage/dbapi/bintree.py | 851 +++++++++++----------
pym/portage/dbapi/vartree.py | 63 +-
pym/portage/dbapi/virtual.py | 113 ++-
pym/portage/dep/__init__.py | 38 +-
pym/portage/dispatch_conf.py | 101 ++-
pym/portage/emaint/modules/binhost/binhost.py | 47 +-
pym/portage/output.py | 4 +-
.../package/ebuild/_config/KeywordsManager.py | 3 +-
.../package/ebuild/_config/LocationsManager.py | 8 +-
pym/portage/package/ebuild/_config/MaskManager.py | 21 +-
pym/portage/package/ebuild/_config/UseManager.py | 22 +-
pym/portage/package/ebuild/config.py | 15 +-
pym/portage/package/ebuild/doebuild.py | 81 +-
pym/portage/package/ebuild/fetch.py | 7 +-
pym/portage/repository/config.py | 4 +-
pym/portage/sync/controller.py | 9 +-
pym/portage/sync/modules/squashdelta/README | 124 +++
pym/portage/sync/modules/squashdelta/__init__.py | 37 +
.../sync/modules/squashdelta/squashdelta.py | 237 ++++++
pym/portage/sync/modules/webrsync/__init__.py | 4 +-
pym/portage/sync/modules/webrsync/webrsync.py | 4 +
pym/portage/tests/dep/test_isvalidatom.py | 8 +-
pym/portage/tests/resolver/ResolverPlayground.py | 25 +-
.../resolver/binpkg_multi_instance}/__init__.py | 0
.../{soname => binpkg_multi_instance}/__test__.py | 0
.../test_build_id_profile_format.py | 134 ++++
.../binpkg_multi_instance/test_rebuilt_binaries.py | 101 +++
pym/portage/util/__init__.py | 35 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 3 +-
pym/portage/util/formatter.py | 69 ++
pym/portage/util/writeable_check.py | 24 +-
pym/portage/versions.py | 28 +-
pym/repoman/utilities.py | 8 +-
setup.py | 2 +-
87 files changed, 2192 insertions(+), 725 deletions(-)
diff --cc bin/phase-functions.sh
index 7537ddc,7bf4d63..6f98569
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -549,21 -489,6 +549,13 @@@ __dyn_test()
elif [[ ${EBUILD_FORCE_TEST} != 1 ]] && ! has test ${FEATURES} ; then
__vecho ">>> Test phase [not enabled]: ${CATEGORY}/${PF}"
else
- # If ${EBUILD_FORCE_TEST} == 1 and USE came from ${T}/environment
- # then it might not have USE=test like it's supposed to here.
- if [[ ${EBUILD_FORCE_TEST} == 1 && test =~ ${PORTAGE_IUSE} ]] && \
- ! has test ${USE} ; then
- export USE="${USE} test"
- fi
-
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if [ ${PORTAGE_BUILDDIR}/.tested.${LOOP_ABI} -nt "${WORKDIR}" ]; then
+ echo ">>> It appears that ${PN} is already tested for ABI=${LOOP_ABI}; skipping."
+ echo ">>> Remove '$PORTAGE_BUILDDIR/.tested.${LOOP_ABI}' to force testing."
+ continue
+ fi
+ fi
-
local save_sp=${SANDBOX_PREDICT}
addpredict /
__ebuild_phase pre_src_test
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2015-10-04 11:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2015-10-04 11:38 UTC (permalink / raw
To: gentoo-commits
commit: d41a3639f9e8adb6684d3800adf1b1b2ae40f843
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 4 11:37:13 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 4 11:37:13 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d41a3639
Merge v2.2.21
.travis.yml | 2 -
DEVELOPING | 10 +-
README | 2 +-
RELEASE-NOTES | 39 ++++
bin/ebuild-helpers/die | 2 +-
bin/ebuild-helpers/dobin | 2 +-
bin/ebuild-helpers/doconfd | 2 +-
bin/ebuild-helpers/dodir | 2 +-
bin/ebuild-helpers/dodoc | 2 +-
bin/ebuild-helpers/doenvd | 2 +-
bin/ebuild-helpers/doexe | 2 +-
bin/ebuild-helpers/dohard | 2 +-
bin/ebuild-helpers/doheader | 2 +-
bin/ebuild-helpers/dohtml | 6 +-
bin/ebuild-helpers/doinfo | 2 +-
bin/ebuild-helpers/doinitd | 2 +-
bin/ebuild-helpers/doins | 2 +-
bin/ebuild-helpers/dolib | 2 +-
bin/ebuild-helpers/doman | 2 +-
bin/ebuild-helpers/domo | 2 +-
bin/ebuild-helpers/dosbin | 2 +-
bin/ebuild-helpers/dosed | 2 +-
bin/ebuild-helpers/dosym | 2 +-
bin/ebuild-helpers/ecompress | 2 +-
bin/ebuild-helpers/ecompressdir | 2 +-
bin/ebuild-helpers/elog | 2 +-
bin/ebuild-helpers/emake | 2 +-
bin/ebuild-helpers/fowners | 2 +-
bin/ebuild-helpers/fperms | 2 +-
bin/ebuild-helpers/keepdir | 2 +-
bin/ebuild-helpers/newins | 2 +-
bin/ebuild-helpers/portageq | 4 +-
bin/ebuild-helpers/prepall | 2 +-
bin/ebuild-helpers/prepalldocs | 2 +-
bin/ebuild-helpers/prepallinfo | 2 +-
bin/ebuild-helpers/prepallman | 2 +-
bin/ebuild-helpers/prepallstrip | 2 +-
bin/ebuild-helpers/prepinfo | 2 +-
bin/ebuild-helpers/prepman | 2 +-
bin/ebuild-helpers/prepstrip | 3 +-
bin/ebuild-helpers/unprivileged/chown | 4 +-
bin/ebuild-helpers/xattr/install | 2 -
bin/ebuild-ipc | 4 +-
bin/ebuild.sh | 3 -
bin/egencache | 20 +++
bin/helper-functions.sh | 2 +-
bin/install-qa-check.d/10executable-issues | 248 +++++++++++++-------------
bin/install-qa-check.d/80libraries | 130 +++++++-------
bin/isolated-functions.sh | 3 +-
bin/misc-functions.sh | 18 +-
bin/phase-helpers.sh | 4 +-
bin/quickpkg | 18 +-
bin/xattr-helper.py | 11 +-
doc/qa.docbook | 3 +-
man/portage.5 | 11 ++
man/repoman.1 | 5 +-
pym/_emerge/AbstractEbuildProcess.py | 21 ++-
pym/_emerge/BlockerDB.py | 5 +-
pym/_emerge/PackageVirtualDbapi.py | 4 +-
pym/_emerge/Scheduler.py | 10 +-
pym/_emerge/actions.py | 7 +-
pym/_emerge/depgraph.py | 55 ++++--
pym/_emerge/main.py | 19 +-
pym/_emerge/resolver/circular_dependency.py | 21 ++-
pym/_emerge/resolver/slot_collision.py | 11 +-
pym/_emerge/search.py | 3 +-
pym/portage/dbapi/IndexedPortdb.py | 4 +-
pym/portage/dbapi/IndexedVardb.py | 6 +-
pym/portage/dbapi/__init__.py | 4 +-
pym/portage/dbapi/bintree.py | 4 +-
pym/portage/dbapi/porttree.py | 6 +-
pym/portage/dbapi/vartree.py | 22 ++-
pym/portage/dbapi/virtual.py | 4 +-
pym/portage/dep/__init__.py | 7 +-
pym/portage/dep/soname/multilib_category.py | 2 +-
pym/portage/emaint/modules/sync/sync.py | 148 +++++++++++++--
pym/portage/manifest.py | 35 ++++
pym/portage/package/ebuild/config.py | 3 +-
pym/portage/proxy/lazyimport.py | 17 +-
pym/portage/repository/config.py | 44 +++--
pym/portage/sync/__init__.py | 20 ++-
pym/portage/sync/controller.py | 31 +++-
pym/portage/sync/modules/cvs/__init__.py | 3 +-
pym/portage/sync/modules/cvs/cvs.py | 2 +-
pym/portage/sync/modules/git/__init__.py | 1 +
pym/portage/sync/modules/git/git.py | 20 ++-
pym/portage/sync/modules/rsync/__init__.py | 4 +
pym/portage/sync/modules/rsync/rsync.py | 17 +-
pym/portage/sync/modules/svn/__init__.py | 1 +
pym/portage/sync/modules/webrsync/__init__.py | 1 +
pym/portage/sync/syncbase.py | 2 +-
pym/portage/tests/dep/test_match_from_list.py | 21 ++-
pym/portage/tests/sync/test_sync_local.py | 79 +++++++-
pym/portage/tests/util/test_xattr.py | 178 ++++++++++++++++++
pym/portage/util/_async/AsyncFunction.py | 67 +++++++
pym/portage/util/_dyn_libs/LinkageMapELF.py | 2 +-
pym/portage/util/_xattr.py | 228 +++++++++++++++++++++++
pym/portage/util/movefile.py | 102 +++--------
runtests | 156 ++++++++++++++++
runtests.sh | 109 -----------
setup.py | 2 +-
101 files changed, 1538 insertions(+), 588 deletions(-)
diff --cc bin/misc-functions.sh
index 5038ff1,c2ff70a..84f01c1
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -14,10 -14,9 +14,10 @@@
MISC_FUNCTIONS_ARGS="$@"
shift $#
- source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}/ebuild.sh"
+ source "${PORTAGE_BIN_PATH}/ebuild.sh" || exit 1
install_symlink_html_docs() {
+ [[ " ${FEATURES} " == *" force-prefix "* ]] || \
if ! ___eapi_has_prefix_variables; then
local ED=${D}
fi
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2015-10-04 11:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2015-10-04 11:38 UTC (permalink / raw
To: gentoo-commits
commit: 0c879b950b70c54cd672ddc0541744d7785ee04b
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 4 11:37:24 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Oct 4 11:37:24 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0c879b95
Merge tag 'v2.2.22' into multilib
New Release
NEWS | 6 +
RELEASE-NOTES | 11 +
bin/egencache | 4 +-
bin/repoman | 3164 +-------------------
man/ebuild.5 | 9 +-
pym/portage/dbapi/virtual.py | 8 +-
pym/portage/repository/config.py | 2 +-
pym/portage/sync/controller.py | 8 +-
pym/portage/tests/repoman/test_simple.py | 6 +-
pym/repoman/_portage.py | 25 +
pym/repoman/_subprocess.py | 82 +
pym/repoman/_xml.py | 101 +
pym/repoman/actions.py | 835 ++++++
pym/repoman/argparser.py | 221 ++
pym/repoman/check_missingslot.py | 6 +-
pym/repoman/{ => checks}/__init__.py | 0
pym/repoman/{ => checks/directories}/__init__.py | 0
pym/repoman/checks/directories/files.py | 80 +
pym/repoman/{ => checks/ebuilds}/__init__.py | 0
pym/repoman/{ => checks/ebuilds}/checks.py | 188 +-
.../{ => checks/ebuilds/eclasses}/__init__.py | 0
pym/repoman/checks/ebuilds/eclasses/live.py | 39 +
pym/repoman/checks/ebuilds/eclasses/ruby.py | 32 +
pym/repoman/checks/ebuilds/errors.py | 48 +
pym/repoman/checks/ebuilds/fetches.py | 134 +
pym/repoman/checks/ebuilds/isebuild.py | 70 +
pym/repoman/checks/ebuilds/keywords.py | 121 +
pym/repoman/checks/ebuilds/manifests.py | 101 +
pym/repoman/checks/ebuilds/misc.py | 54 +
pym/repoman/checks/ebuilds/pkgmetadata.py | 174 ++
pym/repoman/checks/ebuilds/thirdpartymirrors.py | 38 +
pym/repoman/checks/ebuilds/use_flags.py | 89 +
.../{ => checks/ebuilds/variables}/__init__.py | 0
.../checks/ebuilds/variables/description.py | 32 +
pym/repoman/checks/ebuilds/variables/eapi.py | 44 +
pym/repoman/checks/ebuilds/variables/license.py | 47 +
pym/repoman/checks/ebuilds/variables/restrict.py | 41 +
pym/repoman/{ => checks/herds}/__init__.py | 0
pym/repoman/{ => checks/herds}/herdbase.py | 26 +-
pym/repoman/checks/herds/metadata.py | 25 +
pym/repoman/copyrights.py | 119 +
pym/repoman/ebuild.py | 28 +
pym/repoman/errors.py | 42 +-
pym/repoman/gpg.py | 81 +
pym/repoman/main.py | 168 ++
pym/repoman/metadata.py | 150 +
pym/repoman/{ => modules}/__init__.py | 0
pym/repoman/{ => modules/commit}/__init__.py | 0
pym/repoman/modules/commit/repochecks.py | 34 +
pym/repoman/{ => modules/fix}/__init__.py | 0
pym/repoman/{ => modules/full}/__init__.py | 0
pym/repoman/{ => modules/manifest}/__init__.py | 0
pym/repoman/{ => modules/scan}/__init__.py | 0
pym/repoman/profile.py | 86 +
pym/repoman/qa_data.py | 438 +++
pym/repoman/qa_tracker.py | 45 +
pym/repoman/repos.py | 306 ++
pym/repoman/scan.py | 170 ++
pym/repoman/scanner.py | 717 +++++
pym/repoman/utilities.py | 568 +---
pym/repoman/{ => vcs}/__init__.py | 0
pym/repoman/vcs/vcs.py | 276 ++
pym/repoman/vcs/vcsstatus.py | 113 +
setup.py | 2 +-
64 files changed, 5492 insertions(+), 3722 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2016-02-28 12:37 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2016-02-28 12:37 UTC (permalink / raw
To: gentoo-commits
commit: 4b760f60a70b9af4dce6c894226ebe72485f5495
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 28 12:27:00 2016 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 28 12:27:00 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4b760f60
merge v2.2.25
NEWS | 5 ++
RELEASE-NOTES | 13 +++
bin/eapi.sh | 8 ++
bin/ebuild.sh | 43 ++++++++++
bin/egencache | 125 ++++++++++++++++-----------
bin/install-qa-check.d/60openrc | 2 +-
bin/phase-helpers.sh | 78 ++++++++++++-----
bin/save-ebuild-env.sh | 9 +-
man/portage.5 | 7 +-
misc/emerge-delta-webrsync | 2 +-
pym/_emerge/actions.py | 3 +
pym/_emerge/main.py | 15 +++-
pym/portage/const.py | 2 +-
pym/portage/eapi.py | 11 ++-
pym/portage/emaint/modules/sync/sync.py | 57 +++++++++++--
pym/portage/package/ebuild/config.py | 16 ++++
pym/portage/repository/config.py | 6 +-
pym/portage/sync/controller.py | 18 ++--
pym/portage/sync/modules/git/git.py | 11 ++-
pym/portage/sync/modules/rsync/rsync.py | 17 ++--
pym/portage/util/_async/AsyncFunction.py | 5 +-
pym/portage/util/locale.py | 141 +++++++++++++++++++++++++++++++
pym/repoman/checks/ebuilds/checks.py | 7 +-
pym/repoman/vcs/vcs.py | 20 +++--
setup.py | 2 +-
25 files changed, 513 insertions(+), 110 deletions(-)
diff --cc bin/ebuild.sh
index 9d83477,4319a17..0dd971b
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@@ -6,12 -6,50 +6,54 @@@
# Make sure it's before everything so we don't mess aliases that follow.
unalias -a
+ # Make sure this isn't exported to scripts we execute.
+ unset BASH_COMPAT
+
source "${PORTAGE_BIN_PATH}/isolated-functions.sh" || exit 1
+if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ source "${PORTAGE_BIN_PATH}/auto-multilib.sh" || exit 1
+fi
+
+ # Set up the bash version compatibility level. This does not disable
+ # features when running with a newer version, but makes it so that when
+ # bash changes behavior in an incompatible way, the older behavior is
+ # used instead.
+ __check_bash_version() {
+ # Figure out which min version of bash we require.
+ local maj min
+ if ___eapi_bash_3_2 ; then
+ maj=3 min=2
+ elif ___eapi_bash_4_2 ; then
+ maj=4 min=2
+ else
+ return
+ fi
+
+ # Make sure the active bash is sane.
+ if [[ ${BASH_VERSINFO[0]} -lt ${maj} ]] ||
+ [[ ${BASH_VERSINFO[0]} -eq ${maj} && ${BASH_VERSINFO[1]} -lt ${min} ]] ; then
+ die ">=bash-${maj}.${min} is required"
+ fi
+
+ # Set the compat level in case things change with newer ones. We must not
+ # export this into the env otherwise we might break other shell scripts we
+ # execute (e.g. ones in /usr/bin).
+ BASH_COMPAT="${maj}.${min}"
+
+ # The variable above is new to bash-4.3. For older versions, we have to use
+ # a compat knob. Further, the compat knob only exists with older versions
+ # (e.g. bash-4.3 has compat42 but not compat43). This means we only need to
+ # turn the knob with older EAPIs, and only when running newer bash versions:
+ # there is no bash-3.3 (it went 3.2 to 4.0), and when requiring bash-4.2, the
+ # var works with bash-4.3+, and you don't need to set compat to 4.2 when you
+ # are already running 4.2.
+ if ___eapi_bash_3_2 && [[ ${BASH_VERSINFO[0]} -gt 3 ]] ; then
+ shopt -s compat32
+ fi
+ }
+ __check_bash_version
+
if [[ $EBUILD_PHASE != depend ]] ; then
source "${PORTAGE_BIN_PATH}/phase-functions.sh" || die
source "${PORTAGE_BIN_PATH}/save-ebuild-env.sh" || die
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2016-02-28 12:37 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2016-02-28 12:37 UTC (permalink / raw
To: gentoo-commits
commit: fa253ca6f939b075c380e6c208a3283bcbaab0c5
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 28 12:25:01 2016 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 28 12:25:01 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=fa253ca6
Merge tag 'v2.2.24' into multilib
Version 2.2.24
RELEASE-NOTES | 19 ++++++
bin/binhost-snapshot | 4 +-
bin/cgroup-release-agent | 2 +-
bin/chpathtool.py | 45 ++++---------
bin/ebuild | 4 +-
bin/egencache | 33 +++++++---
bin/fixpackages | 4 +-
bin/glsa-check | 4 +-
bin/install.py | 4 +-
bin/portageq | 6 +-
bin/quickpkg | 4 +-
bin/xattr-helper.py | 4 +-
bin/xpak-helper.py | 4 +-
man/egencache.1 | 10 +++
man/emerge.1 | 7 ++
pym/_emerge/AbstractEbuildProcess.py | 18 ++++++
pym/_emerge/Binpkg.py | 24 +++----
pym/_emerge/BinpkgFetcher.py | 2 +-
pym/_emerge/EbuildBuild.py | 21 +++---
pym/_emerge/SpawnProcess.py | 4 +-
pym/_emerge/actions.py | 74 ++++++++++++++++------
pym/_emerge/main.py | 4 +-
pym/portage/_emirrordist/main.py | 4 +-
pym/portage/dbapi/vartree.py | 8 ++-
pym/portage/emaint/main.py | 6 +-
.../package/ebuild/_config/KeywordsManager.py | 35 ++++------
pym/portage/repository/config.py | 7 +-
pym/portage/sync/controller.py | 1 -
pym/portage/tests/__init__.py | 4 +-
pym/portage/tests/resolver/test_depclean.py | 10 ++-
pym/portage/util/_argparse.py | 42 ------------
pym/repoman/argparser.py | 4 +-
pym/repoman/checks/ebuilds/checks.py | 5 +-
pym/repoman/qa_data.py | 3 +-
pym/repoman/scanner.py | 10 +++
runtests | 48 +++++++++-----
setup.py | 21 +++---
37 files changed, 291 insertions(+), 218 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2016-02-28 12:37 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2016-02-28 12:37 UTC (permalink / raw
To: gentoo-commits
commit: 3a63f58d0993f66975cd324eb85f4a2340d4f7c3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 28 12:24:26 2016 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 28 12:24:26 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=3a63f58d
Merge tag 'v2.2.23' into multilib
New release
.travis.yml | 1 +
README | 10 +--
RELEASE-NOTES | 14 ++++
bin/cgroup-release-agent | 2 +
bin/{ebuild-ipc => chmod-lite} | 6 +-
bin/chmod-lite.py | 30 ++++++++
bin/dohtml.py | 47 +++++++++---
bin/phase-helpers.sh | 4 +-
man/make.conf.5 | 3 +
pym/_emerge/AbstractEbuildProcess.py | 14 ++--
pym/_emerge/Scheduler.py | 30 ++++----
pym/portage/checksum.py | 4 +-
pym/portage/const.py | 1 +
pym/portage/data.py | 2 +-
pym/portage/dbapi/__init__.py | 23 +++---
pym/portage/dbapi/porttree.py | 18 +++--
pym/portage/package/ebuild/doebuild.py | 14 ++--
pym/portage/sync/controller.py | 39 +++++++++-
pym/portage/util/__init__.py | 97 ++++++++++++++-----------
pym/repoman/_subprocess.py | 1 +
pym/repoman/_xml.py | 1 +
pym/repoman/actions.py | 3 +-
pym/repoman/argparser.py | 4 +
pym/repoman/check_missingslot.py | 1 +
pym/repoman/checks/directories/files.py | 1 +
pym/repoman/checks/ebuilds/checks.py | 1 +
pym/repoman/checks/ebuilds/errors.py | 1 +
pym/repoman/checks/ebuilds/fetches.py | 1 +
pym/repoman/checks/ebuilds/isebuild.py | 1 +
pym/repoman/checks/ebuilds/keywords.py | 1 +
pym/repoman/checks/ebuilds/manifests.py | 1 +
pym/repoman/checks/ebuilds/misc.py | 1 +
pym/repoman/checks/ebuilds/pkgmetadata.py | 1 +
pym/repoman/checks/ebuilds/thirdpartymirrors.py | 1 +
pym/repoman/checks/ebuilds/use_flags.py | 1 +
pym/repoman/checks/herds/metadata.py | 1 +
pym/repoman/copyrights.py | 1 +
pym/repoman/ebuild.py | 1 +
pym/repoman/errors.py | 1 +
pym/repoman/gpg.py | 1 +
pym/repoman/main.py | 1 +
pym/repoman/metadata.py | 1 +
pym/repoman/modules/commit/repochecks.py | 1 +
pym/repoman/profile.py | 1 +
pym/repoman/qa_data.py | 1 +
pym/repoman/repos.py | 3 +-
pym/repoman/scan.py | 4 +-
pym/repoman/scanner.py | 29 ++++++--
pym/repoman/utilities.py | 1 +
pym/repoman/vcs/vcs.py | 1 +
pym/repoman/vcs/vcsstatus.py | 1 +
setup.py | 2 +-
52 files changed, 304 insertions(+), 127 deletions(-)
diff --cc pym/portage/const.py
index 6b03017,6c4f613..20cf40e
--- a/pym/portage/const.py
+++ b/pym/portage/const.py
@@@ -147,9 -146,9 +147,10 @@@ SUPPORTED_FEATURES = frozenset(
"fakeroot",
"fixlafiles",
"force-mirror",
+ "force-multilib",
"force-prefix",
"getbinpkg",
+ "icecream",
"installsources",
"ipc-sandbox",
"keeptemp",
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2016-02-28 12:37 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2016-02-28 12:37 UTC (permalink / raw
To: gentoo-commits
commit: 0cf294d33a466f4a3c537aa82d385ec7f87c7bf3
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Thu Nov 12 19:26:42 2015 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Nov 12 19:26:42 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0cf294d3
Merge branch 'master' of git+ssh://git.gentoo.org/proj/portage
bin/egencache | 70 +++++++++++++++++++-------------
bin/install-qa-check.d/60openrc | 2 +-
bin/save-ebuild-env.sh | 2 +-
man/portage.5 | 7 +++-
misc/emerge-delta-webrsync | 2 +-
pym/portage/emaint/modules/sync/sync.py | 57 ++++++++++++++++++++++----
pym/portage/repository/config.py | 6 ++-
pym/portage/sync/controller.py | 18 +++++---
pym/portage/sync/modules/git/git.py | 11 ++++-
pym/portage/sync/modules/rsync/rsync.py | 17 ++++----
pym/portage/util/_async/AsyncFunction.py | 5 ++-
11 files changed, 139 insertions(+), 58 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2016-02-28 12:37 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2016-02-28 12:37 UTC (permalink / raw
To: gentoo-commits
commit: 58fb9ace0cb1bf49df2ce68b13999d303fa25756
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 28 12:35:46 2016 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 28 12:35:46 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=58fb9ace
merge v2.2.27
NEWS | 6 +++
RELEASE-NOTES | 25 +++++++++
bin/ebuild | 20 ++++---
bin/ebuild.sh | 25 ---------
bin/egencache | 20 +------
bin/misc-functions.sh | 3 +-
bin/phase-functions.sh | 36 +++++++++++++
bin/portageq | 16 ++++--
bin/socks5-server.py | 9 +++-
cnf/make.globals | 2 +-
man/ebuild.5 | 4 +-
man/egencache.1 | 10 +---
man/emerge.1 | 6 +++
man/emirrordist.1 | 10 +---
pym/_emerge/actions.py | 61 ++++++++++++----------
pym/_emerge/depgraph.py | 18 +++++--
pym/_emerge/main.py | 11 ++++
pym/portage/_emirrordist/Config.py | 10 +++-
pym/portage/_emirrordist/main.py | 23 +-------
pym/portage/_sets/__init__.py | 4 ++
pym/portage/cache/anydbm.py | 3 ++
pym/portage/cache/flat_hash.py | 5 ++
pym/portage/cache/sqlite.py | 9 +++-
pym/portage/cache/template.py | 61 +++++++++++++++++-----
pym/portage/dbapi/porttree.py | 20 +++----
pym/portage/dep/dep_check.py | 6 ++-
pym/portage/elog/mod_save.py | 3 +-
pym/portage/emaint/modules/merges/__init__.py | 2 +-
pym/portage/exception.py | 5 +-
pym/portage/manifest.py | 52 +++++++++++++-----
.../package/ebuild/_config/LicenseManager.py | 4 +-
.../package/ebuild/_config/special_env_vars.py | 2 +-
pym/portage/package/ebuild/config.py | 41 ++++++++++-----
pym/portage/package/ebuild/doebuild.py | 27 ++++++----
pym/portage/package/ebuild/fetch.py | 9 ++--
pym/portage/repository/config.py | 21 +++-----
pym/portage/sync/controller.py | 6 +--
pym/portage/tests/dbapi/test_portdb_cache.py | 3 +-
pym/portage/tests/ebuild/test_config.py | 4 +-
pym/portage/tests/ebuild/test_doebuild_fd_pipes.py | 37 ++++++-------
pym/portage/tests/ebuild/test_doebuild_spawn.py | 3 +-
pym/portage/tests/ebuild/test_ipc_daemon.py | 3 +-
pym/portage/tests/emerge/test_config_protect.py | 3 +-
pym/portage/tests/emerge/test_emerge_slot_abi.py | 3 +-
pym/portage/tests/emerge/test_simple.py | 3 +-
pym/portage/tests/repoman/test_simple.py | 3 +-
pym/portage/tests/sync/test_sync_local.py | 3 +-
pym/portage/xml/metadata.py | 3 ++
pym/repoman/_xml.py | 10 ++--
pym/repoman/checks/ebuilds/checks.py | 10 ++++
pym/repoman/checks/ebuilds/pkgmetadata.py | 6 ++-
pym/repoman/qa_data.py | 1 +
pym/repoman/scanner.py | 20 +++++--
pym/repoman/vcs/vcsstatus.py | 2 +-
setup.py | 2 +-
55 files changed, 445 insertions(+), 269 deletions(-)
diff --cc pym/_emerge/actions.py
index 9f2ef29,59626ad..e0c8afd
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -2809,15 -2814,7 +2814,15 @@@ def run_action(emerge_config)
adjust_configs(emerge_config.opts, emerge_config.trees)
apply_priorities(emerge_config.target_config.settings)
+ if 'force-multilib' in emerge_config.target_config.settings.features:
+ if emerge_config.target_config.settings.get("NO_AUTO_FLAG", "") is "":
+ writemsg_level(bad("!!! Failed to find vars from extra profile") + "\n",level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! Please make sure that you did follow the instructions and included the extra profile\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! http://git.overlays.gentoo.org/gitweb/?p=proj/multilib-portage.git;a=blob;f=doc/portage-multilib-instructions\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! has some basic instructions for the setup\n"),level=logging.ERROR, noiselevel=-1)
+ return 1
+
- for fmt in emerge_config.target_config.settings["PORTAGE_BINPKG_FORMAT"].split():
+ for fmt in emerge_config.target_config.settings.get("PORTAGE_BINPKG_FORMAT", "").split():
if not fmt in portage.const.SUPPORTED_BINPKG_FORMATS:
if "--pkg-format" in emerge_config.opts:
problematic="--pkg-format"
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2016-02-28 12:37 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2016-02-28 12:37 UTC (permalink / raw
To: gentoo-commits
commit: 2988e14465a24de9db00f5899239cb739e5de083
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 28 12:32:23 2016 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Feb 28 12:32:23 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=2988e144
merge v2.2.26
RELEASE-NOTES | 12 ++++++
bin/egencache | 6 +--
bin/phase-functions.sh | 13 ++++++-
bin/phase-helpers.sh | 17 +++++----
pym/_emerge/SpawnProcess.py | 37 +++++++++++++++++--
pym/_emerge/depgraph.py | 35 +++++++++++++++++-
pym/portage/repository/config.py | 14 ++-----
pym/portage/sync/controller.py | 7 ++++
pym/portage/sync/modules/cvs/__init__.py | 4 +-
.../tests/resolver/test_autounmask_parent.py | 43 ++++++++++++++++++++++
pym/portage/util/locale.py | 7 ++--
setup.py | 2 +-
12 files changed, 164 insertions(+), 33 deletions(-)
diff --cc bin/phase-functions.sh
index 6f98569,042e242..96ed339
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -222,32 -219,13 +222,38 @@@ __dyn_pretend()
}
__dyn_setup() {
+ if [[ -e $PORTAGE_BUILDDIR/.setuped ]] ; then
+ __vecho ">>> It appears that '$PF' is already setup; skipping."
+ __vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped' to force setup."
- return 0
++ return
++ fi
++
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if ! is_auto-multilib && ! use multilib_abi_"${DEFAULT_ABI}" ; then
+ ewarn
+ ewarn "You disabled all ABIs"
+ ewarn "You should enable at least one ABI"
+ ewarn "Enabling the default ABI now"
+ ewarn
+ fi
fi
+ for LOOP_ABI in $(get_abi_list); do
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ set_abi ${LOOP_ABI}
+ rm -f "${T}"/environment
+ if [[ -e $PORTAGE_BUILDDIR/.setuped.${ABI} ]] ; then
+ __vecho ">>> It appears that '$PF' is already setup; skipping."
+ __vecho ">>> Remove '$PORTAGE_BUILDDIR/.setuped.${ABI}' to force setup."
+ return 0
+ fi
+ fi
__ebuild_phase pre_pkg_setup
__ebuild_phase pkg_setup
+ >> "$PORTAGE_BUILDDIR/.setuped.${ABI}" || \
+ die "Failed to create $PORTAGE_BUILDDIR/.setuped"
+
+ done
+
>> "$PORTAGE_BUILDDIR/.setuped" || \
die "Failed to create $PORTAGE_BUILDDIR/.setuped"
__ebuild_phase post_pkg_setup
@@@ -270,7 -246,7 +276,7 @@@ __dyn_unpack()
>> "$PORTAGE_BUILDDIR/.unpacked" || \
die "Failed to create $PORTAGE_BUILDDIR/.unpacked"
__vecho ">>> Source unpacked in ${WORKDIR}"
-- __ebuild_phase post_src_unpack
++__ebuild_phase post_src_unpack
}
__dyn_clean() {
@@@ -406,11 -372,14 +412,16 @@@ __dyn_prepare()
trap __abort_prepare SIGINT SIGQUIT
__ebuild_phase pre_src_prepare
- __vecho ">>> Preparing source in $PWD ..."
+ __vecho ">>> Preparing source in $PWD$(_get_abi_string) ..."
__ebuild_phase src_prepare
+ done
+
+ # keep path in eapply_user in sync!
+ if ___eapi_has_eapply_user && [[ ! -f ${T}/.portage_user_patches_applied ]]; then
+ die "eapply_user (or default) must be called in src_prepare()!"
+ fi
+
>> "$PORTAGE_BUILDDIR/.prepared" || \
die "Failed to create $PORTAGE_BUILDDIR/.prepared"
__vecho ">>> Source prepared."
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 9:39 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 9:39 UTC (permalink / raw
To: gentoo-commits
commit: f89c3c5cd8d1da1e40d9a94a016b3002df237237
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 09:32:44 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 09:32:44 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=f89c3c5c
Merge tag 'v2.2.28' into multilib
New Release
.travis.yml | 3 +++
RELEASE-NOTES | 20 +++++++++++++++++++
bin/isolated-functions.sh | 11 ++++++-----
bin/misc-functions.sh | 2 +-
bin/phase-functions.sh | 7 +------
bin/phase-helpers.sh | 7 ++++++-
bin/portageq | 33 ++++++++++++++------------------
man/emerge.1 | 3 ++-
man/make.conf.5 | 6 +++---
man/portage.5 | 6 ++++++
pym/_emerge/BinpkgFetcher.py | 7 +++----
pym/_emerge/UserQuery.py | 15 +++++++++++----
pym/_emerge/chk_updated_cfg_files.py | 8 ++++----
pym/_emerge/depgraph.py | 7 +++++--
pym/portage/_legacy_globals.py | 2 +-
pym/portage/dbapi/bintree.py | 2 +-
pym/portage/dbapi/porttree.py | 3 ++-
pym/portage/news.py | 2 +-
pym/portage/package/ebuild/config.py | 4 ++--
pym/portage/package/ebuild/doebuild.py | 2 +-
pym/portage/sync/modules/git/__init__.py | 5 ++++-
pym/portage/sync/modules/git/git.py | 4 ++++
pym/portage/tests/repoman/test_simple.py | 9 +++------
pym/repoman/_xml.py | 2 ++
pym/repoman/actions.py | 29 +++++++++++++++++++---------
pym/repoman/checks/ebuilds/checks.py | 3 ++-
pym/repoman/checks/ebuilds/misc.py | 2 ++
pym/repoman/checks/herds/herdbase.py | 2 +-
pym/repoman/errors.py | 2 ++
pym/repoman/metadata.py | 2 ++
pym/repoman/scanner.py | 7 +++++--
runtests | 4 ++--
setup.py | 2 +-
33 files changed, 143 insertions(+), 80 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 9:50 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 9:50 UTC (permalink / raw
To: gentoo-commits
commit: e69902fbc9c41f0470461561258f596535d9f5c7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 09:48:55 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 09:48:55 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e69902fb
Merge tag 'portage-2.3.0' into multilib
Final release
.gitignore | 2 +
.travis.yml | 13 +-
MANIFEST.in | 1 -
NEWS | 10 +
RELEASE-NOTES | 32 +
bin/dispatch-conf | 15 +-
bin/eapi.sh | 4 -
bin/ebuild.sh | 30 +-
bin/egencache | 17 +-
bin/install-qa-check.d/10executable-issues | 20 +-
bin/install-qa-check.d/60openrc | 8 +-
bin/install-qa-check.d/90gcc-warnings | 10 +-
bin/phase-helpers.sh | 9 +-
bin/portageq | 6 +-
cnf/make.globals | 4 +-
cnf/metadata.dtd | 102 ---
pym/_emerge/EbuildBuild.py | 22 +-
pym/_emerge/MiscFunctionsProcess.py | 3 +-
pym/_emerge/Scheduler.py | 9 +-
pym/_emerge/actions.py | 2 +-
pym/_emerge/depgraph.py | 20 +-
pym/_emerge/resolver/output.py | 5 +-
pym/_emerge/resolver/output_helpers.py | 11 +
pym/portage/__init__.py | 9 -
pym/portage/_sets/__init__.py | 37 +-
pym/portage/const.py | 2 +-
pym/portage/dbapi/bintree.py | 7 +-
pym/portage/dbapi/porttree.py | 4 +-
pym/portage/dbapi/vartree.py | 117 +++-
pym/portage/emaint/modules/binhost/__init__.py | 1 +
pym/portage/emaint/modules/config/__init__.py | 1 +
pym/portage/emaint/modules/logs/__init__.py | 1 +
pym/portage/emaint/modules/merges/__init__.py | 1 +
pym/portage/emaint/modules/move/__init__.py | 2 +
pym/portage/emaint/modules/resume/__init__.py | 1 +
pym/portage/emaint/modules/sync/__init__.py | 1 +
pym/portage/emaint/modules/world/__init__.py | 1 +
pym/portage/localization.py | 6 +-
pym/portage/manifest.py | 17 +-
pym/portage/module.py | 15 +-
pym/portage/news.py | 7 +-
pym/portage/output.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 6 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 5 +-
pym/portage/repository/config.py | 47 +-
pym/portage/sync/modules/cvs/__init__.py | 1 +
pym/portage/sync/modules/cvs/cvs.py | 4 +-
pym/portage/sync/modules/git/__init__.py | 1 +
pym/portage/sync/modules/git/git.py | 4 +-
pym/portage/sync/modules/rsync/__init__.py | 1 +
pym/portage/sync/modules/rsync/rsync.py | 4 +-
pym/portage/sync/modules/svn/__init__.py | 1 +
pym/portage/sync/modules/svn/svn.py | 6 +-
pym/portage/sync/modules/webrsync/__init__.py | 1 +
pym/portage/sync/modules/webrsync/webrsync.py | 2 +-
...bi.py => test_emerge_blocker_file_collision.py} | 101 ++-
pym/portage/tests/emerge/test_simple.py | 2 -
pym/portage/tests/resolver/ResolverPlayground.py | 24 +-
pym/portage/tests/util/test_getconfig.py | 4 +-
pym/portage/util/__init__.py | 6 +-
pym/portage/util/_desktop_entry.py | 25 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 5 +-
pym/portage/util/configparser.py | 76 +++
pym/{repoman => portage/util/futures}/__init__.py | 0
pym/portage/util/futures/extendedfutures.py | 73 ++
pym/portage/util/futures/futures.py | 118 ++++
pym/portage/xml/metadata.py | 59 +-
pym/repoman/_xml.py | 106 ---
pym/repoman/checks/ebuilds/eclasses/live.py | 39 --
pym/repoman/checks/ebuilds/isebuild.py | 71 --
pym/repoman/checks/ebuilds/manifests.py | 102 ---
pym/repoman/checks/ebuilds/misc.py | 57 --
pym/repoman/checks/ebuilds/pkgmetadata.py | 177 -----
pym/repoman/checks/ebuilds/thirdpartymirrors.py | 39 --
pym/repoman/checks/ebuilds/variables/eapi.py | 44 --
pym/repoman/checks/ebuilds/variables/license.py | 47 --
pym/repoman/checks/herds/__init__.py | 0
pym/repoman/ebuild.py | 29 -
pym/repoman/metadata.py | 153 -----
pym/repoman/modules/__init__.py | 0
pym/repoman/modules/commit/__init__.py | 0
pym/repoman/modules/fix/__init__.py | 0
pym/repoman/modules/full/__init__.py | 0
pym/repoman/modules/manifest/__init__.py | 0
pym/repoman/modules/scan/__init__.py | 0
pym/repoman/scan.py | 172 -----
pym/repoman/scanner.py | 755 ---------------------
pym/repoman/vcs/__init__.py | 0
pym/repoman/vcs/vcs.py | 287 --------
pym/repoman/vcs/vcsstatus.py | 114 ----
.../__test__.py => repoman/.repoman_not_installed | 0
repoman/MANIFEST.in | 3 +
repoman/NEWS | 9 +
README => repoman/README | 0
repoman/RELEASE-NOTES | 23 +
TEST-NOTES => repoman/TEST-NOTES | 0
{bin => repoman/bin}/repoman | 11 +-
repoman/cnf/metadata.xsd | 547 +++++++++++++++
{man => repoman/man}/repoman.1 | 0
repoman/pym/repoman/__init__.py | 6 +
{pym => repoman/pym}/repoman/_portage.py | 0
{pym => repoman/pym}/repoman/_subprocess.py | 0
{pym => repoman/pym}/repoman/actions.py | 448 ++----------
{pym => repoman/pym}/repoman/argparser.py | 0
{pym => repoman/pym}/repoman/check_missingslot.py | 0
{pym => repoman/pym}/repoman/checks/__init__.py | 0
.../pym/repoman/checks/herds}/__init__.py | 0
.../pym}/repoman/checks/herds/herdbase.py | 0
.../pym}/repoman/checks/herds/metadata.py | 0
{pym => repoman/pym}/repoman/copyrights.py | 0
{pym => repoman/pym}/repoman/errors.py | 0
{pym => repoman/pym}/repoman/gpg.py | 0
{pym => repoman/pym}/repoman/main.py | 36 +-
repoman/pym/repoman/metadata.py | 126 ++++
.../pym/repoman/modules}/__init__.py | 0
.../pym/repoman/modules/commit}/__init__.py | 0
repoman/pym/repoman/modules/commit/manifest.py | 115 ++++
.../pym}/repoman/modules/commit/repochecks.py | 4 +-
.../pym/repoman/modules/scan}/__init__.py | 0
.../pym/repoman/modules/scan/depend/__init__.py | 32 +
.../repoman/modules/scan/depend/_depend_checks.py | 195 ++++++
.../pym/repoman/modules/scan/depend/_gen_arches.py | 57 ++
repoman/pym/repoman/modules/scan/depend/profile.py | 256 +++++++
.../repoman/modules/scan/directories/__init__.py | 48 ++
.../pym/repoman/modules/scan}/directories/files.py | 43 +-
.../pym/repoman/modules/scan/directories/mtime.py | 30 +
repoman/pym/repoman/modules/scan/eapi/__init__.py | 29 +
repoman/pym/repoman/modules/scan/eapi/eapi.py | 49 ++
.../pym/repoman/modules/scan/ebuild/__init__.py | 58 ++
.../pym/repoman/modules/scan/ebuild}/checks.py | 8 +-
repoman/pym/repoman/modules/scan/ebuild/ebuild.py | 238 +++++++
.../pym/repoman/modules/scan/ebuild}/errors.py | 0
.../pym/repoman/modules/scan/ebuild/multicheck.py | 56 ++
.../pym/repoman/modules/scan/eclasses/__init__.py | 47 ++
repoman/pym/repoman/modules/scan/eclasses/live.py | 76 +++
.../pym/repoman/modules/scan}/eclasses/ruby.py | 26 +-
repoman/pym/repoman/modules/scan/fetch/__init__.py | 33 +
.../pym/repoman/modules/scan/fetch}/fetches.py | 97 ++-
.../pym/repoman/modules/scan/keywords/__init__.py | 33 +
.../pym/repoman/modules/scan/keywords}/keywords.py | 95 +--
.../pym/repoman/modules/scan/manifest/__init__.py | 30 +
.../pym/repoman/modules/scan/manifest/manifests.py | 56 ++
.../pym/repoman/modules/scan/metadata/__init__.py | 85 +++
.../repoman/modules/scan/metadata}/description.py | 23 +-
.../modules/scan/metadata/ebuild_metadata.py | 71 ++
.../repoman/modules/scan/metadata/pkgmetadata.py | 198 ++++++
.../pym/repoman/modules/scan/metadata}/restrict.py | 32 +-
.../repoman/modules/scan/metadata}/use_flags.py | 28 +-
.../pym/repoman/modules/scan/options/__init__.py | 28 +
.../pym/repoman/modules/scan/options/options.py | 29 +
repoman/pym/repoman/modules/scan/scan.py | 66 ++
repoman/pym/repoman/modules/scan/scanbase.py | 79 +++
repoman/pym/repoman/modules/vcs/None/__init__.py | 34 +
repoman/pym/repoman/modules/vcs/None/changes.py | 50 ++
repoman/pym/repoman/modules/vcs/None/status.py | 53 ++
repoman/pym/repoman/modules/vcs/__init__.py | 14 +
repoman/pym/repoman/modules/vcs/bzr/__init__.py | 34 +
repoman/pym/repoman/modules/vcs/bzr/changes.py | 68 ++
repoman/pym/repoman/modules/vcs/bzr/status.py | 70 ++
repoman/pym/repoman/modules/vcs/changes.py | 169 +++++
repoman/pym/repoman/modules/vcs/cvs/__init__.py | 34 +
repoman/pym/repoman/modules/vcs/cvs/changes.py | 118 ++++
repoman/pym/repoman/modules/vcs/cvs/status.py | 131 ++++
repoman/pym/repoman/modules/vcs/git/__init__.py | 34 +
repoman/pym/repoman/modules/vcs/git/changes.py | 120 ++++
repoman/pym/repoman/modules/vcs/git/status.py | 79 +++
repoman/pym/repoman/modules/vcs/hg/__init__.py | 34 +
repoman/pym/repoman/modules/vcs/hg/changes.py | 105 +++
repoman/pym/repoman/modules/vcs/hg/status.py | 65 ++
repoman/pym/repoman/modules/vcs/settings.py | 108 +++
repoman/pym/repoman/modules/vcs/svn/__init__.py | 34 +
repoman/pym/repoman/modules/vcs/svn/changes.py | 142 ++++
repoman/pym/repoman/modules/vcs/svn/status.py | 150 ++++
repoman/pym/repoman/modules/vcs/vcs.py | 161 +++++
{pym => repoman/pym}/repoman/profile.py | 0
{pym => repoman/pym}/repoman/qa_data.py | 2 +
{pym => repoman/pym}/repoman/qa_tracker.py | 0
{pym => repoman/pym}/repoman/repos.py | 13 +-
repoman/pym/repoman/scanner.py | 434 ++++++++++++
.../pym/repoman}/tests/__init__.py | 17 +-
.../bin => repoman/pym/repoman/tests}/__test__.py | 0
.../pym/repoman/tests/changelog}/__init__.py | 0
.../repoman/tests/changelog}/test_echangelog.py | 0
.../pym/repoman}/tests/runTests.py | 12 +-
.../pym/repoman/tests/simple}/__init__.py | 0
repoman/pym/repoman/tests/simple/__test__.py | 1 +
.../pym/repoman/tests/simple}/test_simple.py | 17 +-
{pym => repoman/pym}/repoman/utilities.py | 7 -
runtests => repoman/runtests | 22 +-
setup.py => repoman/setup.py | 241 +------
runtests | 16 +-
setup.py | 6 +-
192 files changed, 6092 insertions(+), 3417 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:09 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:09 UTC (permalink / raw
To: gentoo-commits
commit: 0e3b0c33b73dd0a2b5331106baeb54b8628dae7c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:08:35 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:08:35 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0e3b0c33
Merge tag 'portage-2.3.1' into multilib
New Release
NEWS | 6 ++
RELEASE-NOTES | 28 ++++-
bin/chpathtool.py | 2 +-
bin/install-qa-check.d/10executable-issues | 4 +-
bin/install-qa-check.d/80libraries | 2 +-
bin/install-qa-check.d/90gcc-warnings | 4 +-
cnf/make.conf.example | 2 +-
cnf/make.conf.example.arm.diff | 2 +-
cnf/make.conf.example.sh.diff | 2 +-
cnf/make.conf.example.sparc.diff | 6 +-
doc/config/sets.docbook | 4 +-
doc/custom.xsl | 2 +-
doc/package/ebuild/eapi/4-python.docbook | 2 +-
doc/package/ebuild/eapi/5-progress.docbook | 2 +-
doc/portage.docbook | 2 +-
doc/qa.docbook | 12 +--
man/color.map.5 | 2 +-
man/dispatch-conf.1 | 2 +-
man/ebuild.1 | 2 +-
man/ebuild.5 | 10 +-
man/egencache.1 | 2 +-
man/emaint.1 | 2 +-
man/emerge.1 | 32 +++++-
man/emirrordist.1 | 2 +-
man/env-update.1 | 2 +-
man/etc-update.1 | 2 +-
man/fixpackages.1 | 2 +-
man/make.conf.5 | 20 ++--
man/portage.5 | 12 +--
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 +-
pym/_emerge/EbuildPhase.py | 2 +-
pym/_emerge/Scheduler.py | 15 ++-
pym/_emerge/actions.py | 43 ++++++--
pym/_emerge/depgraph.py | 111 +++++++++++++++-----
pym/_emerge/main.py | 41 +++++++-
pym/_emerge/search.py | 26 ++++-
pym/portage/__init__.py | 10 +-
pym/portage/_emirrordist/FetchTask.py | 2 +-
pym/portage/_selinux.py | 24 +++--
pym/portage/cache/anydbm.py | 4 +-
pym/portage/cache/ebuild_xattr.py | 2 +-
pym/portage/cache/flat_hash.py | 53 +++++-----
pym/portage/cache/mappings.py | 4 +-
pym/portage/cache/sqlite.py | 4 +-
pym/portage/cache/template.py | 36 ++++++-
pym/portage/data.py | 2 +-
pym/portage/dbapi/_SyncfsProcess.py | 2 +-
pym/portage/dbapi/vartree.py | 4 +-
pym/portage/dispatch_conf.py | 2 +-
pym/portage/metadata.py | 2 +-
pym/portage/news.py | 76 +++++++++-----
pym/portage/package/ebuild/config.py | 20 +++-
pym/portage/package/ebuild/doebuild.py | 4 +-
pym/portage/sync/modules/git/git.py | 27 ++++-
.../tests/ebuild/test_array_fromfile_eof.py | 2 +-
pym/portage/tests/ebuild/test_ipc_daemon.py | 23 +++--
pym/portage/tests/emerge/test_simple.py | 15 +++
pym/portage/tests/news/test_NewsItem.py | 1 +
pym/portage/tests/process/test_poll.py | 2 +-
.../soname/test_slot_conflict_reinstall.py | 1 +
.../resolver/test_runtime_cycle_merge_order.py | 72 +++++++++++++
.../tests/resolver/test_slot_conflict_rebuild.py | 2 +-
.../resolver/test_slot_operator_reverse_deps.py | 113 +++++++++++++++++++++
pym/portage/util/__init__.py | 2 +-
pym/portage/util/_desktop_entry.py | 2 +-
pym/portage/util/_eventloop/EventLoop.py | 17 +++-
pym/portage/util/locale.py | 20 ++--
pym/portage/util/writeable_check.py | 28 ++++-
pym/portage/xml/metadata.py | 2 +-
pym/portage/xpak.py | 2 +-
repoman/man/repoman.1 | 8 +-
repoman/pym/repoman/_subprocess.py | 4 +-
repoman/pym/repoman/actions.py | 13 ++-
repoman/pym/repoman/checks/herds/herdbase.py | 2 +-
repoman/pym/repoman/gpg.py | 2 +-
repoman/pym/repoman/main.py | 10 +-
repoman/pym/repoman/metadata.py | 4 +-
.../repoman/modules/scan/depend/_depend_checks.py | 25 +++--
.../repoman/modules/scan/metadata/pkgmetadata.py | 2 +-
repoman/pym/repoman/modules/vcs/git/status.py | 4 +-
repoman/pym/repoman/qa_data.py | 2 -
repoman/pym/repoman/scanner.py | 2 +
repoman/pym/repoman/tests/simple/test_simple.py | 8 +-
setup.py | 17 +++-
src/portage_util_libc.c | 68 +++++++++++++
testpath | 9 +-
92 files changed, 922 insertions(+), 266 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:30 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:30 UTC (permalink / raw
To: gentoo-commits
commit: c4fc96e0cc3f6f0cc6443373d9374df32a54d856
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:29:49 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:29:49 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c4fc96e0
Merge tag 'portage-2.3.2' into multilib
.travis.yml | 1 +
README | 19 ++++++++
RELEASE-NOTES | 13 ++++-
bin/ebuild.sh | 11 +++--
bin/phase-functions.sh | 12 +++--
bin/phase-helpers.sh | 2 +-
doc/custom.xsl | 2 +-
doc/portage.docbook | 2 +-
pym/portage/cache/fs_template.py | 2 +-
pym/portage/locks.py | 59 ++++++++++++++++++++---
pym/portage/package/ebuild/doebuild.py | 9 ++--
pym/portage/package/ebuild/prepare_build_dirs.py | 6 ---
pym/portage/sync/modules/git/git.py | 14 ++++--
repoman/pym/repoman/main.py | 2 +-
repoman/pym/repoman/modules/scan/fetch/fetches.py | 6 +++
setup.py | 23 ++++++++-
16 files changed, 147 insertions(+), 36 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:33 UTC (permalink / raw
To: gentoo-commits
commit: 676927062dc65324ca68d72690114cff36265d1d
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 6 17:14:54 2017 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jan 6 17:14:54 2017 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=67692706
Merge Coacher:extend-rdepend-suspect repoman updates
commit '021199792ce55bdc0f99bc7791a2b31ba1533d2e'
repoman/pym/repoman/qa_data.py | 3 +++
1 file changed, 3 insertions(+)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:33 UTC (permalink / raw
To: gentoo-commits
commit: d6db617338b7764db3ad8eeb62907ec048a91ff4
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:30:28 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:30:28 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d6db6173
Merge tag 'portage-2.3.4' into multilib
version bump
.gitignore | 2 +
.travis.yml | 1 +
RELEASE-NOTES | 35 +++++
bin/check-implicit-pointer-usage.py | 22 +--
bin/dispatch-conf | 4 +-
bin/etc-update | 19 ++-
bin/glsa-check | 19 ++-
bin/helper-functions.sh | 9 +-
bin/portageq | 7 +
bin/save-ebuild-env.sh | 2 +-
bin/socks5-server.py | 5 +
cnf/make.conf.example | 18 +--
cnf/make.conf.example.alpha.diff | 2 +-
cnf/make.conf.example.amd64-fbsd.diff | 2 +-
cnf/make.conf.example.amd64.diff | 2 +-
cnf/make.conf.example.arm.diff | 2 +-
cnf/make.conf.example.hppa.diff | 2 +-
cnf/make.conf.example.ia64.diff | 2 +-
cnf/make.conf.example.m68k.diff | 2 +-
cnf/make.conf.example.mips.diff | 2 +-
cnf/make.conf.example.ppc.diff | 2 +-
cnf/make.conf.example.ppc64.diff | 2 +-
cnf/make.conf.example.s390.diff | 2 +-
cnf/make.conf.example.sh.diff | 2 +-
cnf/make.conf.example.sparc-fbsd.diff | 2 +-
cnf/make.conf.example.sparc.diff | 2 +-
cnf/make.conf.example.x86-fbsd.diff | 2 +-
cnf/make.conf.example.x86.diff | 2 +-
man/emaint.1 | 8 +-
man/emerge.1 | 8 +-
man/portage.5 | 11 +-
pym/_emerge/actions.py | 17 ++-
pym/_emerge/depgraph.py | 24 ++--
pym/_emerge/main.py | 4 +-
pym/_emerge/post_emerge.py | 6 +-
pym/_emerge/resolver/slot_collision.py | 37 ++++-
pym/portage/__init__.py | 4 +-
pym/portage/checksum.py | 78 ++++++++---
pym/portage/const.py | 6 +-
pym/portage/cvstree.py | 6 +-
pym/portage/dbapi/bintree.py | 33 ++++-
pym/portage/dbapi/vartree.py | 15 +-
pym/portage/emaint/main.py | 12 +-
pym/portage/emaint/modules/binhost/binhost.py | 8 +-
pym/portage/emaint/modules/config/config.py | 14 +-
pym/portage/emaint/modules/logs/logs.py | 55 ++++----
pym/portage/emaint/modules/merges/merges.py | 18 ++-
pym/portage/emaint/modules/move/move.py | 15 +-
pym/portage/emaint/modules/resume/resume.py | 5 +-
pym/portage/emaint/modules/sync/sync.py | 156 +++++++++++----------
pym/portage/emaint/modules/world/world.py | 10 +-
pym/portage/glsa.py | 12 +-
pym/portage/news.py | 4 +-
pym/portage/package/ebuild/fetch.py | 4 +-
pym/portage/process.py | 4 +
pym/portage/repository/config.py | 16 ++-
pym/portage/sync/controller.py | 13 +-
pym/portage/sync/modules/git/__init__.py | 16 +--
pym/portage/sync/modules/git/git.py | 11 +-
pym/portage/tests/emerge/test_simple.py | 1 +
.../resolver/test_imagemagick_graphicsmagick.py | 104 ++++++++++++++
pym/portage/tests/{bin => sets}/__test__.py | 0
pym/portage/tests/{bin => sync}/__test__.py | 0
pym/portage/tests/sync/test_sync_local.py | 23 ++-
pym/portage/tests/util/test_getconfig.py | 4 +-
pym/portage/tests/util/test_varExpand.py | 4 +-
pym/portage/util/__init__.py | 13 +-
pym/portage/util/_async/PopenProcess.py | 9 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 33 ++++-
pym/portage/util/compression_probe.py | 5 +-
pym/portage/util/env_update.py | 10 +-
pym/portage/util/lafilefixer.py | 8 +-
pym/portage/versions.py | 8 +-
pym/portage/xml/metadata.py | 4 +-
repoman/MANIFEST.in | 1 +
repoman/RELEASE-NOTES | 34 +++++
repoman/cnf/metadata.xsd | 1 +
repoman/man/repoman.1 | 8 +-
repoman/pym/repoman/__init__.py | 73 ++++++++++
repoman/pym/repoman/actions.py | 12 +-
repoman/pym/repoman/copyrights.py | 10 +-
repoman/pym/repoman/main.py | 3 +-
repoman/pym/repoman/modules/scan/ebuild/checks.py | 51 +++----
repoman/pym/repoman/modules/scan/ebuild/errors.py | 6 +-
repoman/pym/repoman/modules/scan/fetch/fetches.py | 3 +
.../modules/scan/metadata/ebuild_metadata.py | 17 ++-
.../repoman/modules/scan/metadata/pkgmetadata.py | 2 +-
repoman/pym/repoman/modules/vcs/cvs/changes.py | 2 +-
repoman/pym/repoman/modules/vcs/cvs/status.py | 6 +-
repoman/pym/repoman/modules/vcs/git/status.py | 15 +-
repoman/pym/repoman/modules/vcs/svn/changes.py | 2 +-
repoman/pym/repoman/qa_data.py | 8 ++
.../pym/repoman/tests/changelog}/__test__.py | 0
repoman/runtests | 1 +
repoman/setup.py | 42 +++++-
runtests | 1 +
setup.py | 2 +-
97 files changed, 964 insertions(+), 367 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:33 UTC (permalink / raw
To: gentoo-commits
commit: 6154d2d5738bf2b554edcf507a419d931244ad5f
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:30:21 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:30:21 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=6154d2d5
Merge tag 'portage-2.3.3' into multilib
new release
NEWS | 10 ++++
RELEASE-NOTES | 28 +++++++++++-
bin/ebuild | 25 +++++++---
bin/egencache | 76 ++-----------------------------
bin/phase-helpers.sh | 7 ++-
man/portage.5 | 9 +++-
pym/_emerge/depgraph.py | 23 ++++++++--
pym/portage/dbapi/vartree.py | 14 ++++++
pym/portage/dep/__init__.py | 16 +++++--
pym/portage/dep/dep_check.py | 41 +++++++++++++----
pym/portage/manifest.py | 6 ++-
pym/portage/package/ebuild/config.py | 5 --
pym/portage/package/ebuild/digestcheck.py | 2 +-
pym/portage/package/ebuild/doebuild.py | 9 ++--
pym/portage/repository/config.py | 18 ++++++--
pym/portage/sync/modules/git/git.py | 33 +-------------
pym/portage/util/changelog.py | 69 ++++++++++++++++++++++++++++
pym/portage/versions.py | 23 +++++-----
pym/portage/xml/metadata.py | 28 +++++++++++-
setup.py | 2 +-
20 files changed, 287 insertions(+), 157 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:33 UTC (permalink / raw
To: gentoo-commits
commit: c7938eca955a49b2fc7c7ce714bf0ab6d1a53c7b
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:32:31 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:32:31 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c7938eca
Merge tag 'portage-2.3.6' into multilib
RELEASE-NOTES | 29 +++
bin/ebuild-helpers/dosym | 17 +-
bin/emirrordist | 8 +
bin/phase-functions.sh | 5 +-
bin/phase-helpers.sh | 8 +-
man/ebuild.5 | 6 +-
man/emerge.1 | 19 +-
pym/_emerge/AsynchronousLock.py | 89 +++++++-
pym/_emerge/EbuildBuild.py | 23 +-
pym/_emerge/EbuildPhase.py | 14 +-
pym/_emerge/PollScheduler.py | 57 +++--
pym/_emerge/Scheduler.py | 10 +-
pym/_emerge/SpawnProcess.py | 3 +-
pym/_emerge/SubProcess.py | 23 +-
pym/_emerge/UseFlagDisplay.py | 19 +-
pym/_emerge/actions.py | 17 +-
pym/_emerge/depgraph.py | 202 ++++++++++++++---
pym/_emerge/main.py | 12 ++
pym/portage/_emirrordist/FetchIterator.py | 21 ++
pym/portage/_emirrordist/MirrorDistTask.py | 47 ++--
pym/portage/dbapi/bintree.py | 19 +-
pym/portage/dbapi/vartree.py | 22 +-
pym/portage/package/ebuild/_spawn_nofetch.py | 106 +++++----
pym/portage/package/ebuild/config.py | 3 -
pym/portage/package/ebuild/doebuild.py | 2 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 13 ++
pym/portage/tests/ebuild/test_ipc_daemon.py | 3 +-
pym/portage/tests/locks/test_asynchronous_lock.py | 15 +-
pym/portage/tests/resolver/test_autounmask.py | 57 ++++-
.../tests/resolver/test_autounmask_use_breakage.py | 40 ++++
.../resolver/test_binary_pkg_ebuild_visibility.py | 144 +++++++++++++
.../tests/resolver/test_onlydeps_minimal.py | 47 ++++
.../test_slot_conflict_unsatisfied_deep_deps.py | 61 ++++++
...ask.py => test_slot_operator_complete_graph.py} | 23 +-
.../resolver/test_slot_operator_exclusive_slots.py | 39 ++++
.../modules => tests/util/eventloop}/__init__.py | 0
.../tests/{bin => util/eventloop}/__test__.py | 0
.../tests/util/eventloop/test_call_soon_fifo.py | 30 +++
.../modules => tests/util/futures}/__init__.py | 0
.../tests/{bin => util/futures}/__test__.py | 0
.../tests/util/futures/test_done_callback.py | 35 +++
pym/portage/tests/util/test_digraph.py | 6 +-
pym/portage/util/_async/AsyncScheduler.py | 16 +-
pym/portage/util/_async/SchedulerInterface.py | 6 +-
pym/portage/util/_eventloop/EventLoop.py | 99 ++++++++-
pym/portage/util/digraph.py | 35 ++-
pym/portage/util/futures/futures.py | 238 ++++++++++++++-------
repoman/man/repoman.1 | 4 +
repoman/pym/repoman/modules/scan/ebuild/checks.py | 13 ++
repoman/pym/repoman/qa_data.py | 4 +
setup.py | 7 +-
src/portage_util_file_copy_reflink_linux.c | 19 +-
52 files changed, 1433 insertions(+), 302 deletions(-)
diff --cc bin/phase-functions.sh
index 5633d6313,dfd8733c8..b98023702
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -306,8 -281,9 +306,9 @@@ __dyn_clean()
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
"$PORTAGE_BUILDDIR"/.exit_status
- rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
- rm -rf "${WORKDIR}"*
- rm -rf "${PORTAGE_BUILDDIR}/build-info"
++ rm -rf "${PORTAGE_BUILDDIR}/{build-info,abi-code}"
+ rm -rf "${WORKDIR}"
+ rm -f "${PORTAGE_BUILDDIR}/files"
fi
if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:33 UTC (permalink / raw
To: gentoo-commits
commit: 284eeaaa4b2ded1a16313b1951489aadcbb68bc9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:30:33 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:30:33 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=284eeaaa
Merge tag 'portage-2.3.5' into multilib
new release
.travis.yml | 9 +-
NEWS | 7 +
RELEASE-NOTES | 18 +
man/emerge.1 | 37 +-
pym/_emerge/create_depgraph_params.py | 5 +
pym/_emerge/depgraph.py | 119 +++++--
pym/_emerge/main.py | 5 +
pym/portage/_emirrordist/FetchTask.py | 2 +-
pym/portage/checksum.py | 340 +++++++++++-------
pym/portage/const.py | 3 +-
pym/portage/dbapi/bintree.py | 4 +-
pym/portage/dep/__init__.py | 4 +-
pym/portage/eclass_cache.py | 2 +-
pym/portage/manifest.py | 4 +-
pym/portage/package/ebuild/config.py | 7 +-
pym/portage/package/ebuild/fetch.py | 11 +-
pym/portage/tests/resolver/ResolverPlayground.py | 5 +
.../soname/test_slot_conflict_reinstall.py | 16 +-
pym/portage/tests/resolver/test_bdeps.py | 215 ++++++++++++
pym/portage/tests/resolver/test_slot_abi.py | 12 +-
.../tests/resolver/test_slot_conflict_rebuild.py | 8 +-
.../resolver/test_slot_operator_exclusive_slots.py | 109 ++++++
.../test_slot_operator_runtime_pkg_mask.py | 136 ++++++++
.../modules => tests/util/file_copy}/__init__.py | 0
.../tests/{bin => util/file_copy}/__test__.py | 0
pym/portage/tests/util/file_copy/test_copyfile.py | 71 ++++
pym/portage/tests/util/test_checksum.py | 106 ++++++
pym/portage/util/file_copy/__init__.py | 36 ++
pym/portage/util/movefile.py | 5 +-
repoman/pym/repoman/actions.py | 21 +-
repoman/pym/repoman/modules/scan/ebuild/checks.py | 26 ++
repoman/pym/repoman/modules/scan/ebuild/errors.py | 2 +
repoman/pym/repoman/qa_data.py | 4 +-
repoman/pym/repoman/utilities.py | 39 ++-
setup.py | 11 +-
src/portage_util_file_copy_reflink_linux.c | 385 +++++++++++++++++++++
36 files changed, 1573 insertions(+), 211 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:38 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:38 UTC (permalink / raw
To: gentoo-commits
commit: 16fcf4998f4b55f1697e4358c7b232e3cab56a11
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:38:27 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:38:27 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=16fcf499
Merge tag 'portage-2.3.7' into multilib
.editorconfig | 14 +++
.travis.yml | 4 +-
NEWS | 15 +++
RELEASE-NOTES | 16 ++-
bin/ebuild-helpers/doman | 1 +
bin/install-qa-check.d/80multilib-strict | 7 +-
bin/misc-functions.sh | 6 +-
bin/phase-helpers.sh | 45 +++++---
bin/quickpkg | 62 ++++++++---
cnf/make.globals | 3 +-
man/emerge.1 | 7 ++
man/make.conf.5 | 25 +++++
man/portage.5 | 27 ++++-
pym/_emerge/BinpkgExtractorAsync.py | 43 +++++++-
pym/_emerge/actions.py | 15 +++
pym/_emerge/depgraph.py | 117 +++++++++++++++++----
pym/_emerge/main.py | 9 ++
pym/_emerge/search.py | 24 ++++-
pym/portage/const.py | 3 +-
pym/portage/dbapi/bintree.py | 18 ++--
pym/portage/dep/dep_check.py | 6 +-
pym/portage/localization.py | 2 +-
.../package/ebuild/_config/KeywordsManager.py | 4 +-
pym/portage/package/ebuild/_config/UseManager.py | 5 +-
.../package/ebuild/_config/special_env_vars.py | 3 +-
pym/portage/package/ebuild/config.py | 27 +++++
pym/portage/package/ebuild/doebuild.py | 34 +++++-
pym/portage/sync/modules/git/__init__.py | 8 +-
pym/portage/sync/modules/git/git.py | 37 ++++++-
pym/portage/sync/modules/rsync/__init__.py | 3 +-
pym/portage/sync/modules/rsync/rsync.py | 12 +++
pym/portage/sync/syncbase.py | 5 +-
pym/portage/tests/emerge/test_simple.py | 5 +-
.../tests/resolver/test_autounmask_binpkg_use.py | 64 +++++++++++
.../resolver/test_autounmask_keep_keywords.py | 72 +++++++++++++
pym/portage/util/_urlopen.py | 12 +++
pym/portage/util/compression_probe.py | 45 ++++++--
repoman/RELEASE-NOTES | 12 +++
repoman/bin/repoman | 4 +-
repoman/man/repoman.1 | 20 +++-
repoman/pym/repoman/actions.py | 55 ++++++++--
repoman/pym/repoman/argparser.py | 16 ++-
repoman/pym/repoman/main.py | 4 +-
repoman/pym/repoman/modules/scan/ebuild/checks.py | 5 +
.../pym/repoman/modules/scan/keywords/keywords.py | 26 ++++-
.../repoman/modules/scan/metadata/pkgmetadata.py | 10 ++
repoman/pym/repoman/qa_data.py | 1 +
repoman/pym/repoman/scanner.py | 2 +-
repoman/pym/repoman/tests/runTests.py | 4 +-
repoman/runtests | 4 +-
repoman/setup.py | 2 +-
setup.py | 8 +-
52 files changed, 844 insertions(+), 134 deletions(-)
diff --cc pym/_emerge/actions.py
index 6f6646b34,3c6c265f7..d9647dd9a
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -2862,13 -2872,11 +2872,18 @@@ def run_action(emerge_config)
adjust_configs(emerge_config.opts, emerge_config.trees)
apply_priorities(emerge_config.target_config.settings)
+ if 'force-multilib' in emerge_config.target_config.settings.features:
+ if emerge_config.target_config.settings.get("NO_AUTO_FLAG", "") is "":
+ writemsg_level(bad("!!! Failed to find vars from extra profile") + "\n",level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! Please make sure that you did follow the instructions and included the extra profile\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! http://git.overlays.gentoo.org/gitweb/?p=proj/multilib-portage.git;a=blob;f=doc/portage-multilib-instructions\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! has some basic instructions for the setup\n"),level=logging.ERROR, noiselevel=-1)
+ return 1
+ if ("--autounmask-continue" in emerge_config.opts and
+ emerge_config.opts.get("--autounmask") == "n"):
+ writemsg_level(
+ " %s --autounmask-continue has been disabled by --autounmask=n\n" %
+ warn("*"), level=logging.WARNING, noiselevel=-1)
for fmt in emerge_config.target_config.settings.get("PORTAGE_BINPKG_FORMAT", "").split():
if not fmt in portage.const.SUPPORTED_BINPKG_FORMATS:
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 6326008f9b4faac9e5e984b67a6d0a1a176cbf0a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:39:38 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:39:38 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=6326008f
Merge tag 'portage-2.3.11' into multilib
portage-2.3.11
RELEASE-NOTES | 14 ++++
bin/postinst-qa-check.d/50gnome2-utils | 8 +-
bin/postinst-qa-check.d/50xdg-utils | 12 +--
pym/_emerge/depgraph.py | 38 ++++++++--
pym/_emerge/search.py | 8 +-
.../resolver/test_autounmask_use_backtrack.py | 86 ++++++++++++++++++++++
.../tests/resolver/test_slot_conflict_update.py | 2 +-
setup.py | 2 +-
8 files changed, 152 insertions(+), 18 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: dfc32ac920fa86c8f0b25321a73ec99022ee7591
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:40:01 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:40:01 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=dfc32ac9
Merge tag 'portage-2.3.13' into multilib
portage-2.3.13
.travis.yml | 2 +
RELEASE-NOTES | 9 +++
bin/misc-functions.sh | 18 +++---
bin/postinst-qa-check.d/50gnome2-utils | 6 ++
bin/postinst-qa-check.d/50xdg-utils | 12 ++++
bin/preinst-qa-check.d/50gnome2-utils | 1 +
bin/preinst-qa-check.d/50xdg-utils | 1 +
doc/config/bashrc.docbook | 15 +++++
man/ebuild.5 | 76 +----------------------
pym/portage/checksum.py | 17 ++++-
pym/portage/package/ebuild/doebuild.py | 1 +
pym/portage/sync/modules/rsync/rsync.py | 6 +-
repoman/RELEASE-NOTES | 5 ++
repoman/setup.py | 2 +-
setup.py | 2 +-
src/portage_util_file_copy_reflink_linux.c | 99 ++++++++++++++++++------------
16 files changed, 144 insertions(+), 128 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 4d099159120c927f18a23c8775636370da1d8793
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:40:06 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:40:06 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4d099159
Merge tag 'portage-2.3.14' into multilib
portage-2.3.14
NEWS | 5 +
RELEASE-NOTES | 8 ++
man/portage.5 | 13 +-
pym/portage/_emirrordist/FetchTask.py | 2 +-
pym/portage/const.py | 29 +---
pym/portage/dbapi/vartree.py | 42 +++++-
pym/portage/dep/_dnf.py | 90 +++++++++++++
pym/portage/dep/dep_check.py | 147 +++++++++++++++++++--
pym/portage/manifest.py | 35 ++---
pym/portage/package/ebuild/digestgen.py | 7 +-
pym/portage/package/ebuild/doebuild.py | 17 ++-
pym/portage/repository/config.py | 45 +++++--
pym/portage/tests/dep/test_dnf_convert.py | 48 +++++++
pym/portage/tests/dep/test_overlap_dnf.py | 28 ++++
pym/portage/tests/ebuild/test_config.py | 1 +
.../tests/resolver/test_or_downgrade_installed.py | 97 ++++++++++++++
.../resolver/test_virtual_minimize_children.py | 145 ++++++++++++++++++++
repoman/pym/repoman/repos.py | 17 ++-
setup.py | 2 +-
19 files changed, 701 insertions(+), 77 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 252b6373d6716a503f990856f0e3619f2afc3fd7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:39:14 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:39:14 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=252b6373
Merge tag 'portage-2.3.9' into multilib
NEWS | 2 +
RELEASE-NOTES | 19 +++++
bin/clean_locks | 2 +-
bin/dispatch-conf | 2 +-
bin/ebuild | 2 +-
bin/ebuild.sh | 9 +++
bin/emaint | 2 +-
bin/env-update | 2 +-
bin/isolated-functions.sh | 4 ++
bin/misc-functions.sh | 59 ++++++++++++++-
bin/phase-functions.sh | 53 ++++++++++++--
bin/portageq | 2 +-
bin/postinst-qa-check.d/50gnome2-utils | 52 ++++++++++++++
bin/postinst-qa-check.d/50xdg-utils | 83 ++++++++++++++++++++++
bin/quickpkg | 25 ++++---
pym/_emerge/AsynchronousLock.py | 6 +-
pym/portage/dbapi/vartree.py | 5 +-
pym/portage/elog/mod_echo.py | 13 +++-
.../package/ebuild/_config/special_env_vars.py | 4 +-
pym/portage/package/ebuild/doebuild.py | 5 +-
pym/portage/repository/config.py | 4 +-
pym/portage/sync/syncbase.py | 8 +--
pym/portage/tests/locks/test_asynchronous_lock.py | 8 ++-
pym/portage/util/digraph.py | 12 ++--
repoman/man/repoman.1 | 18 +++--
repoman/pym/repoman/actions.py | 17 ++---
setup.py | 2 +-
tabcheck.py | 2 +-
28 files changed, 362 insertions(+), 60 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 86232affabdb17a0526dc1d03e4a693800d69008
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:39:33 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:39:33 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=86232aff
Merge tag 'portage-2.3.10' into multilib
RELEASE-NOTES | 7 +++++++
bin/postinst-qa-check.d/50gnome2-utils | 13 ++++++++-----
bin/postinst-qa-check.d/50xdg-utils | 26 ++++++++++++++++----------
setup.py | 2 +-
4 files changed, 32 insertions(+), 16 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: a3ffba07f7d4b8a583bd58ff3c42b0a580317b1a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:40:11 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:40:11 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a3ffba07
Merge tag 'portage-2.3.15' into multilib
portage-2.3.15
RELEASE-NOTES | 9 +++
bin/quickpkg | 15 +++--
pym/portage/dbapi/bintree.py | 80 ++++++++++++++----------
pym/portage/manifest.py | 2 +-
pym/portage/package/ebuild/_config/UseManager.py | 5 +-
pym/portage/util/__init__.py | 6 +-
repoman/RELEASE-NOTES | 12 ++++
repoman/pym/repoman/tests/simple/test_simple.py | 15 -----
repoman/setup.py | 24 ++++++-
setup.py | 10 ++-
10 files changed, 115 insertions(+), 63 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: d8c91b341ffad9d2e2199ad90633ae9762825477
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:40:15 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:40:15 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d8c91b34
Merge tag 'portage-2.3.16' into multilib
portage-2.3.16
RELEASE-NOTES | 7 +++++++
pym/portage/dbapi/bintree.py | 9 +++++++--
pym/portage/emaint/modules/binhost/binhost.py | 10 +++++-----
pym/portage/sync/modules/git/git.py | 2 +-
pym/portage/sync/modules/rsync/rsync.py | 2 +-
pym/portage/tests/sync/test_sync_local.py | 2 +-
setup.py | 2 +-
7 files changed, 23 insertions(+), 11 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 2acb493dac53adbd860a992f4bbf4f10b46bba9a
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:39:53 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:39:53 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=2acb493d
Merge tag 'portage-2.3.12' into multilib
portage-2.3.12
NEWS | 7 ++
RELEASE-NOTES | 12 ++++
bin/ebuild-helpers/prepstrip | 20 ++++--
bin/install-qa-check.d/10ignored-flags | 5 +-
man/ebuild.5 | 2 +-
man/emerge.1 | 2 +-
man/make.conf.5 | 4 +-
man/portage.5 | 14 ++--
pym/_emerge/BinpkgExtractorAsync.py | 26 ++++---
pym/_emerge/depgraph.py | 45 +++++++++++-
pym/_emerge/resolver/package_tracker.py | 87 +++++++++++++++++-----
pym/portage/dbapi/porttree.py | 123 ++++++++++++++++++++++++++++----
pym/portage/elog/mod_echo.py | 4 +-
setup.py | 2 +-
14 files changed, 292 insertions(+), 61 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 9aff2af7bd5b5d2a851e7619b9bf8f5ee35a7b93
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:42:54 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:42:54 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=9aff2af7
Merge tag 'portage-2.3.18' into multilib
portage-2.3.18
RELEASE-NOTES | 9 +++++++++
bin/doins.py | 6 +++++-
bin/phase-functions.sh | 2 +-
cnf/make.globals | 5 ++++-
pym/_emerge/BinpkgExtractorAsync.py | 4 ++--
pym/_emerge/Package.py | 32 +++++++++++++++++++++++++++++++
pym/portage/dbapi/__init__.py | 5 +++++
pym/portage/package/ebuild/config.py | 6 ++++++
pym/portage/tests/dbapi/test_fakedbapi.py | 20 +++++++++++++++++++
setup.py | 2 +-
10 files changed, 85 insertions(+), 6 deletions(-)
diff --cc pym/_emerge/Package.py
index 23abb4fe8,cebfd8281..5f3de3175
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@@ -82,17 -83,14 +83,21 @@@ class Package(Task)
if eapi_attrs.iuse_effective:
implicit_match = self.root_config.settings._iuse_effective_match
+ if self.built:
+ implicit_match = functools.partial(
+ self._built_iuse_effective_match,
+ implicit_match, frozenset(self._metadata['USE'].split()))
else:
implicit_match = self.root_config.settings._iuse_implicit_match
+ iuse = self._metadata["IUSE"]
+ if 'force-multilib' in self.root_config.settings.features:
+ if self.built is False:
+ for multilib_abis in self.root_config.settings.get("MULTILIB_ABIS", '').split():
+ iuse += " multilib_abi_" + multilib_abis
+ iuse += " abiwrapper"
+ self._metadata["IUSE"] = iuse
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
- self.iuse = self._iuse(self, self._metadata["IUSE"].split(), implicit_match,
+ self.iuse = self._iuse(self, iuse.split(), implicit_match,
usealiases, self.eapi)
if (self.iuse.enabled or self.iuse.disabled) and \
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: e54d9bf70ed9310a7ccda6aba93234abee3c1e75
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:42:58 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:42:58 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e54d9bf7
Merge tag 'portage-2.3.19' into multilib
portage-2.3.19
RELEASE-NOTES | 7 +++++++
bin/ebuild-helpers/doins | 2 +-
setup.py | 2 +-
src/portage_util_file_copy_reflink_linux.c | 4 ++--
4 files changed, 11 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-01-07 10:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-01-07 10:43 UTC (permalink / raw
To: gentoo-commits
commit: 4d42c6dde9572c3b9dac7dadf1366420b05f37e3
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 7 10:42:45 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 7 10:42:45 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4d42c6dd
Merge tag 'portage-2.3.17' into multilib
COPYING | 35 ++
NEWS | 5 +
RELEASE-NOTES | 9 +
bin/doins.py | 579 +++++++++++++++++++++
bin/ebuild-helpers/doins | 156 ++----
bin/phase-helpers.sh | 3 +-
pym/_emerge/Scheduler.py | 36 --
pym/_emerge/depgraph.py | 12 +-
pym/_emerge/main.py | 3 +-
pym/portage/checksum.py | 9 +-
pym/portage/output.py | 2 +-
pym/portage/package/ebuild/config.py | 4 +-
pym/portage/tests/bin/test_doins.py | 352 +++++++++++++
.../resolver/test_disjunctive_depend_order.py | 87 ++++
.../tests/resolver/test_onlydeps_minimal.py | 5 +-
pym/portage/tests/versions/test_vercmp.py | 3 -
pym/portage/versions.py | 38 +-
setup.py | 2 +-
18 files changed, 1153 insertions(+), 187 deletions(-)
diff --cc bin/phase-helpers.sh
index 8e3721dba,9b1f6adbe..0a3bcdf1f
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@@ -193,9 -193,9 +193,10 @@@ use()
# a full profile with IUSE_IMPLICIT and stuff (see bug #456830).
elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE &&
-n $PORTAGE_INTERNAL_CALLER ]] ; then
- if [[ ! $u =~ $PORTAGE_IUSE ]] ; then
+ if ( [[ ! " ${FEATURES} " == *" force-multilib "* && $u == multilib ]] && \
+ [[ ! $u =~ $PORTAGE_IUSE ]] ) ; then
- if [[ ! ${EAPI} =~ ^(0|1|2|3|4|4-python|4-slot-abi)$ ]] ; then
+ if [[ ${EMERGE_FROM} != binary &&
+ ! ${EAPI} =~ ^(0|1|2|3|4|4-python|4-slot-abi)$ ]] ; then
# This is only strict starting with EAPI 5, since implicit IUSE
# is not well defined for earlier EAPIs (see bug #449708).
die "USE Flag '${u}' not in IUSE for ${CATEGORY}/${PF}"
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-03-03 15:18 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-03-03 15:18 UTC (permalink / raw
To: gentoo-commits
commit: 3228956aed7ba7caaaad7a07e48ed6013f73e523
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 3 15:17:29 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Mar 3 15:17:29 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=3228956a
Merge tag 'portage-2.3.24' into multilib
portage-2.3.24
NEWS | 4 +
RELEASE-NOTES | 46 ++++++
bin/doins.py | 38 ++++-
bin/emerge-webrsync | 11 +-
bin/install-qa-check.d/90cmake-warnings | 28 ++++
bin/install-qa-check.d/95empty-dirs | 42 ++++++
cnf/repos.conf | 2 +
man/ebuild.5 | 12 +-
man/egencache.1 | 6 +-
man/emaint.1 | 22 +--
man/emerge.1 | 102 ++++++-------
man/make.conf.5 | 4 +
man/portage.5 | 14 ++
misc/emerge-delta-webrsync | 11 +-
pym/_emerge/EbuildExecuter.py | 6 +-
pym/_emerge/EbuildPhase.py | 6 +-
pym/_emerge/FakeVartree.py | 2 +-
pym/_emerge/Scheduler.py | 3 +-
pym/_emerge/actions.py | 7 +-
pym/_emerge/create_depgraph_params.py | 11 +-
pym/_emerge/depgraph.py | 104 +++++++++++++-
pym/_emerge/main.py | 13 ++
pym/portage/const.py | 5 +-
pym/portage/dep/dep_check.py | 75 +++++++---
pym/portage/dep/soname/multilib_category.py | 4 +-
pym/portage/package/ebuild/config.py | 11 +-
pym/portage/package/ebuild/doebuild.py | 42 +-----
pym/portage/package/ebuild/prepare_build_dirs.py | 31 +++-
pym/portage/repository/config.py | 9 +-
pym/portage/sync/modules/rsync/__init__.py | 4 +-
pym/portage/sync/modules/rsync/rsync.py | 41 +++++-
pym/portage/tests/bin/test_doins.py | 7 +-
pym/portage/tests/dep/test_overlap_dnf.py | 2 +-
pym/portage/tests/resolver/test_changed_deps.py | 1 +
pym/portage/tests/resolver/test_multirepo.py | 4 +-
.../tests/resolver/test_or_upgrade_installed.py | 160 +++++++++++++++++++++
.../resolver/test_virtual_minimize_children.py | 144 ++++++++++++++++++-
pym/portage/tests/resolver/test_virtual_slot.py | 2 +-
.../util/_dyn_libs/PreservedLibsRegistry.py | 3 +-
pym/portage/util/elf/constants.py | 1 +
repoman/man/repoman.1 | 8 ++
repoman/pym/repoman/modules/scan/depend/profile.py | 2 +
repoman/pym/repoman/qa_data.py | 8 ++
setup.py | 2 +-
44 files changed, 890 insertions(+), 170 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-04-14 12:16 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-04-14 12:16 UTC (permalink / raw
To: gentoo-commits
commit: ee29b930b880050eb9a04c06d0f1a0edd0e1fc27
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 14 12:11:15 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 14 12:11:15 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=ee29b930
Merge portage-2.3.28
.travis.yml | 2 +
NEWS | 4 +
RELEASE-NOTES | 50 +
bin/eapi.sh | 42 +-
bin/eapi7-ver-funcs.sh | 191 ++++
bin/ebuild | 2 +
bin/ebuild-helpers/dobin | 16 +-
bin/ebuild-helpers/doconfd | 11 +-
bin/ebuild-helpers/dodir | 4 +-
bin/ebuild-helpers/dodoc | 2 +-
bin/ebuild-helpers/doenvd | 11 +-
bin/ebuild-helpers/doexe | 8 +-
bin/ebuild-helpers/dohard | 6 +-
bin/ebuild-helpers/doheader | 8 +-
bin/ebuild-helpers/dohtml | 7 +-
bin/ebuild-helpers/doinfo | 8 +-
bin/ebuild-helpers/doins | 18 +-
bin/ebuild-helpers/dolib | 17 +-
bin/ebuild-helpers/dolib.a | 4 +-
bin/ebuild-helpers/dolib.so | 4 +-
bin/ebuild-helpers/doman | 8 +-
bin/ebuild-helpers/domo | 21 +-
bin/ebuild-helpers/dosbin | 16 +-
bin/ebuild-helpers/dosed | 4 +-
bin/ebuild-helpers/dosym | 8 +-
bin/ebuild-helpers/ecompressdir | 25 +-
bin/ebuild-helpers/fowners | 4 +-
bin/ebuild-helpers/fperms | 4 +-
bin/ebuild-helpers/keepdir | 6 +-
bin/ebuild-helpers/newins | 2 +-
bin/ebuild-helpers/nonfatal | 14 +
bin/ebuild-helpers/prepall | 2 +-
bin/ebuild-helpers/prepalldocs | 4 +-
bin/ebuild-helpers/prepallinfo | 4 +-
bin/ebuild-helpers/prepallstrip | 4 +
bin/ebuild-helpers/prepinfo | 12 +-
bin/ebuild-helpers/prepman | 10 +-
bin/ebuild-helpers/prepstrip | 401 +-------
bin/ebuild.sh | 47 +-
bin/emerge | 1 +
bin/{ebuild-helpers/prepstrip => estrip} | 93 +-
bin/etc-update | 30 +-
bin/filter-bash-environment.py | 47 +-
bin/install-qa-check.d/60udev | 6 +-
bin/install-qa-check.d/80libraries | 22 +-
bin/isolated-functions.sh | 40 +-
bin/misc-functions.sh | 131 +--
bin/phase-functions.sh | 50 +-
bin/phase-helpers.sh | 114 ++-
bin/portageq | 18 +-
bin/postinst-qa-check.d/50gnome2-utils | 3 +
bin/save-ebuild-env.sh | 8 +-
bin/xattr-helper.py | 19 +-
cnf/repos.conf | 6 +
man/ebuild.5 | 10 -
man/emerge.1 | 26 +-
man/portage.5 | 29 +-
pym/_emerge/BlockerDB.py | 4 +-
pym/_emerge/EbuildPhase.py | 7 +
pym/_emerge/Package.py | 32 +-
pym/_emerge/PackagePhase.py | 93 ++
pym/_emerge/actions.py | 16 +-
pym/_emerge/create_depgraph_params.py | 12 +-
pym/_emerge/depgraph.py | 77 +-
pym/_emerge/main.py | 24 +-
pym/_emerge/resolver/output.py | 4 +-
pym/_emerge/search.py | 4 +
pym/_emerge/show_invalid_depstring_notice.py | 4 +-
pym/portage/__init__.py | 58 +-
pym/portage/_sets/base.py | 17 +-
pym/portage/cache/metadata.py | 4 +-
pym/portage/const.py | 3 +-
pym/portage/dbapi/__init__.py | 4 +-
pym/portage/dbapi/bintree.py | 16 +-
pym/portage/dbapi/dep_expand.py | 2 +-
pym/portage/dbapi/porttree.py | 105 +-
pym/portage/dbapi/vartree.py | 66 +-
pym/portage/dep/__init__.py | 27 +-
pym/portage/dep/_slot_operator.py | 7 +-
pym/portage/eapi.py | 43 +-
pym/portage/emaint/modules/move/move.py | 4 +-
pym/portage/module.py | 49 +-
pym/portage/package/ebuild/_config/MaskManager.py | 10 +-
.../package/ebuild/_config/special_env_vars.py | 7 +-
pym/portage/package/ebuild/config.py | 137 +--
pym/portage/package/ebuild/doebuild.py | 26 +-
pym/portage/process.py | 30 +-
pym/portage/repository/config.py | 27 +-
pym/portage/sync/modules/git/__init__.py | 3 +-
pym/portage/sync/modules/git/git.py | 95 +-
pym/portage/sync/modules/rsync/__init__.py | 1 +
pym/portage/sync/modules/rsync/rsync.py | 479 +++++----
pym/portage/sync/syncbase.py | 87 +-
pym/portage/tests/bin/test_eapi7_ver_funcs.py | 240 +++++
pym/portage/tests/bin/test_filter_bash_env.py | 115 +++
pym/portage/tests/dep/testCheckRequiredUse.py | 5 +-
pym/portage/tests/ebuild/test_ipc_daemon.py | 12 +-
pym/portage/tests/resolver/ResolverPlayground.py | 2 +-
pym/portage/tests/resolver/test_autounmask.py | 25 +-
pym/portage/tests/resolver/test_complete_graph.py | 20 +-
pym/portage/tests/resolver/test_eapi.py | 9 +-
pym/portage/tests/resolver/test_required_use.py | 22 +-
.../resolver/test_slot_change_without_revbump.py | 19 +
.../tests/resolver/test_virtual_transition.py | 51 -
.../tests/util/futures/test_iter_completed.py | 50 +
pym/portage/tests/util/futures/test_retry.py | 147 +++
pym/portage/util/_async/AsyncTaskFuture.py | 31 +
pym/portage/util/_eventloop/EventLoop.py | 92 +-
pym/portage/util/backoff.py | 53 +
.../modules => util/futures/executor}/__init__.py | 0
pym/portage/util/futures/executor/fork.py | 134 +++
pym/portage/util/futures/futures.py | 6 +
pym/portage/util/futures/iter_completed.py | 63 ++
pym/portage/util/futures/retry.py | 183 ++++
pym/portage/util/futures/wait.py | 92 ++
pym/portage/util/install_mask.py | 125 +++
pym/portage/util/monotonic.py | 34 +
pym/portage/util/movefile.py | 4 +-
repoman/NEWS | 5 +
repoman/RELEASE-NOTES | 13 +
repoman/cnf/linechecks/linechecks.yaml | 35 +
repoman/cnf/qa_data/qa_data.yaml | 136 +++
repoman/cnf/repository/linechecks.yaml | 252 +++++
repoman/cnf/repository/qa_data.yaml | 160 +++
repoman/cnf/repository/repository.yaml | 76 ++
repoman/man/repoman.1 | 19 +-
repoman/pym/repoman/actions.py | 100 +-
repoman/pym/repoman/argparser.py | 8 +-
repoman/pym/repoman/config.py | 159 +++
repoman/pym/repoman/main.py | 30 +-
repoman/pym/repoman/metadata.py | 2 +-
.../__test__.py => modules/linechecks/__init__.py} | 0
.../modules/linechecks/assignment/__init__.py | 28 +
.../modules/linechecks/assignment/assignment.py | 31 +
repoman/pym/repoman/modules/linechecks/base.py | 101 ++
repoman/pym/repoman/modules/linechecks/config.py | 118 +++
.../pym/repoman/modules/linechecks/controller.py | 145 +++
.../repoman/modules/linechecks/depend/__init__.py | 22 +
.../repoman/modules/linechecks/depend/implicit.py | 39 +
.../modules/linechecks/deprecated/__init__.py | 47 +
.../modules/linechecks/deprecated/deprecated.py | 32 +
.../modules/linechecks/deprecated/inherit.py | 66 ++
.../pym/repoman/modules/linechecks/do/__init__.py | 22 +
repoman/pym/repoman/modules/linechecks/do/dosym.py | 16 +
.../repoman/modules/linechecks/eapi/__init__.py | 52 +
.../pym/repoman/modules/linechecks/eapi/checks.py | 83 ++
.../repoman/modules/linechecks/eapi/definition.py | 36 +
.../repoman/modules/linechecks/emake/__init__.py | 28 +
.../pym/repoman/modules/linechecks/emake/emake.py | 23 +
.../modules/linechecks/gentoo_header/__init__.py | 22 +
.../modules/linechecks/gentoo_header/header.py | 49 +
.../repoman/modules/linechecks/helpers/__init__.py | 22 +
.../repoman/modules/linechecks/helpers/offset.py | 22 +
.../repoman/modules/linechecks/nested/__init__.py | 22 +
.../repoman/modules/linechecks/nested/nested.py | 15 +
.../repoman/modules/linechecks/nested/nesteddie.py | 11 +
.../repoman/modules/linechecks/patches/__init__.py | 22 +
.../repoman/modules/linechecks/patches/patches.py | 16 +
.../repoman/modules/linechecks/phases/__init__.py | 35 +
.../pym/repoman/modules/linechecks/phases/phase.py | 71 ++
.../repoman/modules/linechecks/portage/__init__.py | 28 +
.../repoman/modules/linechecks/portage/internal.py | 37 +
.../repoman/modules/linechecks/quotes/__init__.py | 28 +
.../repoman/modules/linechecks/quotes/quoteda.py | 16 +
.../repoman/modules/linechecks/quotes/quotes.py | 86 ++
.../pym/repoman/modules/linechecks/uri/__init__.py | 22 +
repoman/pym/repoman/modules/linechecks/uri/uri.py | 30 +
.../pym/repoman/modules/linechecks/use/__init__.py | 22 +
.../repoman/modules/linechecks/use/builtwith.py | 10 +
.../repoman/modules/linechecks/useless/__init__.py | 28 +
.../pym/repoman/modules/linechecks/useless/cd.py | 24 +
.../repoman/modules/linechecks/useless/dodoc.py | 16 +
.../modules/linechecks/whitespace/__init__.py | 28 +
.../repoman/modules/linechecks/whitespace/blank.py | 25 +
.../modules/linechecks/whitespace/whitespace.py | 21 +
.../modules/linechecks/workaround/__init__.py | 28 +
.../modules/linechecks/workaround/workarounds.py | 18 +
.../pym/repoman/modules/scan/depend/__init__.py | 4 +-
.../repoman/modules/scan/depend/_depend_checks.py | 11 +-
repoman/pym/repoman/modules/scan/depend/profile.py | 3 +-
.../repoman/modules/scan/directories/__init__.py | 5 +-
repoman/pym/repoman/modules/scan/eapi/__init__.py | 4 +-
repoman/pym/repoman/modules/scan/eapi/eapi.py | 4 +-
.../pym/repoman/modules/scan/ebuild/__init__.py | 7 +-
repoman/pym/repoman/modules/scan/ebuild/checks.py | 1044 --------------------
repoman/pym/repoman/modules/scan/ebuild/ebuild.py | 5 +-
repoman/pym/repoman/modules/scan/ebuild/errors.py | 53 -
.../pym/repoman/modules/scan/ebuild/multicheck.py | 10 +-
.../pym/repoman/modules/scan/eclasses/__init__.py | 7 +-
repoman/pym/repoman/modules/scan/eclasses/ruby.py | 5 +-
repoman/pym/repoman/modules/scan/fetch/__init__.py | 4 +-
.../pym/repoman/modules/scan/keywords/__init__.py | 4 +-
.../pym/repoman/modules/scan/manifest/__init__.py | 4 +-
.../pym/repoman/modules/scan/metadata/__init__.py | 13 +-
.../repoman/modules/scan/metadata/description.py | 6 +-
.../modules/scan/metadata/ebuild_metadata.py | 14 +-
.../repoman/modules/scan/metadata/pkgmetadata.py | 2 +-
.../pym/repoman/modules/scan/metadata/restrict.py | 4 +-
repoman/pym/repoman/modules/scan/module.py | 102 ++
.../pym/repoman/modules/scan/options/__init__.py | 4 +-
repoman/pym/repoman/qa_data.py | 462 ++-------
repoman/pym/repoman/qa_tracker.py | 10 +-
repoman/pym/repoman/repos.py | 21 +-
repoman/pym/repoman/scanner.py | 84 +-
.../pym/repoman/tests/commit}/__init__.py | 2 +-
.../repoman/tests/{simple => commit}/__test__.py | 0
repoman/pym/repoman/tests/commit/test_commitmsg.py | 109 ++
repoman/pym/repoman/tests/runTests.py | 8 +-
repoman/pym/repoman/tests/simple/test_simple.py | 8 +-
repoman/pym/repoman/utilities.py | 22 +-
repoman/setup.py | 8 +-
setup.py | 2 +-
212 files changed, 6465 insertions(+), 3030 deletions(-)
diff --cc bin/phase-functions.sh
index 58e0cdc0b,3de8d01b5..6c8da017d
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -746,28 -673,10 +760,20 @@@ __dyn_install()
x=$(echo -n ${!f})
[[ -n $x ]] && echo "$x" > $f
done
- if [[ $CATEGORY != virtual ]] ; then
- for f in ASFLAGS CBUILD CC CFLAGS CHOST CTARGET CXX \
- CXXFLAGS EXTRA_ECONF EXTRA_EINSTALL EXTRA_MAKE \
- LDFLAGS LIBCFLAGS LIBCXXFLAGS QA_CONFIGURE_OPTIONS \
- QA_DESKTOP_FILE QA_PREBUILT PROVIDES_EXCLUDE REQUIRES_EXCLUDE ; do
- x=$(echo -n ${!f})
- [[ -n $x ]] && echo "$x" > $f
- done
- # whitespace preserved
- for f in QA_AM_MAINTAINER_MODE ; do
- [[ -n ${!f} ]] && echo "${!f}" > $f
- done
+ # whitespace preserved
+ for f in QA_AM_MAINTAINER_MODE ; do
+ [[ -n ${!f} ]] && echo "${!f}" > $f
+ done
+ fi
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ #IUSE is changed in _post_src_install_chost_fix
+ #in pym/portage/package/ebuild/doebuild.py
+ #which is run after dyn_install, so useless to
+ #add internal USE flags here
+ if is_auto-multilib; then
+ echo "$(get_abi_order)" > MULTILIB_ABIS
+ fi
+ fi
echo "${USE}" > USE
echo "${EAPI:-0}" > EAPI
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-05-23 12:23 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-05-23 12:23 UTC (permalink / raw
To: gentoo-commits
commit: b74e878839a2b1e8d6148776d5a44019d8fffbc1
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed May 23 12:22:27 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed May 23 12:22:27 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=b74e8788
Merge portage-2.3.38
.travis.yml | 2 +
NEWS | 9 +
RELEASE-NOTES | 92 +++
bin/eapi.sh | 18 +-
bin/ebuild | 8 +-
bin/ebuild-helpers/ecompressdir | 4 +-
bin/ebuild-ipc.py | 55 +-
bin/ebuild.sh | 3 +
bin/egencache | 5 +-
bin/emaint | 3 +
bin/emerge | 5 +
bin/emirrordist | 6 +-
bin/estrip | 3 +-
bin/etc-update | 31 +-
bin/install-qa-check.d/10ignored-flags | 2 +-
bin/misc-functions.sh | 2 +-
bin/phase-functions.sh | 9 +
bin/phase-helpers.sh | 159 ++---
bin/portageq | 6 +-
bin/quickpkg | 14 +-
cnf/repos.conf | 3 +-
man/ebuild.5 | 6 +
man/emerge.1 | 38 +-
man/portage.5 | 10 +-
pym/_emerge/AbstractEbuildProcess.py | 97 ++-
pym/_emerge/AbstractPollTask.py | 87 +--
pym/_emerge/AsynchronousLock.py | 76 +--
pym/_emerge/AsynchronousTask.py | 60 +-
pym/_emerge/Binpkg.py | 78 ++-
pym/_emerge/BinpkgExtractorAsync.py | 16 +-
pym/_emerge/BinpkgFetcher.py | 104 ++-
pym/_emerge/CompositeTask.py | 46 +-
pym/_emerge/EbuildBuild.py | 99 ++-
pym/_emerge/EbuildBuildDir.py | 172 +++--
pym/_emerge/EbuildFetcher.py | 135 +++-
pym/_emerge/EbuildIpcDaemon.py | 28 +-
pym/_emerge/EbuildMerge.py | 26 +-
pym/_emerge/EbuildMetadataPhase.py | 55 +-
pym/_emerge/EbuildPhase.py | 22 +-
pym/_emerge/FifoIpcDaemon.py | 32 +-
pym/_emerge/MetadataRegen.py | 14 +-
pym/_emerge/Package.py | 54 +-
pym/_emerge/PackageUninstall.py | 37 +-
pym/_emerge/PipeReader.py | 42 +-
pym/_emerge/Scheduler.py | 106 ++--
pym/_emerge/SpawnProcess.py | 23 +-
pym/_emerge/SubProcess.py | 123 +---
pym/_emerge/actions.py | 53 +-
pym/_emerge/create_world_atom.py | 6 +-
pym/_emerge/depgraph.py | 33 +-
pym/_emerge/main.py | 13 +-
pym/_emerge/resolver/DbapiProvidesIndex.py | 3 +-
pym/portage/__init__.py | 8 +-
pym/portage/_emirrordist/FetchIterator.py | 323 ++++++----
pym/portage/_emirrordist/FetchTask.py | 2 +-
pym/portage/_emirrordist/MirrorDistTask.py | 27 +-
pym/portage/_legacy_globals.py | 3 +-
pym/portage/const.py | 2 +-
pym/portage/dbapi/IndexedVardb.py | 2 +-
pym/portage/dbapi/_MergeProcess.py | 47 +-
pym/portage/dbapi/__init__.py | 44 +-
pym/portage/dbapi/bintree.py | 89 ++-
pym/portage/dbapi/porttree.py | 153 ++++-
pym/portage/dbapi/vartree.py | 10 +-
pym/portage/dbapi/virtual.py | 4 +-
pym/portage/eapi.py | 16 +-
pym/portage/emaint/modules/binhost/binhost.py | 1 +
pym/portage/exception.py | 3 +
.../package/ebuild/_config/LocationsManager.py | 25 +-
.../package/ebuild/_config/special_env_vars.py | 8 +-
pym/portage/package/ebuild/_ipc/QueryCommand.py | 4 +-
.../ebuild/_parallel_manifest/ManifestScheduler.py | 25 +-
.../ebuild/_parallel_manifest/ManifestTask.py | 24 +-
pym/portage/package/ebuild/config.py | 44 +-
pym/portage/package/ebuild/doebuild.py | 30 +-
pym/portage/package/ebuild/profile_iuse.py | 32 +
pym/portage/process.py | 10 +
pym/portage/sync/modules/rsync/rsync.py | 42 +-
pym/portage/tests/__init__.py | 20 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 3 +-
pym/portage/tests/ebuild/test_ipc_daemon.py | 6 +-
pym/portage/tests/emerge/test_simple.py | 51 +-
pym/portage/tests/locks/test_asynchronous_lock.py | 22 +-
pym/portage/tests/resolver/ResolverPlayground.py | 10 +
pym/portage/tests/resolver/test_autounmask.py | 48 +-
pym/portage/tests/resolver/test_eapi.py | 2 +-
pym/portage/tests/resolver/test_required_use.py | 6 +-
pym/portage/tests/resolver/test_slot_collisions.py | 20 +-
.../tests/resolver/test_slot_operator_rebuild.py | 45 +-
pym/portage/tests/runTests.py | 6 +-
.../util/futures/asyncio}/__init__.py | 0
.../{bin => util/futures/asyncio}/__test__.py | 0
.../util/futures/asyncio/test_child_watcher.py | 50 ++
.../futures/asyncio/test_event_loop_in_fork.py | 65 ++
.../tests/util/futures/asyncio/test_pipe_closed.py | 151 +++++
.../asyncio/test_policy_wrapper_recursion.py | 29 +
.../futures/asyncio/test_run_until_complete.py | 34 +
.../util/futures/asyncio/test_subprocess_exec.py | 236 +++++++
.../tests/util/futures/test_iter_completed.py | 40 +-
pym/portage/tests/util/futures/test_retry.py | 177 ++++--
pym/portage/util/SlotObject.py | 9 +-
pym/portage/util/_async/AsyncFunction.py | 7 +-
pym/portage/util/_async/AsyncScheduler.py | 49 +-
pym/portage/util/_async/AsyncTaskFuture.py | 4 +-
pym/portage/util/_async/FileDigester.py | 7 +-
pym/portage/util/_async/ForkProcess.py | 10 +
pym/portage/util/_async/PipeLogger.py | 32 +-
pym/portage/util/_async/PipeReaderBlockingIO.py | 16 +-
pym/portage/util/_async/PopenProcess.py | 17 +-
pym/portage/util/_async/SchedulerInterface.py | 34 +-
pym/portage/util/_eventloop/EventLoop.py | 374 +++++++++--
pym/portage/util/_eventloop/GlibEventLoop.py | 23 -
pym/portage/util/_eventloop/asyncio_event_loop.py | 85 +++
pym/portage/util/_eventloop/global_event_loop.py | 11 +-
pym/portage/util/elf/constants.py | 4 +-
pym/portage/util/futures/__init__.py | 8 +
pym/portage/util/futures/_asyncio/__init__.py | 185 ++++++
.../util/futures/{wait.py => _asyncio/tasks.py} | 19 +-
pym/portage/util/futures/events.py | 191 ++++++
pym/portage/util/futures/executor/fork.py | 6 +-
pym/portage/util/futures/futures.py | 9 +-
pym/portage/util/futures/iter_completed.py | 138 +++-
pym/portage/util/futures/retry.py | 13 +-
pym/portage/util/futures/transports.py | 90 +++
pym/portage/util/futures/unix_events.py | 705 +++++++++++++++++++++
pym/portage/versions.py | 6 +-
repoman/bin/repoman | 3 +
repoman/cnf/qa_data/qa_data.yaml | 2 +-
repoman/man/repoman.1 | 2 +-
.../modules/linechecks/assignment/assignment.py | 9 +-
.../modules/linechecks/deprecated/inherit.py | 3 +
.../repoman/modules/linechecks/quotes/quotes.py | 3 +-
repoman/pym/repoman/modules/scan/fetch/fetches.py | 2 +-
repoman/pym/repoman/modules/scan/module.py | 2 +-
repoman/pym/repoman/tests/__init__.py | 3 +
repoman/pym/repoman/tests/runTests.py | 6 +-
repoman/setup.py | 3 +-
setup.py | 5 +-
138 files changed, 4789 insertions(+), 1438 deletions(-)
diff --cc pym/_emerge/Package.py
index 5d86c9635,a7ce00bc9..2be526471
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@@ -82,24 -93,10 +93,16 @@@ class Package(Task)
# sync metadata with validated repo (may be UNKNOWN_REPO)
self._metadata['repository'] = self.cpv.repo
- if eapi_attrs.iuse_effective:
- implicit_match = self.root_config.settings._iuse_effective_match
- if self.built:
- implicit_match = functools.partial(
- self._built_iuse_effective_match,
- implicit_match, frozenset(self._metadata['USE'].split()))
- else:
- implicit_match = self.root_config.settings._iuse_implicit_match
- iuse = self._metadata["IUSE"]
+ implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ if 'force-multilib' in self.root_config.settings.features:
+ if self.built is False:
+ for multilib_abis in self.root_config.settings.get("MULTILIB_ABIS", '').split():
+ iuse += " multilib_abi_" + multilib_abis
+ iuse += " abiwrapper"
+ self._metadata["IUSE"] = iuse
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
- self.iuse = self._iuse(self, iuse.split(), implicit_match,
- usealiases, self.eapi)
+ self.iuse = self._iuse(self, self._metadata["IUSE"].split(),
+ implicit_match, usealiases, self.eapi)
if (self.iuse.enabled or self.iuse.disabled) and \
not eapi_attrs.iuse_defaults:
diff --cc pym/_emerge/actions.py
index 966b4421b,70fb8d3b4..f53c33b46
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@@ -2868,16 -2882,29 +2882,36 @@@ def run_action(emerge_config)
"--usepkg", "--usepkgonly"):
emerge_config.opts.pop(opt, None)
+ # Populate the bintree with current --getbinpkg setting.
+ # This needs to happen before:
+ # * expand_set_arguments, in case any sets use the bintree
+ # * adjust_configs and profile_check, in order to propagate settings
+ # implicit IUSE and USE_EXPAND settings from the binhost(s)
+ if (emerge_config.action in ('search', None) and
+ '--usepkg' in emerge_config.opts):
+ for mytrees in emerge_config.trees.values():
+ try:
+ mytrees['bintree'].populate(
+ getbinpkgs='--getbinpkg' in emerge_config.opts)
+ except ParseError as e:
+ writemsg('\n\n!!!%s.\nSee make.conf(5) for more info.\n'
+ % (e,), noiselevel=-1)
+ return 1
+
adjust_configs(emerge_config.opts, emerge_config.trees)
+
+ if profile_check(emerge_config.trees, emerge_config.action) != os.EX_OK:
+ return 1
+
apply_priorities(emerge_config.target_config.settings)
+ if 'force-multilib' in emerge_config.target_config.settings.features:
+ if emerge_config.target_config.settings.get("NO_AUTO_FLAG", "") is "":
+ writemsg_level(bad("!!! Failed to find vars from extra profile") + "\n",level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! Please make sure that you did follow the instructions and included the extra profile\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! http://git.overlays.gentoo.org/gitweb/?p=proj/multilib-portage.git;a=blob;f=doc/portage-multilib-instructions\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! has some basic instructions for the setup\n"),level=logging.ERROR, noiselevel=-1)
+ return 1
if ("--autounmask-continue" in emerge_config.opts and
emerge_config.opts.get("--autounmask") == "n"):
writemsg_level(
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2018-09-01 11:03 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2018-09-01 11:03 UTC (permalink / raw
To: gentoo-commits
commit: cb6737033d90f57168ed12e4b0cec8711b311b36
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 1 09:30:48 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Sep 1 09:30:48 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=cb673703
Merge portage-2.3.48
.gitignore | 1 +
.travis.yml | 28 +--
NEWS | 10 +
README | 4 +-
RELEASE-NOTES | 98 +++++++++
TEST-NOTES | 6 +-
bin/archive-conf | 2 +-
bin/binhost-snapshot | 2 +-
bin/clean_locks | 2 +-
bin/dispatch-conf | 2 +-
bin/ebuild | 10 +-
bin/ebuild-ipc.py | 2 +-
bin/ebuild.sh | 2 +-
bin/egencache | 2 +-
bin/emaint | 2 +-
bin/emerge | 2 +-
bin/emerge-webrsync | 23 +-
bin/env-update | 2 +-
bin/etc-update | 18 +-
bin/fixpackages | 2 +-
bin/glsa-check | 2 +-
bin/install-qa-check.d/10executable-issues | 6 +-
bin/install-qa-check.d/10ignored-flags | 6 +-
bin/install-qa-check.d/60pngfix | 14 +-
bin/install-qa-check.d/90bad-bin-group-write | 55 +++++
bin/install-qa-check.d/90bad-bin-owner | 48 +++++
bin/isolated-functions.sh | 6 +-
bin/misc-functions.sh | 8 +-
bin/phase-functions.sh | 7 +-
bin/portageq | 2 +-
bin/quickpkg | 2 +-
bin/regenworld | 2 +-
cnf/make.conf.example | 8 +-
cnf/make.conf.example.arm64.diff | 37 ++++
cnf/make.globals | 2 +-
{pym => lib}/_emerge/AbstractDepPriority.py | 0
{pym => lib}/_emerge/AbstractEbuildProcess.py | 15 +-
{pym => lib}/_emerge/AbstractPollTask.py | 12 +-
{pym => lib}/_emerge/AsynchronousLock.py | 0
{pym => lib}/_emerge/AsynchronousTask.py | 0
{pym => lib}/_emerge/AtomArg.py | 0
{pym => lib}/_emerge/Binpkg.py | 10 +-
{pym => lib}/_emerge/BinpkgEnvExtractor.py | 0
{pym => lib}/_emerge/BinpkgExtractorAsync.py | 0
{pym => lib}/_emerge/BinpkgFetcher.py | 8 +
{pym => lib}/_emerge/BinpkgPrefetcher.py | 0
{pym => lib}/_emerge/BinpkgVerifier.py | 0
{pym => lib}/_emerge/Blocker.py | 0
{pym => lib}/_emerge/BlockerCache.py | 0
{pym => lib}/_emerge/BlockerDB.py | 0
{pym => lib}/_emerge/BlockerDepPriority.py | 0
{pym => lib}/_emerge/CompositeTask.py | 1 +
{pym => lib}/_emerge/DepPriority.py | 0
{pym => lib}/_emerge/DepPriorityNormalRange.py | 0
{pym => lib}/_emerge/DepPrioritySatisfiedRange.py | 0
{pym => lib}/_emerge/Dependency.py | 0
{pym => lib}/_emerge/DependencyArg.py | 0
{pym => lib}/_emerge/EbuildBinpkg.py | 0
{pym => lib}/_emerge/EbuildBuild.py | 34 ++-
{pym => lib}/_emerge/EbuildBuildDir.py | 0
{pym => lib}/_emerge/EbuildExecuter.py | 0
{pym => lib}/_emerge/EbuildFetcher.py | 12 ++
{pym => lib}/_emerge/EbuildFetchonly.py | 5 +-
{pym => lib}/_emerge/EbuildIpcDaemon.py | 0
{pym => lib}/_emerge/EbuildMerge.py | 0
{pym => lib}/_emerge/EbuildMetadataPhase.py | 0
{pym => lib}/_emerge/EbuildPhase.py | 34 ++-
{pym => lib}/_emerge/EbuildProcess.py | 0
{pym => lib}/_emerge/EbuildSpawnProcess.py | 0
{pym => lib}/_emerge/FakeVartree.py | 0
{pym => lib}/_emerge/FifoIpcDaemon.py | 0
{pym => lib}/_emerge/JobStatusDisplay.py | 0
{pym => lib}/_emerge/MergeListItem.py | 0
{pym => lib}/_emerge/MetadataRegen.py | 0
{pym => lib}/_emerge/MiscFunctionsProcess.py | 6 +-
{pym => lib}/_emerge/Package.py | 5 +-
{pym => lib}/_emerge/PackageArg.py | 0
{pym => lib}/_emerge/PackageMerge.py | 0
{pym => lib}/_emerge/PackagePhase.py | 0
{pym => lib}/_emerge/PackageUninstall.py | 10 +-
{pym => lib}/_emerge/PackageVirtualDbapi.py | 0
{pym => lib}/_emerge/PipeReader.py | 19 +-
{pym => lib}/_emerge/PollScheduler.py | 0
{pym => lib}/_emerge/ProgressHandler.py | 0
{pym => lib}/_emerge/RootConfig.py | 0
{pym => lib}/_emerge/Scheduler.py | 3 +
{pym => lib}/_emerge/SequentialTaskQueue.py | 0
{pym => lib}/_emerge/SetArg.py | 0
{pym => lib}/_emerge/SpawnProcess.py | 3 +
{pym => lib}/_emerge/SubProcess.py | 0
{pym => lib}/_emerge/Task.py | 0
{pym => lib}/_emerge/TaskSequence.py | 0
{pym => lib}/_emerge/UninstallFailure.py | 0
{pym => lib}/_emerge/UnmergeDepPriority.py | 0
{pym => lib}/_emerge/UseFlagDisplay.py | 0
{pym => lib}/_emerge/UserQuery.py | 0
{pym => lib}/_emerge/__init__.py | 0
.../_emerge/_find_deep_system_runtime_deps.py | 0
{pym => lib}/_emerge/_flush_elog_mod_echo.py | 0
{pym => lib}/_emerge/actions.py | 19 +-
{pym => lib}/_emerge/chk_updated_cfg_files.py | 0
{pym => lib}/_emerge/clear_caches.py | 0
{pym => lib}/_emerge/countdown.py | 0
{pym => lib}/_emerge/create_depgraph_params.py | 2 +-
{pym => lib}/_emerge/create_world_atom.py | 2 +-
{pym => lib}/_emerge/depgraph.py | 16 +-
{pym => lib}/_emerge/emergelog.py | 0
{pym => lib}/_emerge/getloadavg.py | 0
{pym => lib}/_emerge/help.py | 0
{pym => lib}/_emerge/is_valid_package_atom.py | 0
{pym => lib}/_emerge/main.py | 0
{pym => lib}/_emerge/post_emerge.py | 0
.../_emerge/resolver/DbapiProvidesIndex.py | 0
{pym => lib}/_emerge/resolver/__init__.py | 0
{pym => lib}/_emerge/resolver/backtracking.py | 0
.../_emerge/resolver/circular_dependency.py | 0
{pym => lib}/_emerge/resolver/output.py | 0
{pym => lib}/_emerge/resolver/output_helpers.py | 0
{pym => lib}/_emerge/resolver/package_tracker.py | 0
{pym => lib}/_emerge/resolver/slot_collision.py | 0
{pym => lib}/_emerge/search.py | 2 +-
.../_emerge/show_invalid_depstring_notice.py | 0
{pym => lib}/_emerge/stdout_spinner.py | 0
{pym => lib}/_emerge/unmerge.py | 0
{pym => lib}/portage/__init__.py | 2 +-
{pym => lib}/portage/_emirrordist/Config.py | 0
.../portage/_emirrordist/DeletionIterator.py | 0
{pym => lib}/portage/_emirrordist/DeletionTask.py | 0
{pym => lib}/portage/_emirrordist/FetchIterator.py | 10 +
{pym => lib}/portage/_emirrordist/FetchTask.py | 0
.../portage/_emirrordist/MirrorDistTask.py | 0
{pym => lib}/portage/_emirrordist/__init__.py | 0
{pym => lib}/portage/_emirrordist/main.py | 0
{pym => lib}/portage/_global_updates.py | 2 +-
{pym => lib}/portage/_legacy_globals.py | 0
{pym => lib}/portage/_selinux.py | 0
{pym => lib}/portage/_sets/ProfilePackageSet.py | 0
{pym => lib}/portage/_sets/__init__.py | 0
{pym => lib}/portage/_sets/base.py | 0
{pym => lib}/portage/_sets/dbapi.py | 0
{pym => lib}/portage/_sets/files.py | 0
{pym => lib}/portage/_sets/libs.py | 0
{pym => lib}/portage/_sets/profiles.py | 0
{pym => lib}/portage/_sets/security.py | 0
{pym => lib}/portage/_sets/shell.py | 0
{pym => lib}/portage/cache/__init__.py | 0
{pym => lib}/portage/cache/anydbm.py | 0
{pym => lib}/portage/cache/cache_errors.py | 0
{pym => lib}/portage/cache/ebuild_xattr.py | 0
{pym => lib}/portage/cache/flat_hash.py | 0
{pym => lib}/portage/cache/fs_template.py | 0
.../portage/cache/index/IndexStreamIterator.py | 0
{pym => lib}/portage/cache/index/__init__.py | 0
{pym => lib}/portage/cache/index/pkg_desc_index.py | 0
{pym => lib}/portage/cache/mappings.py | 0
{pym => lib}/portage/cache/metadata.py | 0
{pym => lib}/portage/cache/sql_template.py | 0
{pym => lib}/portage/cache/sqlite.py | 0
{pym => lib}/portage/cache/template.py | 0
{pym => lib}/portage/cache/volatile.py | 0
{pym => lib}/portage/checksum.py | 0
{pym => lib}/portage/const.py | 0
{pym => lib}/portage/cvstree.py | 0
{pym => lib}/portage/data.py | 0
{pym => lib}/portage/dbapi/DummyTree.py | 0
{pym => lib}/portage/dbapi/IndexedPortdb.py | 0
{pym => lib}/portage/dbapi/IndexedVardb.py | 0
.../dbapi/_ContentsCaseSensitivityManager.py | 0
{pym => lib}/portage/dbapi/_MergeProcess.py | 0
{pym => lib}/portage/dbapi/_SyncfsProcess.py | 0
{pym => lib}/portage/dbapi/_VdbMetadataDelta.py | 0
{pym => lib}/portage/dbapi/__init__.py | 12 ++
{pym => lib}/portage/dbapi/_expand_new_virt.py | 0
{pym => lib}/portage/dbapi/_similar_name_search.py | 0
{pym => lib}/portage/dbapi/bintree.py | 4 +-
{pym => lib}/portage/dbapi/cpv_expand.py | 0
{pym => lib}/portage/dbapi/dep_expand.py | 0
{pym => lib}/portage/dbapi/porttree.py | 83 +++++---
{pym => lib}/portage/dbapi/vartree.py | 27 ++-
{pym => lib}/portage/dbapi/virtual.py | 0
{pym => lib}/portage/debug.py | 2 +-
{pym => lib}/portage/dep/__init__.py | 0
{pym => lib}/portage/dep/_dnf.py | 0
{pym => lib}/portage/dep/_slot_operator.py | 0
{pym => lib}/portage/dep/dep_check.py | 0
{pym => lib}/portage/dep/soname/SonameAtom.py | 0
{pym => lib}/portage/dep/soname/__init__.py | 0
.../portage/dep/soname/multilib_category.py | 0
{pym => lib}/portage/dep/soname/parse.py | 0
{pym => lib}/portage/dispatch_conf.py | 0
{pym => lib}/portage/eapi.py | 2 +-
{pym => lib}/portage/eclass_cache.py | 0
{pym => lib}/portage/elog/__init__.py | 0
{pym => lib}/portage/elog/filtering.py | 0
{pym => lib}/portage/elog/messages.py | 0
{pym => lib}/portage/elog/mod_custom.py | 0
{pym => lib}/portage/elog/mod_echo.py | 0
{pym => lib}/portage/elog/mod_mail.py | 0
{pym => lib}/portage/elog/mod_mail_summary.py | 0
{pym => lib}/portage/elog/mod_save.py | 0
{pym => lib}/portage/elog/mod_save_summary.py | 0
{pym => lib}/portage/elog/mod_syslog.py | 0
{pym => lib}/portage/emaint/__init__.py | 0
{pym => lib}/portage/emaint/defaults.py | 0
{pym => lib}/portage/emaint/main.py | 0
{pym => lib}/portage/emaint/modules/__init__.py | 0
.../portage/emaint/modules/binhost/__init__.py | 0
.../portage/emaint/modules/binhost/binhost.py | 0
.../portage/emaint/modules/config/__init__.py | 0
.../portage/emaint/modules/config/config.py | 0
.../portage/emaint/modules/logs/__init__.py | 0
{pym => lib}/portage/emaint/modules/logs/logs.py | 0
.../portage/emaint/modules/merges/__init__.py | 0
.../portage/emaint/modules/merges/merges.py | 2 +-
.../portage/emaint/modules/move/__init__.py | 0
{pym => lib}/portage/emaint/modules/move/move.py | 0
.../portage/emaint/modules/resume/__init__.py | 0
.../portage/emaint/modules/resume/resume.py | 0
.../portage/emaint/modules/sync/__init__.py | 0
{pym => lib}/portage/emaint/modules/sync/sync.py | 0
.../portage/emaint/modules/world/__init__.py | 0
{pym => lib}/portage/emaint/modules/world/world.py | 0
{pym => lib}/portage/env/__init__.py | 0
{pym => lib}/portage/env/config.py | 0
{pym => lib}/portage/env/loaders.py | 0
{pym => lib}/portage/env/validators.py | 0
{pym => lib}/portage/exception.py | 0
{pym => lib}/portage/getbinpkg.py | 0
{pym => lib}/portage/glsa.py | 0
{pym => lib}/portage/localization.py | 0
{pym => lib}/portage/locks.py | 0
{pym => lib}/portage/mail.py | 0
{pym => lib}/portage/manifest.py | 0
{pym => lib}/portage/metadata.py | 6 +-
{pym => lib}/portage/module.py | 0
{pym => lib}/portage/news.py | 2 +-
{pym => lib}/portage/output.py | 0
{pym => lib}/portage/package/__init__.py | 0
{pym => lib}/portage/package/ebuild/__init__.py | 0
.../package/ebuild/_config/KeywordsManager.py | 0
.../package/ebuild/_config/LicenseManager.py | 0
.../package/ebuild/_config/LocationsManager.py | 5 +-
.../portage/package/ebuild/_config/MaskManager.py | 0
.../portage/package/ebuild/_config/UseManager.py | 0
.../package/ebuild/_config/VirtualsManager.py | 0
.../portage/package/ebuild/_config/__init__.py | 0
.../package/ebuild/_config/env_var_validation.py | 0
.../portage/package/ebuild/_config/features_set.py | 0
.../portage/package/ebuild/_config/helper.py | 0
.../package/ebuild/_config/special_env_vars.py | 0
.../package/ebuild/_config/unpack_dependencies.py | 0
.../portage/package/ebuild/_ipc/ExitCommand.py | 0
.../portage/package/ebuild/_ipc/IpcCommand.py | 0
.../portage/package/ebuild/_ipc/QueryCommand.py | 0
.../portage/package/ebuild/_ipc/__init__.py | 0
.../portage/package/ebuild/_metadata_invalid.py | 0
.../ebuild/_parallel_manifest/ManifestProcess.py | 0
.../ebuild/_parallel_manifest/ManifestScheduler.py | 0
.../ebuild/_parallel_manifest/ManifestTask.py | 0
.../package/ebuild/_parallel_manifest/__init__.py | 0
.../portage/package/ebuild/_spawn_nofetch.py | 0
{pym => lib}/portage/package/ebuild/config.py | 145 ++++++++-----
.../package/ebuild/deprecated_profile_check.py | 0
{pym => lib}/portage/package/ebuild/digestcheck.py | 0
{pym => lib}/portage/package/ebuild/digestgen.py | 0
{pym => lib}/portage/package/ebuild/doebuild.py | 73 ++++---
{pym => lib}/portage/package/ebuild/fetch.py | 0
.../portage/package/ebuild/getmaskingreason.py | 0
.../portage/package/ebuild/getmaskingstatus.py | 0
.../portage/package/ebuild/prepare_build_dirs.py | 5 +-
.../portage/package/ebuild/profile_iuse.py | 0
{pym => lib}/portage/process.py | 0
{pym => lib}/portage/progress.py | 0
{pym => lib}/portage/proxy/__init__.py | 0
{pym => lib}/portage/proxy/lazyimport.py | 0
{pym => lib}/portage/proxy/objectproxy.py | 0
{pym => lib}/portage/repository/__init__.py | 0
{pym => lib}/portage/repository/config.py | 16 +-
{pym => lib}/portage/sync/__init__.py | 0
{pym => lib}/portage/sync/config_checks.py | 0
{pym => lib}/portage/sync/controller.py | 0
{pym => lib}/portage/sync/getaddrinfo_validate.py | 0
{pym => lib}/portage/sync/modules/__init__.py | 0
{pym => lib}/portage/sync/modules/cvs/__init__.py | 0
{pym => lib}/portage/sync/modules/cvs/cvs.py | 0
{pym => lib}/portage/sync/modules/git/__init__.py | 0
{pym => lib}/portage/sync/modules/git/git.py | 72 ++++++-
.../portage/sync/modules/rsync/__init__.py | 0
{pym => lib}/portage/sync/modules/rsync/rsync.py | 122 +++++++----
{pym => lib}/portage/sync/modules/svn/__init__.py | 0
{pym => lib}/portage/sync/modules/svn/svn.py | 0
.../portage/sync/modules/webrsync/__init__.py | 6 +-
lib/portage/sync/modules/webrsync/webrsync.py | 136 ++++++++++++
{pym => lib}/portage/sync/old_tree_timestamp.py | 0
{pym => lib}/portage/sync/syncbase.py | 41 ++++
{pym => lib}/portage/tests/__init__.py | 0
{pym => lib}/portage/tests/bin/__init__.py | 0
{pym => lib}/portage/tests/bin/__test__.py | 0
{pym => lib}/portage/tests/bin/setup_env.py | 0
{pym => lib}/portage/tests/bin/test_dobin.py | 0
{pym => lib}/portage/tests/bin/test_dodir.py | 0
{pym => lib}/portage/tests/bin/test_doins.py | 0
.../portage/tests/bin/test_eapi7_ver_funcs.py | 0
.../portage/tests/bin/test_filter_bash_env.py | 0
{pym => lib}/portage/tests/dbapi/__init__.py | 0
{pym => lib}/portage/tests/dbapi/__test__.py | 0
{pym => lib}/portage/tests/dbapi/test_fakedbapi.py | 0
.../portage/tests/dbapi/test_portdb_cache.py | 0
{pym => lib}/portage/tests/dep/__init__.py | 0
{pym => lib}/portage/tests/dep/__test__.py | 0
{pym => lib}/portage/tests/dep/testAtom.py | 0
.../portage/tests/dep/testCheckRequiredUse.py | 0
.../portage/tests/dep/testExtendedAtomDict.py | 0
.../portage/tests/dep/testExtractAffectingUSE.py | 0
{pym => lib}/portage/tests/dep/testStandalone.py | 0
.../portage/tests/dep/test_best_match_to_list.py | 0
{pym => lib}/portage/tests/dep/test_dep_getcpv.py | 0
{pym => lib}/portage/tests/dep/test_dep_getrepo.py | 0
{pym => lib}/portage/tests/dep/test_dep_getslot.py | 0
.../portage/tests/dep/test_dep_getusedeps.py | 0
{pym => lib}/portage/tests/dep/test_dnf_convert.py | 0
.../portage/tests/dep/test_get_operator.py | 0
.../tests/dep/test_get_required_use_flags.py | 0
{pym => lib}/portage/tests/dep/test_isjustname.py | 0
{pym => lib}/portage/tests/dep/test_isvalidatom.py | 0
.../portage/tests/dep/test_match_from_list.py | 0
{pym => lib}/portage/tests/dep/test_overlap_dnf.py | 0
.../portage/tests/dep/test_paren_reduce.py | 0
{pym => lib}/portage/tests/dep/test_use_reduce.py | 0
{pym => lib}/portage/tests/ebuild/__init__.py | 0
{pym => lib}/portage/tests/ebuild/__test__.py | 0
.../tests/ebuild/test_array_fromfile_eof.py | 0
{pym => lib}/portage/tests/ebuild/test_config.py | 0
.../portage/tests/ebuild/test_doebuild_fd_pipes.py | 0
.../portage/tests/ebuild/test_doebuild_spawn.py | 0
.../portage/tests/ebuild/test_ipc_daemon.py | 0
{pym => lib}/portage/tests/ebuild/test_spawn.py | 0
.../tests/ebuild/test_use_expand_incremental.py | 0
{pym => lib}/portage/tests/emerge/__init__.py | 0
{pym => lib}/portage/tests/emerge/__test__.py | 0
.../portage/tests/emerge/test_config_protect.py | 0
.../emerge/test_emerge_blocker_file_collision.py | 0
.../portage/tests/emerge/test_emerge_slot_abi.py | 0
.../portage/tests/emerge/test_global_updates.py | 0
{pym => lib}/portage/tests/emerge/test_simple.py | 0
{pym => lib}/portage/tests/env/__init__.py | 0
{pym => lib}/portage/tests/env/__test__.py | 0
{pym => lib}/portage/tests/env/config/__init__.py | 0
{pym => lib}/portage/tests/env/config/__test__.py | 0
.../tests/env/config/test_PackageKeywordsFile.py | 0
.../tests/env/config/test_PackageMaskFile.py | 0
.../tests/env/config/test_PackageUseFile.py | 0
.../tests/env/config/test_PortageModulesFile.py | 0
{pym => lib}/portage/tests/glsa/__init__.py | 0
{pym => lib}/portage/tests/glsa/__test__.py | 0
.../portage/tests/glsa/test_security_set.py | 0
{pym => lib}/portage/tests/lafilefixer/__init__.py | 0
{pym => lib}/portage/tests/lafilefixer/__test__.py | 0
.../portage/tests/lafilefixer/test_lafilefixer.py | 0
{pym => lib}/portage/tests/lazyimport/__init__.py | 0
{pym => lib}/portage/tests/lazyimport/__test__.py | 0
.../test_lazy_import_portage_baseline.py | 0
.../lazyimport/test_preload_portage_submodules.py | 0
{pym => lib}/portage/tests/lint/__init__.py | 0
{pym => lib}/portage/tests/lint/__test__.py | 0
{pym => lib}/portage/tests/lint/metadata.py | 0
.../portage/tests/lint/test_bash_syntax.py | 0
.../portage/tests/lint/test_compile_modules.py | 0
.../portage/tests/lint/test_import_modules.py | 0
{pym => lib}/portage/tests/locks/__init__.py | 0
{pym => lib}/portage/tests/locks/__test__.py | 0
.../portage/tests/locks/test_asynchronous_lock.py | 0
.../portage/tests/locks/test_lock_nonblock.py | 0
{pym => lib}/portage/tests/news/__init__.py | 0
{pym => lib}/portage/tests/news/__test__.py | 0
{pym => lib}/portage/tests/news/test_NewsItem.py | 0
{pym => lib}/portage/tests/process/__init__.py | 0
{pym => lib}/portage/tests/process/__test__.py | 0
.../portage/tests/process/test_PopenProcess.py | 0
.../tests/process/test_PopenProcessBlockingIO.py | 0
{pym => lib}/portage/tests/process/test_poll.py | 75 ++++---
.../portage/tests/resolver/ResolverPlayground.py | 0
{pym => lib}/portage/tests/resolver/__init__.py | 0
{pym => lib}/portage/tests/resolver/__test__.py | 0
.../resolver/binpkg_multi_instance/__init__.py | 0
.../resolver/binpkg_multi_instance/__test__.py | 0
.../test_build_id_profile_format.py | 0
.../binpkg_multi_instance/test_rebuilt_binaries.py | 0
.../portage/tests/resolver/soname/__init__.py | 0
.../portage/tests/resolver/soname/__test__.py | 0
.../tests/resolver/soname/test_autounmask.py | 0
.../portage/tests/resolver/soname/test_depclean.py | 0
.../tests/resolver/soname/test_downgrade.py | 0
.../tests/resolver/soname/test_or_choices.py | 0
.../tests/resolver/soname/test_reinstall.py | 0
.../tests/resolver/soname/test_skip_update.py | 0
.../soname/test_slot_conflict_reinstall.py | 0
.../resolver/soname/test_slot_conflict_update.py | 0
.../tests/resolver/soname/test_soname_provided.py | 0
.../tests/resolver/soname/test_unsatisfiable.py | 0
.../tests/resolver/soname/test_unsatisfied.py | 0
.../portage/tests/resolver/test_autounmask.py | 0
.../tests/resolver/test_autounmask_binpkg_use.py | 0
.../resolver/test_autounmask_keep_keywords.py | 0
.../tests/resolver/test_autounmask_multilib_use.py | 0
.../tests/resolver/test_autounmask_parent.py | 0
.../resolver/test_autounmask_use_backtrack.py | 0
.../tests/resolver/test_autounmask_use_breakage.py | 0
.../portage/tests/resolver/test_backtracking.py | 0
{pym => lib}/portage/tests/resolver/test_bdeps.py | 0
.../resolver/test_binary_pkg_ebuild_visibility.py | 0
.../portage/tests/resolver/test_blocker.py | 0
.../portage/tests/resolver/test_changed_deps.py | 0
.../tests/resolver/test_circular_choices.py | 0
.../tests/resolver/test_circular_dependencies.py | 0
.../portage/tests/resolver/test_complete_graph.py | 0
...test_complete_if_new_subslot_without_revbump.py | 0
.../portage/tests/resolver/test_depclean.py | 0
.../portage/tests/resolver/test_depclean_order.py | 0
.../resolver/test_depclean_slot_unavailable.py | 0
{pym => lib}/portage/tests/resolver/test_depth.py | 0
.../resolver/test_disjunctive_depend_order.py | 0
{pym => lib}/portage/tests/resolver/test_eapi.py | 0
.../tests/resolver/test_features_test_use.py | 88 ++++++++
.../resolver/test_imagemagick_graphicsmagick.py | 0
.../portage/tests/resolver/test_keywords.py | 0
.../portage/tests/resolver/test_merge_order.py | 0
.../test_missing_iuse_and_evaluated_atoms.py | 0
.../portage/tests/resolver/test_multirepo.py | 0
.../portage/tests/resolver/test_multislot.py | 0
.../tests/resolver/test_old_dep_chain_display.py | 0
.../portage/tests/resolver/test_onlydeps.py | 0
.../tests/resolver/test_onlydeps_circular.py | 0
.../tests/resolver/test_onlydeps_minimal.py | 0
.../portage/tests/resolver/test_or_choices.py | 0
.../tests/resolver/test_or_downgrade_installed.py | 0
.../tests/resolver/test_or_upgrade_installed.py | 0
{pym => lib}/portage/tests/resolver/test_output.py | 0
.../portage/tests/resolver/test_package_tracker.py | 0
.../tests/resolver/test_profile_default_eapi.py | 0
.../tests/resolver/test_profile_package_set.py | 0
.../portage/tests/resolver/test_rebuild.py | 0
.../test_regular_slot_change_without_revbump.py | 0
.../portage/tests/resolver/test_required_use.py | 0
.../resolver/test_runtime_cycle_merge_order.py | 0
{pym => lib}/portage/tests/resolver/test_simple.py | 0
.../portage/tests/resolver/test_slot_abi.py | 0
.../tests/resolver/test_slot_abi_downgrade.py | 0
.../resolver/test_slot_change_without_revbump.py | 0
.../portage/tests/resolver/test_slot_collisions.py | 0
.../resolver/test_slot_conflict_force_rebuild.py | 0
.../resolver/test_slot_conflict_mask_update.py | 0
.../tests/resolver/test_slot_conflict_rebuild.py | 0
.../test_slot_conflict_unsatisfied_deep_deps.py | 0
.../tests/resolver/test_slot_conflict_update.py | 0
.../resolver/test_slot_operator_autounmask.py | 0
.../resolver/test_slot_operator_complete_graph.py | 0
.../resolver/test_slot_operator_exclusive_slots.py | 0
.../tests/resolver/test_slot_operator_rebuild.py | 0
.../resolver/test_slot_operator_required_use.py | 0
.../resolver/test_slot_operator_reverse_deps.py | 0
.../test_slot_operator_runtime_pkg_mask.py | 0
.../resolver/test_slot_operator_unsatisfied.py | 0
.../tests/resolver/test_slot_operator_unsolved.py | 0
..._slot_operator_update_probe_parent_downgrade.py | 0
.../test_solve_non_slot_operator_slot_conflicts.py | 0
.../portage/tests/resolver/test_targetroot.py | 0
.../tests/resolver/test_unpack_dependencies.py | 0
.../portage/tests/resolver/test_use_aliases.py | 0
.../tests/resolver/test_use_dep_defaults.py | 0
.../portage/tests/resolver/test_useflags.py | 0
.../resolver/test_virtual_minimize_children.py | 0
.../portage/tests/resolver/test_virtual_slot.py | 0
.../portage/tests/resolver/test_with_test_deps.py | 0
{pym => lib}/portage/tests/runTests.py | 0
{pym => lib}/portage/tests/sets/__init__.py | 0
{pym => lib}/portage/tests/sets/__test__.py | 0
{pym => lib}/portage/tests/sets/base/__init__.py | 0
{pym => lib}/portage/tests/sets/base/__test__.py | 0
.../tests/sets/base/testInternalPackageSet.py | 0
{pym => lib}/portage/tests/sets/files/__init__.py | 0
{pym => lib}/portage/tests/sets/files/__test__.py | 0
.../portage/tests/sets/files/testConfigFileSet.py | 0
.../portage/tests/sets/files/testStaticFileSet.py | 0
{pym => lib}/portage/tests/sets/shell/__init__.py | 0
{pym => lib}/portage/tests/sets/shell/__test__.py | 0
{pym => lib}/portage/tests/sets/shell/testShell.py | 0
{pym => lib}/portage/tests/sync/__init__.py | 0
{pym => lib}/portage/tests/sync/__test__.py | 0
{pym => lib}/portage/tests/sync/test_sync_local.py | 15 +-
{pym => lib}/portage/tests/unicode/__init__.py | 0
{pym => lib}/portage/tests/unicode/__test__.py | 0
.../portage/tests/unicode/test_string_format.py | 0
{pym => lib}/portage/tests/update/__init__.py | 0
{pym => lib}/portage/tests/update/__test__.py | 0
{pym => lib}/portage/tests/update/test_move_ent.py | 0
.../portage/tests/update/test_move_slot_ent.py | 0
.../portage/tests/update/test_update_dbentry.py | 0
{pym => lib}/portage/tests/util/__init__.py | 0
{pym => lib}/portage/tests/util/__test__.py | 0
.../portage/tests/util/dyn_libs}/__init__.py | 0
.../portage/tests/util/dyn_libs}/__test__.py | 0
.../tests/util/dyn_libs/test_soname_deps.py | 34 +++
.../portage/tests/util/eventloop}/__init__.py | 0
.../portage/tests/util/eventloop}/__test__.py | 0
.../tests/util/eventloop/test_call_soon_fifo.py | 0
.../portage/tests/util/file_copy}/__init__.py | 0
.../portage/tests/util/file_copy}/__test__.py | 0
.../portage/tests/util/file_copy/test_copyfile.py | 0
.../portage/tests/util/futures}/__init__.py | 0
.../portage/tests/util/futures}/__test__.py | 0
.../tests/util/futures/asyncio}/__init__.py | 0
.../tests/util/futures/asyncio}/__test__.py | 0
.../util/futures/asyncio/test_child_watcher.py | 0
.../futures/asyncio/test_event_loop_in_fork.py | 0
.../tests/util/futures/asyncio/test_pipe_closed.py | 0
.../asyncio/test_policy_wrapper_recursion.py | 0
.../futures/asyncio/test_run_until_complete.py | 0
.../util/futures/asyncio/test_subprocess_exec.py | 160 ++++++++++++++
.../util/futures/asyncio/test_wakeup_fd_sigchld.py | 76 +++++++
.../tests/util/futures/test_compat_coroutine.py | 159 ++++++++++++++
.../tests/util/futures/test_done_callback.py | 0
.../tests/util/futures/test_iter_completed.py | 0
.../portage/tests/util/futures/test_retry.py | 0
{pym => lib}/portage/tests/util/test_checksum.py | 0
{pym => lib}/portage/tests/util/test_digraph.py | 0
{pym => lib}/portage/tests/util/test_getconfig.py | 0
{pym => lib}/portage/tests/util/test_grabdict.py | 0
lib/portage/tests/util/test_install_mask.py | 129 +++++++++++
.../portage/tests/util/test_normalizedPath.py | 0
.../portage/tests/util/test_stackDictList.py | 0
{pym => lib}/portage/tests/util/test_stackDicts.py | 0
{pym => lib}/portage/tests/util/test_stackLists.py | 0
.../portage/tests/util/test_uniqueArray.py | 0
{pym => lib}/portage/tests/util/test_varExpand.py | 0
{pym => lib}/portage/tests/util/test_whirlpool.py | 0
{pym => lib}/portage/tests/util/test_xattr.py | 0
{pym => lib}/portage/tests/versions/__init__.py | 0
.../portage/tests/versions}/__test__.py | 0
.../portage/tests/versions/test_cpv_sort_key.py | 0
{pym => lib}/portage/tests/versions/test_vercmp.py | 0
{pym => lib}/portage/tests/xpak/__init__.py | 0
.../tests => lib/portage/tests/xpak}/__test__.py | 0
{pym => lib}/portage/tests/xpak/test_decodeint.py | 0
{pym => lib}/portage/update.py | 0
{pym => lib}/portage/util/ExtractKernelVersion.py | 0
{pym => lib}/portage/util/SlotObject.py | 0
{pym => lib}/portage/util/_ShelveUnicodeWrapper.py | 0
{pym => lib}/portage/util/__init__.py | 0
{pym => lib}/portage/util/_async/AsyncFunction.py | 0
{pym => lib}/portage/util/_async/AsyncScheduler.py | 0
.../portage/util/_async/AsyncTaskFuture.py | 0
{pym => lib}/portage/util/_async/FileCopier.py | 0
{pym => lib}/portage/util/_async/FileDigester.py | 0
{pym => lib}/portage/util/_async/ForkProcess.py | 0
{pym => lib}/portage/util/_async/PipeLogger.py | 0
.../portage/util/_async/PipeReaderBlockingIO.py | 0
{pym => lib}/portage/util/_async/PopenProcess.py | 0
.../portage/util/_async/SchedulerInterface.py | 0
{pym => lib}/portage/util/_async/TaskScheduler.py | 0
{pym => lib}/portage/util/_async/__init__.py | 0
.../portage/util/_async/run_main_scheduler.py | 0
{pym => lib}/portage/util/_ctypes.py | 0
{pym => lib}/portage/util/_desktop_entry.py | 0
.../portage/util/_dyn_libs/LinkageMapELF.py | 0
{pym => lib}/portage/util/_dyn_libs/NeededEntry.py | 0
.../util/_dyn_libs/PreservedLibsRegistry.py | 0
{pym => lib}/portage/util/_dyn_libs/__init__.py | 0
.../util/_dyn_libs/display_preserved_libs.py | 0
{pym => lib}/portage/util/_dyn_libs/soname_deps.py | 42 +++-
{pym => lib}/portage/util/_eventloop/EventLoop.py | 52 ++++-
.../portage/util/_eventloop/PollConstants.py | 0
.../portage/util/_eventloop/PollSelectAdapter.py | 0
{pym => lib}/portage/util/_eventloop/__init__.py | 0
.../portage/util/_eventloop/asyncio_event_loop.py | 66 +++++-
.../portage/util/_eventloop/global_event_loop.py | 0
{pym => lib}/portage/util/_get_vm_info.py | 0
{pym => lib}/portage/util/_info_files.py | 0
{pym => lib}/portage/util/_path.py | 0
{pym => lib}/portage/util/_pty.py | 0
{pym => lib}/portage/util/_urlopen.py | 0
{pym => lib}/portage/util/_xattr.py | 0
{pym => lib}/portage/util/backoff.py | 0
{pym => lib}/portage/util/changelog.py | 0
{pym => lib}/portage/util/compression_probe.py | 2 +-
{pym => lib}/portage/util/configparser.py | 0
{pym => lib}/portage/util/cpuinfo.py | 0
{pym => lib}/portage/util/digraph.py | 0
{pym => lib}/portage/util/elf/__init__.py | 0
{pym => lib}/portage/util/elf/constants.py | 0
{pym => lib}/portage/util/elf/header.py | 0
{pym => lib}/portage/util/endian/__init__.py | 0
{pym => lib}/portage/util/endian/decode.py | 0
{pym => lib}/portage/util/env_update.py | 0
{pym => lib}/portage/util/file_copy/__init__.py | 0
{pym => lib}/portage/util/formatter.py | 0
{pym => lib}/portage/util/futures/__init__.py | 0
.../portage/util/futures/_asyncio/__init__.py | 53 +++++
lib/portage/util/futures/_asyncio/process.py | 107 ++++++++++
lib/portage/util/futures/_asyncio/streams.py | 96 +++++++++
.../portage/util/futures/_asyncio/tasks.py | 0
lib/portage/util/futures/compat_coroutine.py | 116 ++++++++++
{pym => lib}/portage/util/futures/events.py | 0
.../portage/util/futures/executor}/__init__.py | 0
{pym => lib}/portage/util/futures/executor/fork.py | 0
.../portage/util/futures/extendedfutures.py | 0
{pym => lib}/portage/util/futures/futures.py | 0
.../portage/util/futures/iter_completed.py | 0
{pym => lib}/portage/util/futures/retry.py | 0
{pym => lib}/portage/util/futures/transports.py | 0
{pym => lib}/portage/util/futures/unix_events.py | 0
{pym => lib}/portage/util/install_mask.py | 7 +-
.../portage/util/iterators/MultiIterGroupBy.py | 0
{pym => lib}/portage/util/iterators/__init__.py | 0
{pym => lib}/portage/util/lafilefixer.py | 0
{pym => lib}/portage/util/listdir.py | 0
{pym => lib}/portage/util/locale.py | 0
{pym => lib}/portage/util/monotonic.py | 0
{pym => lib}/portage/util/movefile.py | 0
{pym => lib}/portage/util/mtimedb.py | 0
{pym => lib}/portage/util/path.py | 0
{pym => lib}/portage/util/socks5.py | 0
{pym => lib}/portage/util/whirlpool.py | 0
{pym => lib}/portage/util/writeable_check.py | 0
{pym => lib}/portage/versions.py | 0
{pym => lib}/portage/xml/__init__.py | 0
{pym => lib}/portage/xml/metadata.py | 0
{pym => lib}/portage/xpak.py | 0
man/color.map.5 | 2 +-
man/emerge.1 | 10 +-
man/make.conf.5 | 8 +-
man/portage.5 | 29 ++-
man/ru/color.map.5 | 2 +-
misc/emerge-delta-webrsync | 26 ++-
pym/portage/sync/modules/webrsync/webrsync.py | 70 ------
.../tests/resolver/test_features_test_use.py | 68 ------
.../util/futures/asyncio/test_subprocess_exec.py | 236 ---------------------
repoman/README | 2 +-
repoman/RELEASE-NOTES | 7 +
repoman/TEST-NOTES | 6 +-
repoman/bin/repoman | 4 +-
repoman/cnf/qa_data/qa_data.yaml | 2 +
repoman/cnf/repository/qa_data.yaml | 2 +
repoman/{pym => lib}/repoman/__init__.py | 2 +-
repoman/{pym => lib}/repoman/_portage.py | 0
repoman/{pym => lib}/repoman/_subprocess.py | 0
repoman/{pym => lib}/repoman/actions.py | 0
repoman/{pym => lib}/repoman/argparser.py | 0
repoman/{pym => lib}/repoman/check_missingslot.py | 0
.../herds => lib/repoman/checks}/__init__.py | 0
repoman/{pym => lib}/repoman/config.py | 8 +-
repoman/{pym => lib}/repoman/copyrights.py | 0
repoman/{pym => lib}/repoman/errors.py | 0
repoman/{pym => lib}/repoman/gpg.py | 0
repoman/{pym => lib}/repoman/main.py | 0
repoman/{pym => lib}/repoman/metadata.py | 0
repoman/{pym => lib}/repoman/modules/__init__.py | 0
.../repoman/modules/commit/__init__.py | 0
.../repoman/modules/commit/manifest.py | 0
.../repoman/modules/commit/repochecks.py | 0
.../repoman/modules/linechecks/__init__.py | 0
.../modules/linechecks/assignment/__init__.py | 0
.../modules/linechecks/assignment/assignment.py | 0
.../repoman/modules/linechecks/base.py | 0
.../repoman/modules/linechecks/config.py | 0
.../repoman/modules/linechecks/controller.py | 0
.../repoman/modules/linechecks/depend/__init__.py | 0
.../repoman/modules/linechecks/depend/implicit.py | 0
.../modules/linechecks/deprecated/__init__.py | 0
.../modules/linechecks/deprecated/deprecated.py | 0
.../modules/linechecks/deprecated/inherit.py | 0
.../repoman/modules/linechecks/do/__init__.py | 0
.../repoman/modules/linechecks/do/dosym.py | 0
.../repoman/modules/linechecks/eapi/__init__.py | 0
.../repoman/modules/linechecks/eapi/checks.py | 0
.../repoman/modules/linechecks/eapi/definition.py | 0
.../repoman/modules/linechecks/emake/__init__.py | 0
.../repoman/modules/linechecks/emake/emake.py | 0
.../modules/linechecks/gentoo_header/__init__.py | 0
.../modules/linechecks/gentoo_header/header.py | 0
.../repoman/modules/linechecks/helpers/__init__.py | 0
.../repoman/modules/linechecks/helpers/offset.py | 0
.../repoman/modules/linechecks/nested/__init__.py | 0
.../repoman/modules/linechecks/nested/nested.py | 0
.../repoman/modules/linechecks/nested/nesteddie.py | 0
.../repoman/modules/linechecks/patches/__init__.py | 0
.../repoman/modules/linechecks/patches/patches.py | 0
.../repoman/modules/linechecks/phases/__init__.py | 0
.../repoman/modules/linechecks/phases/phase.py | 0
.../repoman/modules/linechecks/portage/__init__.py | 0
.../repoman/modules/linechecks/portage/internal.py | 0
.../repoman/modules/linechecks/quotes/__init__.py | 0
.../repoman/modules/linechecks/quotes/quoteda.py | 0
.../repoman/modules/linechecks/quotes/quotes.py | 0
.../repoman/modules/linechecks/uri/__init__.py | 0
.../repoman/modules/linechecks/uri/uri.py | 0
.../repoman/modules/linechecks/use/__init__.py | 0
.../repoman/modules/linechecks/use/builtwith.py | 0
.../repoman/modules/linechecks/useless/__init__.py | 0
.../repoman/modules/linechecks/useless/cd.py | 0
.../repoman/modules/linechecks/useless/dodoc.py | 0
.../modules/linechecks/whitespace/__init__.py | 0
.../repoman/modules/linechecks/whitespace/blank.py | 0
.../modules/linechecks/whitespace/whitespace.py | 0
.../modules/linechecks/workaround/__init__.py | 0
.../modules/linechecks/workaround/workarounds.py | 0
.../{pym => lib}/repoman/modules/scan/__init__.py | 0
.../repoman/modules/scan/depend/__init__.py | 0
.../repoman/modules/scan/depend/_depend_checks.py | 9 +
.../repoman/modules/scan/depend/_gen_arches.py | 0
.../repoman/modules/scan/depend/profile.py | 36 ++++
.../repoman/modules/scan/directories/__init__.py | 0
.../repoman/modules/scan/directories/files.py | 0
.../repoman/modules/scan/directories/mtime.py | 0
.../repoman/modules/scan/eapi/__init__.py | 0
.../{pym => lib}/repoman/modules/scan/eapi/eapi.py | 0
.../repoman/modules/scan/ebuild/__init__.py | 0
.../repoman/modules/scan/ebuild/ebuild.py | 0
.../repoman/modules/scan/ebuild/multicheck.py | 0
.../repoman/modules/scan/eclasses/__init__.py | 0
.../repoman/modules/scan/eclasses/live.py | 0
.../repoman/modules/scan/eclasses/ruby.py | 0
.../repoman/modules/scan/fetch/__init__.py | 0
.../repoman/modules/scan/fetch/fetches.py | 0
.../repoman/modules/scan/keywords/__init__.py | 0
.../repoman/modules/scan/keywords/keywords.py | 21 ++
.../repoman/modules/scan/manifest/__init__.py | 0
.../repoman/modules/scan/manifest/manifests.py | 0
.../repoman/modules/scan/metadata/__init__.py | 0
.../repoman/modules/scan/metadata/description.py | 0
.../modules/scan/metadata/ebuild_metadata.py | 0
.../repoman/modules/scan/metadata/pkgmetadata.py | 0
.../repoman/modules/scan/metadata/restrict.py | 0
.../repoman/modules/scan/metadata/use_flags.py | 0
.../{pym => lib}/repoman/modules/scan/module.py | 0
.../repoman/modules/scan/options/__init__.py | 0
.../repoman/modules/scan/options/options.py | 0
repoman/{pym => lib}/repoman/modules/scan/scan.py | 0
.../{pym => lib}/repoman/modules/scan/scanbase.py | 0
.../repoman/modules/vcs/None/__init__.py | 0
.../repoman/modules/vcs/None/changes.py | 0
.../repoman/modules/vcs/None/status.py | 0
.../{pym => lib}/repoman/modules/vcs/__init__.py | 0
.../repoman/modules/vcs/bzr/__init__.py | 0
.../repoman/modules/vcs/bzr/changes.py | 0
.../{pym => lib}/repoman/modules/vcs/bzr/status.py | 0
.../{pym => lib}/repoman/modules/vcs/changes.py | 0
.../repoman/modules/vcs/cvs/__init__.py | 0
.../repoman/modules/vcs/cvs/changes.py | 0
.../{pym => lib}/repoman/modules/vcs/cvs/status.py | 0
.../repoman/modules/vcs/git/__init__.py | 0
.../repoman/modules/vcs/git/changes.py | 0
.../{pym => lib}/repoman/modules/vcs/git/status.py | 0
.../repoman/modules/vcs/hg/__init__.py | 0
.../{pym => lib}/repoman/modules/vcs/hg/changes.py | 0
.../{pym => lib}/repoman/modules/vcs/hg/status.py | 0
.../{pym => lib}/repoman/modules/vcs/settings.py | 0
.../repoman/modules/vcs/svn/__init__.py | 0
.../repoman/modules/vcs/svn/changes.py | 0
.../{pym => lib}/repoman/modules/vcs/svn/status.py | 0
repoman/{pym => lib}/repoman/modules/vcs/vcs.py | 0
repoman/{pym => lib}/repoman/profile.py | 0
repoman/{pym => lib}/repoman/qa_data.py | 0
repoman/{pym => lib}/repoman/qa_tracker.py | 0
repoman/{pym => lib}/repoman/repos.py | 0
repoman/{pym => lib}/repoman/scanner.py | 0
repoman/{pym => lib}/repoman/tests/__init__.py | 0
.../changelog => lib/repoman/tests}/__test__.py | 0
.../repoman/tests/changelog/__init__.py | 0
.../lib/repoman/tests/changelog}/__test__.py | 0
.../repoman/tests/changelog/test_echangelog.py | 0
.../{pym => lib}/repoman/tests/commit/__init__.py | 0
.../{pym => lib}/repoman/tests/commit/__test__.py | 0
.../repoman/tests/commit/test_commitmsg.py | 0
repoman/{pym => lib}/repoman/tests/runTests.py | 2 +-
.../{pym => lib}/repoman/tests/simple/__init__.py | 0
.../{pym => lib}/repoman/tests/simple/__test__.py | 0
.../repoman/tests/simple/test_simple.py | 0
repoman/{pym => lib}/repoman/utilities.py | 2 +-
repoman/man/repoman.1 | 5 +-
repoman/pym/repoman/checks/herds/herdbase.py | 135 ------------
repoman/pym/repoman/checks/herds/metadata.py | 26 ---
repoman/runtests | 4 +-
repoman/setup.py | 24 +--
runtests | 4 +-
setup.py | 8 +-
testpath | 4 +-
tox.ini | 16 ++
788 files changed, 2521 insertions(+), 954 deletions(-)
diff --cc lib/_emerge/Package.py
index e73c9d9d1,5f34f3d27..ed4bd2277
--- a/lib/_emerge/Package.py
+++ b/lib/_emerge/Package.py
@@@ -93,13 -93,10 +93,16 @@@ class Package(Task)
# sync metadata with validated repo (may be UNKNOWN_REPO)
self._metadata['repository'] = self.cpv.repo
- implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ if self.root_config.settings.local_config:
+ implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ else:
+ implicit_match = db._repoman_iuse_implicit_cnstr(self.cpv, self._metadata)
+ if 'force-multilib' in self.root_config.settings.features:
+ iuse = self._metadata["IUSE"]
+ for multilib_abis in self.root_config.settings.get("MULTILIB_ABIS", '').split():
+ iuse += " multilib_abi_" + multilib_abis
+ iuse += " abiwrapper"
+ self._metadata["IUSE"] = iuse
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
self.iuse = self._iuse(self, self._metadata["IUSE"].split(),
implicit_match, usealiases, self.eapi)
diff --cc lib/portage/package/ebuild/config.py
index 1f1158d33,a68df5807..14a2193ef
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@@ -952,14 -962,15 +962,22 @@@ class config(object)
# initialize self.features
self.regenerate()
+ feature_use = []
+ if "test" in self.features:
+ feature_use.append("test")
+ self.configdict["features"]["USE"] = self._default_features_use = " ".join(feature_use)
+ if feature_use:
+ # Regenerate USE so that the initial "test" flag state is
+ # correct for evaluation of !test? conditionals in RESTRICT.
+ self.regenerate()
+ if 'force-multilib' in self.features:
+ #add multilib_abi internally to list of USE_EXPANDed vars
+ self["USE_EXPAND"] = "MULTILIB_ABI" + " " + self.get("USE_EXPAND", "")
+ self.backup_changes("USE_EXPAND")
+ default_abi = self.configdict["defaults"].get('DEFAULT_ABI', '').strip()
+ if default_abi:
+ self.configdict["defaults"]["USE"] = self.configdict["defaults"].get("USE", "") + " multilib_abi_" + default_abi
if unprivileged:
self.features.add('unprivileged')
@@@ -1906,16 -1938,6 +1947,10 @@@
iuse_implicit.add("build")
iuse_implicit.add("bootstrap")
- # Controlled by FEATURES=test. Make this implicit, so handling
- # of FEATURES=test is consistent regardless of explicit IUSE.
- # Users may use use.mask/package.use.mask to control
- # FEATURES=test for all ebuilds, regardless of explicit IUSE.
- iuse_implicit.add("test")
-
+ if 'force-multilib' in self.features:
+ for multilib_abis in self.get('MULTILIB_ABIS', '').split():
+ iuse_implicit.add("multilib_abi_" + multilib_abis)
+
return iuse_implicit
def _getUseMask(self, pkg, stable=None):
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2019-03-09 9:56 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2019-03-09 9:56 UTC (permalink / raw
To: gentoo-commits
commit: 533044621a8608b0186ae79eeaa994a0a40a7204
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 26 09:50:27 2018 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Wed Dec 26 10:16:35 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=53304462
merge portage-2.3.52
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 32 +++
bin/ebuild-helpers/dodoc | 3 +-
bin/ebuild-helpers/ecompress | 161 -------------
bin/ebuild-helpers/ecompressdir | 226 -------------------
bin/ebuild-helpers/fowners | 15 ++
bin/ebuild-helpers/fperms | 15 ++
bin/ebuild-helpers/prepall | 25 +-
bin/ebuild-helpers/prepalldocs | 19 +-
bin/ebuild-helpers/prepallinfo | 9 +-
bin/ebuild-helpers/prepallman | 20 +-
bin/ebuild-helpers/prepinfo | 3 +-
bin/ebuild-helpers/prepman | 35 +--
bin/ebuild.sh | 8 +-
bin/ecompress | 198 ++++++++++++++++
bin/ecompress-file | 61 +++++
bin/estrip | 10 +-
bin/etc-update | 12 +-
bin/helper-functions.sh | 9 +-
bin/install-qa-check.d/60pngfix | 13 +-
bin/isolated-functions.sh | 24 +-
bin/misc-functions.sh | 211 +++++++----------
bin/phase-functions.sh | 2 +-
bin/phase-helpers.sh | 7 +-
bin/pid-ns-init | 30 +++
bin/portageq | 4 +
bin/postinst-qa-check.d/50gnome2-utils | 2 +-
bin/postinst-qa-check.d/50xdg-utils | 2 +-
cnf/make.globals | 4 +-
lib/_emerge/actions.py | 7 -
lib/portage/const.py | 6 +-
lib/portage/dbapi/porttree.py | 72 ++++--
lib/portage/dbapi/vartree.py | 12 +
lib/portage/package/ebuild/doebuild.py | 27 ++-
lib/portage/process.py | 73 +++++-
lib/portage/repository/config.py | 148 +++++++++---
.../repository/storage}/__init__.py | 2 +-
.../repository/storage/hardlink_quarantine.py | 97 ++++++++
lib/portage/repository/storage/hardlink_rcu.py | 251 +++++++++++++++++++++
lib/portage/repository/storage/inplace.py | 49 ++++
lib/portage/repository/storage/interface.py | 87 +++++++
lib/portage/sync/controller.py | 1 +
lib/portage/sync/modules/rsync/rsync.py | 85 ++-----
lib/portage/sync/syncbase.py | 55 ++++-
lib/portage/tests/__init__.py | 36 +--
lib/portage/tests/bin/setup_env.py | 2 +-
lib/portage/tests/sync/test_sync_local.py | 40 +++-
.../tests/util/futures/test_compat_coroutine.py | 22 +-
lib/portage/util/futures/_asyncio/__init__.py | 14 ++
lib/portage/util/futures/_sync_decorator.py | 54 +++++
lib/portage/util/futures/compat_coroutine.py | 14 ++
man/ebuild.1 | 5 +
man/ebuild.5 | 6 +-
man/emerge.1 | 2 +-
man/make.conf.5 | 33 ++-
man/portage.5 | 35 +++
repoman/RELEASE-NOTES | 18 ++
repoman/bin/repoman | 2 +-
repoman/cnf/linechecks/linechecks.yaml | 3 +-
repoman/lib/repoman/actions.py | 55 ++++-
repoman/lib/repoman/copyrights.py | 18 +-
repoman/lib/repoman/main.py | 9 +-
repoman/lib/repoman/modules/commit/manifest.py | 11 +-
.../modules/linechecks/gentoo_header/header.py | 47 ++--
repoman/lib/repoman/scanner.py | 3 +-
repoman/lib/repoman/tests/__init__.py | 34 +--
.../lib/repoman/tests/changelog/test_echangelog.py | 2 +-
repoman/lib/repoman/tests/simple/test_simple.py | 14 +-
repoman/setup.py | 2 +-
setup.py | 4 +-
69 files changed, 1696 insertions(+), 921 deletions(-)
diff --cc bin/phase-functions.sh
index a1aaea020,d8ebf3d3e..fd17e6377
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -311,9 -287,8 +311,9 @@@ __dyn_clean()
fi
if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended,setuped,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged,instprepped} \
+ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
- "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*} \
++ "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*,instprepped} \
+ "$PORTAGE_BUILDDIR"/.abi \
"$PORTAGE_BUILDDIR"/.die_hooks \
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
"$PORTAGE_BUILDDIR"/.exit_status
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2019-03-17 11:35 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2019-03-17 11:35 UTC (permalink / raw
To: gentoo-commits
commit: 88a712b0cf17c1bc47de174f8f1219d24912eee6
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 17 11:34:05 2019 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Mar 17 11:34:05 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=88a712b0
Merge tag 'portage-2.3.62' into multilib
portage-2.3.62
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
.travis.yml | 7 +
NEWS | 9 +-
RELEASE-NOTES | 76 +++++++
bin/ebuild-helpers/bsd/sed | 3 +-
bin/ebuild-helpers/portageq | 3 +-
bin/ebuild-helpers/unprivileged/chown | 3 +-
bin/ebuild-helpers/xattr/install | 3 +-
bin/ebuild.sh | 34 ++--
bin/etc-update | 2 +-
bin/misc-functions.sh | 34 ++++
bin/pid-ns-init | 105 +++++++++-
bin/postinst-qa-check.d/50gnome2-utils | 64 ------
bin/postinst-qa-check.d/50xdg-utils | 54 +++++
bin/preinst-qa-check.d/50gnome2-utils | 1 -
bin/socks5-server.py | 8 +-
cnf/make.conf.example | 20 +-
cnf/make.globals | 14 +-
lib/_emerge/AbstractEbuildProcess.py | 9 +-
lib/_emerge/SpawnProcess.py | 2 +-
lib/_emerge/help.py | 2 +-
lib/_emerge/post_emerge.py | 2 +-
lib/_emerge/resolver/output.py | 13 +-
lib/portage/const.py | 1 +
lib/portage/dbapi/porttree.py | 20 +-
lib/portage/dbapi/vartree.py | 17 +-
lib/portage/elog/mod_echo.py | 2 +-
lib/portage/elog/mod_save.py | 4 +-
lib/portage/elog/mod_save_summary.py | 4 +-
lib/portage/emaint/modules/logs/__init__.py | 2 +-
lib/portage/emaint/modules/logs/logs.py | 22 +--
lib/portage/locks.py | 154 ++++++++++++---
.../package/ebuild/_config/special_env_vars.py | 5 +-
lib/portage/package/ebuild/config.py | 15 +-
lib/portage/package/ebuild/doebuild.py | 49 ++---
lib/portage/package/ebuild/prepare_build_dirs.py | 26 +--
lib/portage/process.py | 220 +++++++++++++++++----
lib/portage/sync/modules/git/git.py | 10 +-
lib/portage/sync/modules/rsync/rsync.py | 11 +-
lib/portage/tests/emerge/test_simple.py | 2 +-
lib/portage/tests/resolver/ResolverPlayground.py | 49 +++++
lib/portage/tests/sync/test_sync_local.py | 22 ++-
lib/portage/tests/util/test_install_mask.py | 36 ++++
lib/portage/tests/util/test_socks5.py | 211 ++++++++++++++++++++
lib/portage/util/ExtractKernelVersion.py | 17 +-
lib/portage/util/cpuinfo.py | 33 +++-
lib/portage/util/futures/compat_coroutine.py | 6 +-
lib/portage/util/futures/executor/fork.py | 4 +-
lib/portage/util/futures/iter_completed.py | 18 +-
lib/portage/util/install_mask.py | 89 ++++++++-
lib/portage/util/socks5.py | 48 ++++-
man/ebuild.5 | 2 +-
man/emaint.1 | 6 +-
man/emerge.1 | 8 +-
man/make.conf.5 | 52 ++---
man/portage.5 | 2 +-
repoman/runtests | 6 +-
runtests | 6 +-
setup.py | 2 +-
tox.ini | 2 +-
59 files changed, 1304 insertions(+), 347 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2019-12-26 11:56 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2019-12-26 11:56 UTC (permalink / raw
To: gentoo-commits
commit: a757c986855dee5574a1b773f45d3d976d55edd0
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 26 11:49:34 2019 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 26 11:55:34 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a757c986
Merge portage-2.3.83
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.travis.yml | 15 +-
NEWS | 40 ++
RELEASE-NOTES | 200 ++++++++
bin/dispatch-conf | 11 +-
bin/eapi.sh | 4 +
bin/ebuild | 10 +-
bin/ebuild-helpers/doins | 3 +-
bin/ebuild.sh | 13 +-
bin/emerge-webrsync | 47 +-
bin/estrip | 41 +-
bin/glsa-check | 112 +++--
bin/helper-functions.sh | 7 +-
bin/install-qa-check.d/10ignored-flags | 2 +-
bin/install-qa-check.d/80libraries | 21 +-
bin/install-qa-check.d/95empty-dirs | 4 +-
bin/install.py | 24 +-
bin/isolated-functions.sh | 28 +-
bin/phase-functions.sh | 41 +-
bin/phase-helpers.sh | 119 ++---
bin/pid-ns-init | 2 +-
bin/quickpkg | 34 +-
bin/socks5-server.py | 2 +-
cnf/make.conf.example | 21 +-
cnf/make.globals | 10 +-
cnf/repos.conf | 8 +-
cnf/sets/portage.conf | 12 +-
lib/_emerge/Binpkg.py | 96 ++--
lib/_emerge/BinpkgVerifier.py | 4 +-
lib/_emerge/EbuildExecuter.py | 6 +-
lib/_emerge/EbuildPhase.py | 2 +-
lib/_emerge/PollScheduler.py | 6 +-
lib/_emerge/Scheduler.py | 17 +-
lib/_emerge/actions.py | 46 +-
lib/_emerge/create_depgraph_params.py | 39 ++
lib/_emerge/depgraph.py | 528 +++++++++++++--------
lib/_emerge/emergelog.py | 2 +-
lib/_emerge/main.py | 32 +-
lib/_emerge/resolver/backtracking.py | 20 +-
lib/_emerge/resolver/slot_collision.py | 17 +-
lib/portage/__init__.py | 31 +-
.../{sync/modules => _compat_upgrade}/__init__.py | 0
lib/portage/_compat_upgrade/default_locations.py | 93 ++++
lib/portage/_emirrordist/Config.py | 10 +-
lib/portage/_emirrordist/DeletionIterator.py | 38 +-
lib/portage/_emirrordist/DeletionTask.py | 47 +-
lib/portage/_emirrordist/FetchTask.py | 120 +++--
lib/portage/_emirrordist/main.py | 12 +
lib/portage/_sets/__init__.py | 14 +-
lib/portage/_sets/dbapi.py | 18 +-
lib/portage/cache/flat_hash.py | 4 +-
lib/portage/cache/mappings.py | 30 +-
lib/portage/const.py | 6 +-
lib/portage/dbapi/__init__.py | 9 +-
lib/portage/dbapi/bintree.py | 148 +++++-
lib/portage/dbapi/porttree.py | 27 +-
lib/portage/dbapi/vartree.py | 250 +++++++++-
lib/portage/dep/__init__.py | 244 ++++++----
lib/portage/dep/dep_check.py | 10 +
lib/portage/dep/soname/multilib_category.py | 51 +-
lib/portage/emaint/modules/binhost/binhost.py | 21 +-
lib/portage/emaint/modules/sync/sync.py | 6 +-
lib/portage/exception.py | 6 +-
lib/portage/glsa.py | 15 +-
lib/portage/locks.py | 6 +-
lib/portage/news.py | 5 +-
lib/portage/package/ebuild/_config/helper.py | 4 +-
.../package/ebuild/_config/special_env_vars.py | 9 +-
lib/portage/package/ebuild/_spawn_nofetch.py | 6 +-
lib/portage/package/ebuild/config.py | 41 +-
lib/portage/package/ebuild/doebuild.py | 54 +--
lib/portage/package/ebuild/fetch.py | 381 +++++++++++++--
lib/portage/process.py | 102 +++-
lib/portage/repository/config.py | 29 +-
lib/portage/sync/__init__.py | 5 +-
lib/portage/sync/controller.py | 5 +-
lib/portage/sync/modules/rsync/rsync.py | 7 +
lib/portage/sync/modules/webrsync/webrsync.py | 1 +
lib/portage/sync/syncbase.py | 13 +-
lib/portage/tests/dep/testAtom.py | 16 +-
lib/portage/tests/dep/test_use_reduce.py | 72 ++-
lib/portage/tests/ebuild/test_fetch.py | 476 +++++++++++++++++++
lib/portage/tests/emerge/test_emerge_slot_abi.py | 14 +-
lib/portage/tests/emerge/test_simple.py | 3 +-
lib/portage/tests/glsa/test_security_set.py | 2 +-
lib/portage/tests/news/test_NewsItem.py | 4 +-
lib/portage/tests/process/test_poll.py | 20 +-
lib/portage/tests/process/test_unshare_net.py | 38 ++
lib/portage/tests/resolver/ResolverPlayground.py | 17 +-
.../test_aggressive_backtrack_downgrade.py | 91 ++++
lib/portage/tests/resolver/test_autounmask.py | 39 +-
lib/portage/tests/resolver/test_blocker.py | 87 +++-
.../tests/resolver/test_circular_choices.py | 109 ++++-
lib/portage/tests/resolver/test_keywords.py | 15 +-
lib/portage/tests/resolver/test_slot_abi.py | 42 +-
.../tests/resolver/test_slot_abi_downgrade.py | 32 +-
lib/portage/tests/resolver/test_slot_collisions.py | 6 +-
.../resolver/test_slot_conflict_mask_update.py | 5 +-
.../resolver/test_slot_conflict_update_virt.py | 79 +++
.../resolver/test_slot_operator_autounmask.py | 22 +-
.../resolver/test_slot_operator_complete_graph.py | 2 +-
.../test_slot_operator_runtime_pkg_mask.py | 4 +-
lib/portage/tests/resolver/test_targetroot.py | 24 +-
.../resolver/test_virtual_minimize_children.py | 39 ++
lib/portage/tests/resolver/test_with_test_deps.py | 39 +-
lib/portage/tests/update/test_move_slot_ent.py | 18 +-
.../util/futures/asyncio/test_child_watcher.py | 19 +-
.../util/futures/asyncio/test_subprocess_exec.py | 36 +-
.../util/futures/asyncio/test_wakeup_fd_sigchld.py | 10 +-
lib/portage/tests/util/test_file_copier.py | 48 ++
lib/portage/tests/util/test_getconfig.py | 4 +-
lib/portage/update.py | 6 +-
lib/portage/util/_async/FileCopier.py | 26 +-
lib/portage/util/_compare_files.py | 103 ++++
lib/portage/util/_dyn_libs/LinkageMapELF.py | 5 +-
lib/portage/util/_eventloop/asyncio_event_loop.py | 5 +
lib/portage/util/_get_vm_info.py | 9 +-
lib/portage/util/_urlopen.py | 6 +-
lib/portage/util/_xattr.py | 6 +-
lib/portage/util/elf/constants.py | 10 +-
lib/portage/util/futures/_asyncio/__init__.py | 23 +-
lib/portage/util/install_mask.py | 8 +-
lib/portage/util/netlink.py | 98 ++++
lib/portage/util/socks5.py | 10 +-
lib/portage/xml/metadata.py | 16 +-
man/ebuild.5 | 299 +++++++-----
man/emerge.1 | 60 ++-
man/emirrordist.1 | 10 +
man/glsa-check.1 | 53 +++
man/make.conf.5 | 65 ++-
man/portage.5 | 37 +-
man/quickpkg.1 | 4 +-
misc/emerge-delta-webrsync | 32 +-
repoman/RELEASE-NOTES | 51 ++
repoman/cnf/linechecks/linechecks.yaml | 47 +-
repoman/cnf/qa_data/qa_data.yaml | 1 +
repoman/cnf/repository/qa_data.yaml | 1 +
repoman/lib/repoman/__init__.py | 4 +-
repoman/lib/repoman/actions.py | 15 +-
repoman/lib/repoman/argparser.py | 40 +-
repoman/lib/repoman/modules/linechecks/base.py | 5 +-
.../lib/repoman/modules/linechecks/controller.py | 12 +-
.../modules/linechecks/deprecated/inherit.py | 19 +-
repoman/lib/repoman/modules/linechecks/do/dosym.py | 6 +-
.../lib/repoman/modules/linechecks/eapi/checks.py | 10 +-
.../lib/repoman/modules/linechecks/emake/emake.py | 2 +-
.../modules/linechecks/gentoo_header/header.py | 51 +-
.../lib/repoman/modules/linechecks/phases/phase.py | 4 +-
.../repoman/modules/linechecks/portage/internal.py | 7 +-
.../repoman/modules/linechecks/quotes/quoteda.py | 2 +-
.../repoman/modules/linechecks/useless/dodoc.py | 2 +-
.../repoman/modules/linechecks/whitespace/blank.py | 2 +-
.../lib/repoman/modules/scan/depend/__init__.py | 3 +-
.../repoman/modules/scan/depend/_depend_checks.py | 14 +
repoman/lib/repoman/modules/scan/depend/profile.py | 9 +-
repoman/lib/repoman/modules/scan/ebuild/ebuild.py | 3 +-
.../modules/scan/metadata/ebuild_metadata.py | 4 +-
.../lib/repoman/modules/scan/metadata/restrict.py | 6 +-
repoman/lib/repoman/scanner.py | 9 +
repoman/lib/repoman/tests/commit/test_commitmsg.py | 2 +-
repoman/lib/repoman/tests/simple/test_simple.py | 1 +
repoman/man/repoman.1 | 9 +-
repoman/runtests | 6 +-
repoman/setup.py | 2 +-
runtests | 6 +-
setup.py | 6 +-
tox.ini | 8 +-
166 files changed, 4728 insertions(+), 1488 deletions(-)
diff --cc bin/phase-functions.sh
index fd17e6377,73f8cee9b..f98d78f8a
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -678,25 -594,9 +664,25 @@@ __dyn_install()
export _E_DOCDESTTREE_=""
__ebuild_phase src_install
+
+ if ( [[ " ${FEATURES} " == *" force-multilib "* ]] && is_auto-multilib ) ; then
+ _finalize_abi_install
+ cp "${T}"/environment "${PORTAGE_BUILDDIR}"/build-info/environment.${LOOP_ABI} || die
+ fi
+ done
+ if [[ -d "${D}" ]]; then
+ if [[ " ${FEATURES} " == *" force-multilib "* ]]; then
+ if [[ ${CATEGORY}/${PN} == sys-devel/libtool ]] ; then
+ ewarn "Preserving libltdl.la because of extensive usage"
+ ewarn "even in m4 macros of libtool"
+ else
+ find "${D}" -name '*.la' ! -exec grep -q shouldnotlink=yes {} \; -exec rm {} \;
+ fi
+ fi
+
>> "$PORTAGE_BUILDDIR/.installed" || \
die "Failed to create $PORTAGE_BUILDDIR/.installed"
- __vecho ">>> Completed installing ${PF} into ${D}"
+ __vecho ">>> Completed installing ${CATEGORY}/${PF} into ${D}"
__vecho
__ebuild_phase post_src_install
diff --cc bin/phase-helpers.sh
index 07f4c68ce,b5691bd70..0a326b7d9
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@@ -237,10 -237,9 +237,10 @@@ use()
# Make sure we have this USE flag in IUSE, but exempt binary
# packages for API consumers like Entropy which do not require
# a full profile with IUSE_IMPLICIT and stuff (see bug #456830).
- elif [[ -n $PORTAGE_IUSE && -n $EBUILD_PHASE &&
- -n $PORTAGE_INTERNAL_CALLER ]] ; then
+ elif declare -f ___in_portage_iuse >/dev/null &&
+ [[ -n ${EBUILD_PHASE} && -n ${PORTAGE_INTERNAL_CALLER} ]] ; then
+ if ( [[ ! " ${FEATURES} " == *" force-multilib "* && $u == multilib ]] && \
- [[ ! $u =~ $PORTAGE_IUSE ]] ) ; then
+ if ! ___in_portage_iuse "${u}"; then
if [[ ${EMERGE_FROM} != binary &&
! ${EAPI} =~ ^(0|1|2|3|4|4-python|4-slot-abi)$ ]] ; then
# This is only strict starting with EAPI 5, since implicit IUSE
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2020-07-05 17:57 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2020-07-05 17:57 UTC (permalink / raw
To: gentoo-commits
commit: 661e707be59a3e3c2973b81ac1cbe376248ed0d9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 5 08:51:15 2020 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jul 5 17:56:29 2020 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=661e707b
Merge tag 'portage-2.3.103' into multilib
portage-2.3.103
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.travis.yml | 10 +-
MANIFEST.in | 5 +
NEWS | 24 +
RELEASE-NOTES | 153 ++++++
bin/eapi.sh | 46 +-
bin/ebuild-helpers/dosym | 13 +-
bin/ebuild.sh | 23 +-
bin/ecompress | 27 +-
bin/emerge-webrsync | 1 +
bin/isolated-functions.sh | 4 +-
bin/misc-functions.sh | 12 +-
bin/phase-functions.sh | 8 +-
bin/phase-helpers.sh | 12 +-
bin/socks5-server.py | 36 +-
cnf/make.globals | 9 +-
doc/api/.gitignore | 1 +
doc/api/Makefile | 32 ++
doc/api/conf.py | 66 +++
doc/api/index.rst | 18 +
doc/package/ebuild.docbook | 1 -
doc/package/ebuild/eapi/5-hdepend.docbook | 32 --
doc/portage.docbook | 1 -
doc/qa.docbook | 98 ++++
lib/_emerge/AbstractEbuildProcess.py | 5 +-
lib/_emerge/AbstractPollTask.py | 3 -
lib/_emerge/AsynchronousTask.py | 75 +--
lib/_emerge/BinpkgFetcher.py | 3 +-
lib/_emerge/CompositeTask.py | 7 +-
lib/_emerge/EbuildFetcher.py | 15 +-
lib/_emerge/EbuildMetadataPhase.py | 3 +-
lib/_emerge/EbuildPhase.py | 115 ++++-
lib/_emerge/FifoIpcDaemon.py | 3 -
lib/_emerge/Package.py | 6 +-
lib/_emerge/Scheduler.py | 43 +-
lib/_emerge/SequentialTaskQueue.py | 19 +-
lib/_emerge/SpawnProcess.py | 69 ++-
lib/_emerge/SubProcess.py | 15 +-
lib/_emerge/actions.py | 41 +-
lib/_emerge/create_world_atom.py | 11 +-
lib/_emerge/depgraph.py | 185 ++++---
lib/portage/__init__.py | 3 +-
lib/portage/_compat_upgrade/binpkg_compression.py | 40 ++
lib/portage/_emirrordist/FetchTask.py | 9 -
lib/portage/_selinux.py | 9 +-
lib/portage/cache/ebuild_xattr.py | 5 +-
lib/portage/cache/metadata.py | 2 +-
lib/portage/cache/template.py | 2 +-
lib/portage/const.py | 1 +
lib/portage/data.py | 10 -
lib/portage/dbapi/_MergeProcess.py | 3 +-
lib/portage/dbapi/bintree.py | 7 +-
lib/portage/dbapi/cpv_expand.py | 4 +-
lib/portage/dbapi/porttree.py | 20 +-
lib/portage/dbapi/vartree.py | 11 +-
lib/portage/dep/_slot_operator.py | 3 -
lib/portage/dep/dep_check.py | 93 ++--
lib/portage/dep/soname/SonameAtom.py | 9 +-
lib/portage/dispatch_conf.py | 9 -
lib/portage/eapi.py | 18 +-
lib/portage/emaint/modules/sync/sync.py | 2 +-
lib/portage/locks.py | 67 ++-
lib/portage/output.py | 2 +-
.../package/ebuild/_config/KeywordsManager.py | 16 +-
.../package/ebuild/_config/special_env_vars.py | 16 +-
lib/portage/package/ebuild/config.py | 13 +-
.../package/ebuild/deprecated_profile_check.py | 2 +-
lib/portage/package/ebuild/doebuild.py | 41 +-
lib/portage/package/ebuild/fetch.py | 148 ++++--
lib/portage/package/ebuild/prepare_build_dirs.py | 21 +-
lib/portage/process.py | 29 +-
lib/portage/repository/config.py | 10 +-
lib/portage/sync/syncbase.py | 9 +-
lib/portage/tests/dbapi/test_auxdb.py | 77 +++
lib/portage/tests/dep/test_soname_atom_pickle.py | 26 +
lib/portage/tests/ebuild/test_doebuild_spawn.py | 4 +-
lib/portage/tests/emerge/test_simple.py | 69 ++-
lib/portage/tests/locks/test_lock_nonblock.py | 16 +-
lib/portage/tests/process/test_PipeLogger.py | 58 +++
lib/portage/tests/resolver/ResolverPlayground.py | 99 ++--
.../tests/resolver/test_circular_choices.py | 44 +-
lib/portage/tests/resolver/test_depth.py | 18 +-
lib/portage/tests/resolver/test_merge_order.py | 28 +-
lib/portage/tests/resolver/test_multirepo.py | 8 +-
lib/portage/tests/resolver/test_or_choices.py | 572 +++++++++++++++++++--
.../tests/resolver/test_or_upgrade_installed.py | 70 +++
.../resolver/test_slot_operator_reverse_deps.py | 93 +++-
.../tests/util/futures/test_compat_coroutine.py | 29 +-
.../util/futures/test_done_callback_after_exit.py | 44 ++
lib/portage/util/__init__.py | 8 -
lib/portage/util/_async/AsyncFunction.py | 5 +-
lib/portage/util/_async/BuildLogger.py | 109 ++++
lib/portage/util/_async/FileDigester.py | 5 +-
lib/portage/util/_async/PipeLogger.py | 82 ++-
lib/portage/util/_async/SchedulerInterface.py | 32 +-
lib/portage/util/_desktop_entry.py | 8 -
lib/portage/util/_dyn_libs/LinkageMapELF.py | 84 ++-
lib/portage/util/_dyn_libs/NeededEntry.py | 5 +
lib/portage/util/_dyn_libs/soname_deps_qa.py | 98 ++++
lib/portage/util/_eventloop/asyncio_event_loop.py | 31 +-
lib/portage/util/compression_probe.py | 10 +-
lib/portage/util/futures/_asyncio/__init__.py | 8 +-
lib/portage/util/futures/_asyncio/process.py | 11 +-
lib/portage/util/futures/_asyncio/streams.py | 50 +-
lib/portage/util/futures/compat_coroutine.py | 19 +-
lib/portage/xml/metadata.py | 22 +-
lib/portage/xpak.py | 5 +-
man/emerge.1 | 16 +-
man/make.conf.5 | 13 +-
man/portage.5 | 9 +-
misc/emerge-delta-webrsync | 1 +
repoman/RELEASE-NOTES | 16 +
repoman/cnf/linechecks/linechecks.yaml | 1 -
repoman/cnf/repository/linechecks.yaml | 1 -
repoman/cnf/repository/repository.yaml | 1 -
repoman/lib/repoman/_subprocess.py | 18 -
repoman/lib/repoman/gpg.py | 9 -
repoman/lib/repoman/metadata.py | 51 +-
.../modules/linechecks/deprecated/inherit.py | 7 +
.../repoman/modules/linechecks/patches/patches.py | 2 +-
.../modules/linechecks/workaround/__init__.py | 6 -
.../modules/linechecks/workaround/workarounds.py | 7 -
repoman/lib/repoman/modules/vcs/git/changes.py | 22 +-
repoman/runtests | 8 +-
repoman/setup.py | 2 +-
runtests | 8 +-
setup.py | 37 +-
tox.ini | 8 +-
127 files changed, 3032 insertions(+), 942 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2020-08-23 12:22 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2020-08-23 12:22 UTC (permalink / raw
To: gentoo-commits
commit: 9ab4d534816dd92345df6c0cc2a1c1343415a6bd
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 23 12:20:01 2020 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Aug 23 12:22:18 2020 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=9ab4d534
Merge portage-3.0.4
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.editorconfig | 5 +-
.travis.yml | 1 -
DEVELOPING | 18 +-
NEWS | 4 +
README | 2 +-
RELEASE-NOTES | 45 ++
bin/archive-conf | 4 +-
bin/binhost-snapshot | 5 +-
bin/check-implicit-pointer-usage.py | 27 +-
bin/chmod-lite.py | 11 +-
bin/chpathtool.py | 10 +-
bin/clean_locks | 4 +-
bin/dispatch-conf | 4 +-
bin/dohtml.py | 15 +-
bin/doins.py | 37 +-
bin/ebuild | 19 +-
bin/ebuild-ipc.py | 2 +-
bin/ecompress | 27 +-
bin/egencache | 19 +-
bin/emaint | 4 +-
bin/emerge | 4 +-
bin/env-update | 4 +-
bin/filter-bash-environment.py | 11 +-
bin/fixpackages | 4 +-
bin/glsa-check | 4 +-
bin/install.py | 19 +-
bin/pid-ns-init | 10 +-
bin/portageq | 6 +-
bin/quickpkg | 6 +-
bin/regenworld | 4 +-
bin/socks5-server.py | 2 +-
bin/xattr-helper.py | 32 +-
cnf/repo.postsync.d/example | 15 +-
doc/api/conf.py | 2 +-
lib/_emerge/AbstractEbuildProcess.py | 3 +-
lib/_emerge/AbstractPollTask.py | 4 +-
lib/_emerge/AsynchronousLock.py | 12 +-
lib/_emerge/Binpkg.py | 8 +-
lib/_emerge/BinpkgEnvExtractor.py | 11 +-
lib/_emerge/BinpkgFetcher.py | 11 +-
lib/_emerge/BinpkgPrefetcher.py | 1 -
lib/_emerge/BlockerCache.py | 29 +-
lib/_emerge/BlockerDB.py | 7 +-
lib/_emerge/DepPriority.py | 1 -
lib/_emerge/DepPriorityNormalRange.py | 2 +-
lib/_emerge/DepPrioritySatisfiedRange.py | 2 +-
lib/_emerge/Dependency.py | 1 -
lib/_emerge/DependencyArg.py | 20 +-
lib/_emerge/EbuildBuild.py | 30 +-
lib/_emerge/EbuildBuildDir.py | 1 -
lib/_emerge/EbuildFetcher.py | 12 +-
lib/_emerge/EbuildMetadataPhase.py | 12 +-
lib/_emerge/EbuildPhase.py | 19 +-
lib/_emerge/FakeVartree.py | 23 +-
lib/_emerge/FifoIpcDaemon.py | 33 +-
lib/_emerge/JobStatusDisplay.py | 15 +-
lib/_emerge/MergeListItem.py | 2 +-
lib/_emerge/MetadataRegen.py | 7 +-
lib/_emerge/Package.py | 47 +-
lib/_emerge/PackageVirtualDbapi.py | 7 +-
lib/_emerge/PipeReader.py | 14 +-
lib/_emerge/PollScheduler.py | 6 +-
lib/_emerge/ProgressHandler.py | 3 +-
lib/_emerge/RootConfig.py | 2 +-
lib/_emerge/Scheduler.py | 15 +-
lib/_emerge/SequentialTaskQueue.py | 8 +-
lib/_emerge/SetArg.py | 1 -
lib/_emerge/SpawnProcess.py | 43 +-
lib/_emerge/SubProcess.py | 9 +-
lib/_emerge/TaskSequence.py | 6 +-
lib/_emerge/UnmergeDepPriority.py | 1 -
lib/_emerge/UseFlagDisplay.py | 16 +-
lib/_emerge/UserQuery.py | 23 +-
lib/_emerge/_find_deep_system_runtime_deps.py | 1 -
lib/_emerge/actions.py | 79 ++--
lib/_emerge/chk_updated_cfg_files.py | 2 -
lib/_emerge/countdown.py | 4 +-
lib/_emerge/create_depgraph_params.py | 1 -
lib/_emerge/create_world_atom.py | 10 +-
lib/_emerge/depgraph.py | 171 ++++----
lib/_emerge/emergelog.py | 3 -
lib/_emerge/help.py | 6 +-
lib/_emerge/main.py | 21 +-
lib/_emerge/post_emerge.py | 4 +-
lib/_emerge/resolver/DbapiProvidesIndex.py | 8 +-
lib/_emerge/resolver/backtracking.py | 9 +-
lib/_emerge/resolver/circular_dependency.py | 16 +-
lib/_emerge/resolver/output.py | 104 ++---
lib/_emerge/resolver/output_helpers.py | 148 +------
lib/_emerge/resolver/package_tracker.py | 8 +-
lib/_emerge/resolver/slot_collision.py | 226 +++++-----
lib/_emerge/search.py | 17 +-
lib/_emerge/show_invalid_depstring_notice.py | 1 -
lib/_emerge/stdout_spinner.py | 4 +-
lib/_emerge/unmerge.py | 39 +-
lib/portage/__init__.py | 84 ++--
lib/portage/_emirrordist/Config.py | 12 +-
lib/portage/_emirrordist/DeletionIterator.py | 2 +-
lib/portage/_emirrordist/FetchIterator.py | 2 +-
lib/portage/_emirrordist/FetchTask.py | 55 +--
lib/portage/_emirrordist/MirrorDistTask.py | 8 +-
lib/portage/_emirrordist/main.py | 11 +-
lib/portage/_global_updates.py | 7 +-
lib/portage/_legacy_globals.py | 2 +-
lib/portage/_selinux.py | 17 +-
lib/portage/_sets/__init__.py | 21 +-
lib/portage/_sets/base.py | 38 +-
lib/portage/_sets/dbapi.py | 81 ++--
lib/portage/_sets/files.py | 14 +-
lib/portage/_sets/libs.py | 4 +-
lib/portage/_sets/security.py | 16 +-
lib/portage/_sets/shell.py | 4 +-
lib/portage/cache/__init__.py | 1 -
lib/portage/cache/anydbm.py | 39 +-
lib/portage/cache/ebuild_xattr.py | 36 +-
lib/portage/cache/flat_hash.py | 10 +-
lib/portage/cache/fs_template.py | 15 +-
lib/portage/cache/index/IndexStreamIterator.py | 2 +-
lib/portage/cache/index/pkg_desc_index.py | 13 +-
lib/portage/cache/mappings.py | 58 +--
lib/portage/cache/metadata.py | 9 +-
lib/portage/cache/sql_template.py | 30 +-
lib/portage/cache/sqlite.py | 50 ++-
lib/portage/cache/template.py | 40 +-
lib/portage/checksum.py | 30 +-
lib/portage/const.py | 2 -
lib/portage/cvstree.py | 27 +-
lib/portage/data.py | 10 +-
lib/portage/dbapi/DummyTree.py | 2 +-
lib/portage/dbapi/IndexedPortdb.py | 10 +-
lib/portage/dbapi/IndexedVardb.py | 5 +-
.../dbapi/_ContentsCaseSensitivityManager.py | 2 +-
lib/portage/dbapi/_MergeProcess.py | 125 ++----
lib/portage/dbapi/_VdbMetadataDelta.py | 2 +-
lib/portage/dbapi/__init__.py | 10 +-
lib/portage/dbapi/_expand_new_virt.py | 2 -
lib/portage/dbapi/bintree.py | 97 ++--
lib/portage/dbapi/cpv_expand.py | 12 +-
lib/portage/dbapi/dep_expand.py | 2 -
lib/portage/dbapi/porttree.py | 45 +-
lib/portage/dbapi/vartree.py | 101 ++---
lib/portage/dbapi/virtual.py | 11 +-
lib/portage/debug.py | 16 +-
lib/portage/dep/__init__.py | 257 ++++++-----
lib/portage/dep/_dnf.py | 4 +-
lib/portage/dep/_slot_operator.py | 2 -
lib/portage/dep/dep_check.py | 19 +-
lib/portage/dep/soname/SonameAtom.py | 16 +-
lib/portage/dep/soname/multilib_category.py | 2 -
lib/portage/dep/soname/parse.py | 2 -
lib/portage/dispatch_conf.py | 7 +-
lib/portage/eclass_cache.py | 17 +-
lib/portage/elog/__init__.py | 10 +-
lib/portage/elog/messages.py | 19 +-
lib/portage/elog/mod_custom.py | 9 +-
lib/portage/elog/mod_echo.py | 10 +-
lib/portage/elog/mod_mail.py | 10 +-
lib/portage/elog/mod_mail_summary.py | 8 +-
lib/portage/elog/mod_save_summary.py | 5 -
lib/portage/elog/mod_syslog.py | 14 +-
lib/portage/emaint/main.py | 8 +-
lib/portage/emaint/modules/binhost/binhost.py | 12 +-
lib/portage/emaint/modules/config/config.py | 2 +-
lib/portage/emaint/modules/logs/logs.py | 2 +-
lib/portage/emaint/modules/merges/merges.py | 12 +-
lib/portage/emaint/modules/move/move.py | 7 +-
lib/portage/emaint/modules/resume/resume.py | 2 +-
lib/portage/emaint/modules/sync/sync.py | 17 +-
lib/portage/emaint/modules/world/world.py | 3 +-
lib/portage/env/__init__.py | 1 -
lib/portage/env/config.py | 22 +-
lib/portage/env/loaders.py | 24 +-
lib/portage/env/validators.py | 4 +-
lib/portage/exception.py | 55 +--
lib/portage/getbinpkg.py | 95 ++--
lib/portage/glsa.py | 48 +-
lib/portage/localization.py | 6 +-
lib/portage/locks.py | 54 +--
lib/portage/mail.py | 59 +--
lib/portage/manifest.py | 69 ++-
lib/portage/metadata.py | 18 +-
lib/portage/module.py | 9 +-
lib/portage/news.py | 15 +-
lib/portage/output.py | 59 ++-
.../package/ebuild/_config/KeywordsManager.py | 7 +-
.../package/ebuild/_config/LicenseManager.py | 6 +-
.../package/ebuild/_config/LocationsManager.py | 4 +-
lib/portage/package/ebuild/_config/MaskManager.py | 2 +-
lib/portage/package/ebuild/_config/UseManager.py | 2 +-
.../package/ebuild/_config/VirtualsManager.py | 2 +-
lib/portage/package/ebuild/_config/features_set.py | 2 +-
.../package/ebuild/_config/special_env_vars.py | 2 -
lib/portage/package/ebuild/_ipc/IpcCommand.py | 2 +-
lib/portage/package/ebuild/_ipc/QueryCommand.py | 17 +-
.../ebuild/_parallel_manifest/ManifestProcess.py | 3 +-
.../ebuild/_parallel_manifest/ManifestScheduler.py | 2 -
lib/portage/package/ebuild/_spawn_nofetch.py | 6 +-
lib/portage/package/ebuild/config.py | 57 +--
.../package/ebuild/deprecated_profile_check.py | 4 +-
lib/portage/package/ebuild/doebuild.py | 20 +-
lib/portage/package/ebuild/fetch.py | 30 +-
lib/portage/package/ebuild/getmaskingreason.py | 13 +-
lib/portage/package/ebuild/getmaskingstatus.py | 20 +-
lib/portage/package/ebuild/prepare_build_dirs.py | 3 -
lib/portage/process.py | 45 +-
lib/portage/progress.py | 3 +-
lib/portage/proxy/lazyimport.py | 7 +-
lib/portage/proxy/objectproxy.py | 11 +-
lib/portage/repository/config.py | 35 +-
.../repository/storage/hardlink_quarantine.py | 26 +-
lib/portage/repository/storage/hardlink_rcu.py | 47 +-
lib/portage/repository/storage/inplace.py | 10 +-
lib/portage/repository/storage/interface.py | 12 +-
lib/portage/sync/config_checks.py | 2 +-
lib/portage/sync/controller.py | 20 +-
lib/portage/sync/getaddrinfo_validate.py | 7 +-
lib/portage/sync/modules/git/__init__.py | 13 +-
lib/portage/sync/modules/git/git.py | 37 +-
lib/portage/sync/modules/rsync/rsync.py | 52 +--
lib/portage/sync/modules/webrsync/webrsync.py | 1 -
lib/portage/sync/old_tree_timestamp.py | 4 +-
lib/portage/sync/syncbase.py | 5 +-
lib/portage/tests/__init__.py | 4 +-
lib/portage/tests/bin/setup_env.py | 20 +-
lib/portage/tests/dbapi/test_auxdb.py | 45 +-
lib/portage/tests/dep/testAtom.py | 8 +-
lib/portage/tests/dep/testExtractAffectingUSE.py | 6 +-
lib/portage/tests/dep/test_dep_getcpv.py | 4 +-
lib/portage/tests/dep/test_isvalidatom.py | 2 +-
lib/portage/tests/dep/test_match_from_list.py | 14 +-
lib/portage/tests/dep/test_soname_atom_pickle.py | 3 -
lib/portage/tests/dep/test_use_reduce.py | 2 +-
lib/portage/tests/ebuild/test_config.py | 6 +-
lib/portage/tests/ebuild/test_fetch.py | 6 +-
lib/portage/tests/ebuild/test_spawn.py | 1 -
.../tests/ebuild/test_use_expand_incremental.py | 2 -
lib/portage/tests/emerge/test_config_protect.py | 2 -
lib/portage/tests/emerge/test_simple.py | 11 +-
lib/portage/tests/env/__init__.py | 1 -
lib/portage/tests/env/config/__init__.py | 1 -
.../tests/env/config/test_PackageMaskFile.py | 8 +-
lib/portage/tests/glsa/test_security_set.py | 2 -
lib/portage/tests/lafilefixer/test_lafilefixer.py | 4 +-
lib/portage/tests/lint/test_bash_syntax.py | 1 -
lib/portage/tests/process/test_AsyncFunction.py | 62 +++
lib/portage/tests/process/test_PipeLogger.py | 2 +-
lib/portage/tests/process/test_poll.py | 10 +-
lib/portage/tests/resolver/ResolverPlayground.py | 27 +-
.../resolver/test_binary_pkg_ebuild_visibility.py | 1 -
.../tests/resolver/test_circular_dependencies.py | 10 +-
lib/portage/tests/resolver/test_eapi.py | 80 ++--
lib/portage/tests/resolver/test_merge_order.py | 3 +-
.../test_missing_iuse_and_evaluated_atoms.py | 8 +-
.../tests/resolver/test_old_dep_chain_display.py | 6 +-
.../tests/resolver/test_profile_default_eapi.py | 2 -
.../tests/resolver/test_profile_package_set.py | 2 -
lib/portage/tests/resolver/test_required_use.py | 4 +-
lib/portage/tests/resolver/test_simple.py | 4 +-
lib/portage/tests/resolver/test_slot_collisions.py | 8 +-
.../test_slot_conflict_unsatisfied_deep_deps.py | 10 +-
lib/portage/tests/runTests.py | 7 +-
lib/portage/tests/sets/files/testConfigFileSet.py | 1 -
lib/portage/tests/sets/files/testStaticFileSet.py | 1 -
lib/portage/tests/sets/shell/testShell.py | 12 +-
lib/portage/tests/sync/test_sync_local.py | 11 +-
lib/portage/tests/unicode/test_string_format.py | 54 +--
lib/portage/tests/util/__init__.py | 1 -
.../tests/util/eventloop/test_call_soon_fifo.py | 4 +-
.../util/futures/asyncio/test_child_watcher.py | 4 +-
.../futures/asyncio/test_event_loop_in_fork.py | 23 +-
.../tests/util/futures/asyncio/test_pipe_closed.py | 10 +-
.../asyncio/test_policy_wrapper_recursion.py | 8 +-
.../util/futures/asyncio/test_subprocess_exec.py | 5 -
.../tests/util/futures/test_compat_coroutine.py | 47 +-
lib/portage/tests/util/futures/test_retry.py | 34 +-
lib/portage/tests/util/test_getconfig.py | 3 +-
lib/portage/tests/util/test_grabdict.py | 4 +-
lib/portage/tests/util/test_normalizedPath.py | 6 +-
lib/portage/tests/util/test_socks5.py | 31 +-
lib/portage/tests/util/test_xattr.py | 18 +-
lib/portage/tests/xpak/test_decodeint.py | 4 +-
lib/portage/update.py | 20 +-
lib/portage/util/SlotObject.py | 2 +-
lib/portage/util/_ShelveUnicodeWrapper.py | 45 --
lib/portage/util/__init__.py | 113 ++---
lib/portage/util/_async/AsyncFunction.py | 4 +-
lib/portage/util/_async/BuildLogger.py | 31 +-
lib/portage/util/_async/ForkProcess.py | 146 +++++--
lib/portage/util/_async/PipeLogger.py | 106 ++---
lib/portage/util/_async/SchedulerInterface.py | 4 +-
lib/portage/util/_compare_files.py | 23 +-
lib/portage/util/_desktop_entry.py | 17 +-
lib/portage/util/_dyn_libs/LinkageMapELF.py | 52 +--
lib/portage/util/_dyn_libs/NeededEntry.py | 19 +-
.../util/_dyn_libs/PreservedLibsRegistry.py | 31 +-
.../util/_dyn_libs/display_preserved_libs.py | 6 +-
lib/portage/util/_dyn_libs/soname_deps.py | 4 +-
lib/portage/util/_eventloop/EventLoop.py | 53 +--
lib/portage/util/_eventloop/PollConstants.py | 3 +-
lib/portage/util/_eventloop/PollSelectAdapter.py | 8 +-
lib/portage/util/_eventloop/asyncio_event_loop.py | 9 +-
lib/portage/util/_eventloop/global_event_loop.py | 16 +-
lib/portage/util/_urlopen.py | 67 ++-
lib/portage/util/_xattr.py | 6 +-
lib/portage/util/backoff.py | 2 +-
lib/portage/util/changelog.py | 29 +-
lib/portage/util/compression_probe.py | 5 +-
lib/portage/util/configparser.py | 23 +-
lib/portage/util/digraph.py | 8 +-
lib/portage/util/elf/header.py | 2 +-
lib/portage/util/env_update.py | 12 +-
lib/portage/util/formatter.py | 5 +-
lib/portage/util/futures/_asyncio/__init__.py | 48 +-
lib/portage/util/futures/_asyncio/process.py | 18 +-
lib/portage/util/futures/_asyncio/streams.py | 2 +-
lib/portage/util/futures/_asyncio/tasks.py | 15 +-
lib/portage/util/futures/_sync_decorator.py | 3 +-
lib/portage/util/futures/compat_coroutine.py | 10 +-
lib/portage/util/futures/events.py | 37 +-
lib/portage/util/futures/executor/fork.py | 4 +-
lib/portage/util/futures/extendedfutures.py | 2 -
lib/portage/util/futures/futures.py | 42 +-
lib/portage/util/futures/iter_completed.py | 5 +-
lib/portage/util/futures/retry.py | 2 +-
lib/portage/util/futures/transports.py | 5 +-
lib/portage/util/futures/unix_events.py | 34 +-
lib/portage/util/install_mask.py | 13 +-
lib/portage/util/iterators/MultiIterGroupBy.py | 4 +-
lib/portage/util/lafilefixer.py | 11 +-
lib/portage/util/listdir.py | 3 -
lib/portage/util/locale.py | 4 +-
lib/portage/util/monotonic.py | 34 --
lib/portage/util/movefile.py | 65 +--
lib/portage/util/mtimedb.py | 6 +-
lib/portage/util/netlink.py | 3 +-
lib/portage/util/socks5.py | 13 +-
lib/portage/util/whirlpool.py | 28 +-
lib/portage/util/writeable_check.py | 2 -
lib/portage/versions.py | 40 +-
lib/portage/xml/metadata.py | 48 +-
lib/portage/xpak.py | 21 +-
man/ebuild.5 | 4 +-
man/egencache.1 | 4 +-
man/emerge.1 | 16 +-
man/portage.5 | 47 +-
pylintrc | 486 +++++++++++++++++++++
repoman/RELEASE-NOTES | 6 +
repoman/bin/repoman | 5 +-
repoman/lib/repoman/__init__.py | 7 +-
repoman/lib/repoman/actions.py | 6 +-
repoman/lib/repoman/argparser.py | 9 +
repoman/lib/repoman/copyrights.py | 2 +-
repoman/lib/repoman/errors.py | 2 -
repoman/lib/repoman/gpg.py | 2 -
repoman/lib/repoman/main.py | 7 +-
repoman/lib/repoman/metadata.py | 7 -
repoman/lib/repoman/modules/commit/manifest.py | 2 +-
repoman/lib/repoman/modules/commit/repochecks.py | 2 -
repoman/lib/repoman/modules/linechecks/base.py | 2 +-
repoman/lib/repoman/modules/linechecks/config.py | 4 +-
.../lib/repoman/modules/linechecks/controller.py | 2 +-
.../modules/linechecks/deprecated/inherit.py | 1 -
repoman/lib/repoman/modules/scan/depend/profile.py | 117 ++++-
repoman/lib/repoman/modules/scan/ebuild/ebuild.py | 3 +-
.../modules/scan/metadata/ebuild_metadata.py | 5 +-
.../lib/repoman/modules/scan/metadata/use_flags.py | 2 +-
repoman/lib/repoman/modules/scan/module.py | 2 +-
repoman/lib/repoman/modules/scan/scanbase.py | 2 +-
repoman/lib/repoman/modules/vcs/None/status.py | 2 +-
repoman/lib/repoman/modules/vcs/bzr/status.py | 2 +-
repoman/lib/repoman/modules/vcs/changes.py | 2 +-
repoman/lib/repoman/modules/vcs/cvs/status.py | 2 +-
repoman/lib/repoman/modules/vcs/git/status.py | 2 +-
repoman/lib/repoman/modules/vcs/hg/status.py | 2 +-
repoman/lib/repoman/modules/vcs/settings.py | 5 +-
repoman/lib/repoman/modules/vcs/svn/status.py | 2 +-
repoman/lib/repoman/modules/vcs/vcs.py | 3 +-
repoman/lib/repoman/profile.py | 4 +-
repoman/lib/repoman/qa_data.py | 2 +-
repoman/lib/repoman/qa_tracker.py | 2 +-
repoman/lib/repoman/repos.py | 2 +-
repoman/lib/repoman/scanner.py | 20 +-
repoman/lib/repoman/tests/__init__.py | 4 +-
repoman/lib/repoman/utilities.py | 7 +-
repoman/man/repoman.1 | 9 +-
repoman/runtests | 4 +-
repoman/setup.py | 8 +-
runtests | 7 +-
setup.py | 6 +-
tabcheck.py | 3 +-
tox.ini | 8 +-
391 files changed, 3232 insertions(+), 4185 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2020-10-30 10:29 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2020-10-30 10:29 UTC (permalink / raw
To: gentoo-commits
commit: 06bf06b15d07953e4a18865c1ff6264d908eb652
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 30 10:28:12 2020 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Oct 30 10:28:58 2020 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=06bf06b1
Merge tag 'portage-3.0.8' into multilib
portage-3.0.8
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 15 ++
RELEASE-NOTES | 39 +++++
bin/egencache | 122 ++++++++++++---
bin/quickpkg | 2 +-
cnf/repo.postsync.d/example | 19 ++-
lib/_emerge/BinpkgFetcher.py | 29 ++--
lib/_emerge/EbuildBinpkg.py | 4 +-
lib/_emerge/Scheduler.py | 142 ++++++++++++-----
lib/_emerge/actions.py | 16 +-
lib/_emerge/depgraph.py | 38 +++--
lib/_emerge/main.py | 6 +
lib/_emerge/resolver/backtracking.py | 7 +-
lib/_emerge/search.py | 12 +-
lib/portage/_emirrordist/FetchTask.py | 4 +-
lib/portage/_selinux.py | 16 +-
lib/portage/_sets/dbapi.py | 51 ++----
.../{_compat_upgrade => binrepo}/__init__.py | 0
lib/portage/binrepo/config.py | 133 ++++++++++++++++
lib/portage/cache/metadata.py | 4 +-
lib/portage/const.py | 2 +
lib/portage/dbapi/bintree.py | 59 +++++--
lib/portage/dep/soname/multilib_category.py | 11 +-
lib/portage/elog/mod_mail_summary.py | 5 +-
lib/portage/elog/mod_save_summary.py | 2 +-
lib/portage/locks.py | 2 +-
lib/portage/package/ebuild/config.py | 6 +
lib/portage/package/ebuild/doebuild.py | 2 +-
lib/portage/package/ebuild/fetch.py | 8 +-
lib/portage/process.py | 16 +-
lib/portage/sync/modules/git/git.py | 14 +-
lib/portage/sync/modules/mercurial/__init__.py | 39 +++++
lib/portage/sync/modules/mercurial/mercurial.py | 174 +++++++++++++++++++++
lib/portage/sync/modules/rsync/rsync.py | 26 ++-
lib/portage/sync/modules/webrsync/webrsync.py | 4 +-
lib/portage/sync/syncbase.py | 21 +++
lib/portage/tests/emerge/test_simple.py | 14 +-
lib/portage/tests/locks/test_lock_nonblock.py | 1 +
.../resolver/test_slot_change_without_revbump.py | 4 +-
.../tests/resolver/test_slot_conflict_rebuild.py | 61 +++++++-
.../resolver/test_slot_operator_missed_update.py | 112 +++++++++++++
lib/portage/tests/sync/test_sync_local.py | 67 +++++++-
.../util/futures/asyncio/test_wakeup_fd_sigchld.py | 2 +-
lib/portage/util/__init__.py | 4 +-
lib/portage/util/_eventloop/EventLoop.py | 6 +-
lib/portage/util/_eventloop/asyncio_event_loop.py | 4 +-
lib/portage/util/_eventloop/global_event_loop.py | 7 +-
lib/portage/util/_urlopen.py | 10 +-
lib/portage/util/env_update.py | 42 ++++-
lib/portage/util/futures/iter_completed.py | 1 -
lib/portage/util/locale.py | 1 +
lib/portage/util/movefile.py | 2 +-
lib/portage/util/socks5.py | 2 +-
lib/portage/xpak.py | 2 +-
man/egencache.1 | 12 +-
man/emerge.1 | 12 +-
man/make.conf.5 | 11 +-
man/portage.5 | 118 +++++++++++---
repoman/RELEASE-NOTES | 5 +
repoman/setup.py | 2 +-
setup.py | 2 +-
60 files changed, 1288 insertions(+), 266 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-01-15 16:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-01-15 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 04f0ae199e3cb389f48a99db6b2a981ae7848aa9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 15 16:20:11 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jan 15 16:20:11 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=04f0ae19
Merge tag 'portage-3.0.11' into multilib
portage-3.0.11
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 6 ++
lib/_emerge/depgraph.py | 68 +++++++++++++---
lib/portage/dep/dep_check.py | 31 ++++---
.../tests/resolver/test_circular_choices_rust.py | 94 ++++++++++++++++++++++
lib/portage/util/_compare_files.py | 4 +-
setup.py | 2 +-
6 files changed, 178 insertions(+), 27 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-01-15 16:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-01-15 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 7909a449f65b354ea061f1e91f92e918ae2a7247
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 15 16:20:17 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jan 15 16:20:17 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=7909a449
Merge tag 'portage-3.0.12' into multilib
portage-3.0.12
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 6 +++
lib/_emerge/DepPrioritySatisfiedRange.py | 1 +
lib/_emerge/depgraph.py | 10 ++--
lib/portage/__init__.py | 4 ++
lib/portage/dbapi/vartree.py | 1 -
lib/portage/package/ebuild/doebuild.py | 1 -
lib/portage/tests/resolver/test_merge_order.py | 27 ++++++++++-
lib/portage/util/_eventloop/asyncio_event_loop.py | 6 ++-
lib/portage/util/_eventloop/global_event_loop.py | 7 ---
lib/portage/util/futures/_asyncio/__init__.py | 59 ++++++++++++++++++++---
setup.py | 2 +-
11 files changed, 98 insertions(+), 26 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-01-15 16:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-01-15 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 0905e720dfeb192d27951b8f53d1577b3c45539e
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 15 16:19:56 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jan 15 16:19:56 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0905e720
Merge tag 'portage-3.0.10' into multilib
portage-3.0.10
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 7 +
doc/package/ebuild/eapi/4.docbook | 2 +-
lib/_emerge/DepPriorityNormalRange.py | 2 +
lib/_emerge/DepPrioritySatisfiedRange.py | 53 +++---
lib/_emerge/depgraph.py | 45 +++--
lib/portage/cache/template.py | 2 +-
.../package/ebuild/_config/KeywordsManager.py | 2 +-
.../package/ebuild/_config/LocationsManager.py | 30 ++-
lib/portage/package/ebuild/_config/UseManager.py | 4 +-
lib/portage/package/ebuild/config.py | 2 +-
.../package/ebuild/deprecated_profile_check.py | 9 +-
lib/portage/tests/resolver/test_merge_order.py | 10 +
.../tests/resolver/test_slot_operator_bdeps.py | 209 +++++++++++++++++++++
lib/portage/util/_compare_files.py | 3 +-
lib/portage/util/netlink.py | 2 +-
man/make.conf.5 | 2 +-
setup.py | 2 +-
17 files changed, 325 insertions(+), 61 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-01-15 16:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-01-15 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 82a7f2ce3f7d5084e92a3cb3d87c3b7212a55fc6
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 15 16:19:50 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jan 15 16:19:50 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=82a7f2ce
Merge tag 'portage-3.0.9' into multilib
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 9 +++++++++
bin/isolated-functions.sh | 3 +--
bin/phase-helpers.sh | 3 +--
bin/pid-ns-init | 24 ++++++++++++++++++++++-
cnf/repo.postsync.d/example | 3 ++-
cnf/sets/portage.conf | 6 ++++++
lib/_emerge/actions.py | 19 +++++++++++++++---
lib/_emerge/depgraph.py | 11 +++++++++--
lib/_emerge/main.py | 5 +++++
lib/portage/package/ebuild/config.py | 7 ++++++-
lib/portage/tests/emerge/test_simple.py | 8 +++-----
lib/portage/util/movefile.py | 10 ++++++++--
man/emerge.1 | 10 ++++++++--
repoman/RELEASE-NOTES | 5 +++++
repoman/cnf/qa_data/qa_data.yaml | 1 -
repoman/cnf/repository/qa_data.yaml | 1 -
repoman/lib/repoman/modules/scan/fetch/fetches.py | 7 +------
repoman/man/repoman.1 | 2 +-
repoman/setup.py | 2 +-
setup.py | 2 +-
20 files changed, 106 insertions(+), 32 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-01-15 16:20 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-01-15 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 688a2012b8e4d5d66406e7d3ee2eb140569a4b20
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 15 16:20:22 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Fri Jan 15 16:20:22 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=688a2012
Merge tag 'portage-3.0.13' into multilib
portage-3.0.13
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.github/workflows/ci.yml | 43 +++++
.travis.yml | 26 ---
NEWS | 6 +
RELEASE-NOTES | 7 +
bin/misc-functions.sh | 2 +-
lib/_emerge/depgraph.py | 22 +++
lib/portage/__init__.py | 3 +-
lib/portage/package/ebuild/fetch.py | 11 +-
.../resolver/test_slot_operator_reverse_deps.py | 98 ++++++++++-
lib/portage/tests/util/futures/test_retry.py | 181 ++++++++++++---------
lib/portage/util/__init__.py | 9 +-
lib/portage/util/_eventloop/asyncio_event_loop.py | 30 +++-
lib/portage/util/_eventloop/global_event_loop.py | 28 +---
lib/portage/util/env_update.py | 30 ++--
lib/portage/util/futures/_asyncio/__init__.py | 30 +++-
lib/portage/util/futures/retry.py | 4 +-
man/make.conf.5 | 14 +-
repoman/runtests | 5 +-
runtests | 5 +-
setup.py | 2 +-
src/portage_util_file_copy_reflink_linux.c | 10 +-
src/portage_util_libc.c | 10 +-
tox.ini | 15 +-
23 files changed, 402 insertions(+), 189 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-01-23 9:52 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-01-23 9:52 UTC (permalink / raw
To: gentoo-commits
commit: 2663f1d5badc58440f289f67c53d7f661b90ee4e
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 23 09:50:49 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Jan 23 09:52:02 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=2663f1d5
Merge tag 'portage-3.0.14' into multilib
portage-3.0.14
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 13 +++++
bin/clean_locks | 5 +-
bin/dispatch-conf | 17 ++++---
bin/ebuild | 4 +-
bin/egencache | 6 +--
bin/emerge | 13 ++---
bin/glsa-check | 5 +-
bin/portageq | 18 +++----
bin/quickpkg | 10 ++--
bin/regenworld | 6 +--
cnf/sets/portage.conf | 5 ++
doc/config/sets.docbook | 8 +++
lib/portage/__init__.py | 3 +-
lib/portage/_sets/dbapi.py | 39 ++++++++++++++-
lib/portage/dbapi/bintree.py | 58 ++++++++++++++--------
lib/portage/dbapi/vartree.py | 8 +--
lib/portage/emaint/modules/move/move.py | 13 ++++-
lib/portage/package/ebuild/doebuild.py | 13 +++--
.../repository/storage/hardlink_quarantine.py | 45 +++++++----------
lib/portage/repository/storage/hardlink_rcu.py | 57 ++++++++-------------
lib/portage/repository/storage/inplace.py | 27 +++-------
lib/portage/repository/storage/interface.py | 17 +++----
lib/portage/tests/dbapi/test_auxdb.py | 12 ++---
lib/portage/tests/emerge/test_simple.py | 16 +++---
lib/portage/tests/process/test_AsyncFunction.py | 10 ++--
lib/portage/tests/process/test_PipeLogger.py | 22 ++++----
lib/portage/tests/update/test_move_ent.py | 7 +--
.../util/futures/asyncio/test_child_watcher.py | 10 ++--
.../util/futures/asyncio/test_subprocess_exec.py | 32 ++++++------
lib/portage/tests/util/futures/test_retry.py | 28 ++++-------
lib/portage/tests/util/test_socks5.py | 4 +-
lib/portage/util/futures/_sync_decorator.py | 6 +--
lib/portage/util/futures/compat_coroutine.py | 6 +--
lib/portage/util/socks5.py | 9 ++--
man/make.conf.5 | 2 +-
repoman/lib/repoman/_subprocess.py | 4 --
repoman/lib/repoman/actions.py | 3 +-
repoman/lib/repoman/config.py | 5 --
repoman/lib/repoman/gpg.py | 2 -
repoman/lib/repoman/main.py | 3 +-
repoman/lib/repoman/metadata.py | 1 -
repoman/lib/repoman/modules/commit/manifest.py | 1 -
repoman/lib/repoman/modules/commit/repochecks.py | 1 -
repoman/lib/repoman/modules/linechecks/__init__.py | 1 -
.../modules/linechecks/assignment/__init__.py | 3 +-
.../repoman/modules/linechecks/depend/__init__.py | 3 +-
.../modules/linechecks/deprecated/__init__.py | 3 +-
.../modules/linechecks/deprecated/deprecated.py | 2 +-
.../lib/repoman/modules/linechecks/do/__init__.py | 3 +-
.../repoman/modules/linechecks/eapi/__init__.py | 3 +-
.../repoman/modules/linechecks/emake/__init__.py | 3 +-
.../modules/linechecks/gentoo_header/__init__.py | 3 +-
.../repoman/modules/linechecks/helpers/__init__.py | 3 +-
.../repoman/modules/linechecks/helpers/offset.py | 2 +-
.../repoman/modules/linechecks/nested/__init__.py | 3 +-
.../repoman/modules/linechecks/patches/__init__.py | 3 +-
.../repoman/modules/linechecks/patches/patches.py | 3 +-
.../repoman/modules/linechecks/phases/__init__.py | 3 +-
.../repoman/modules/linechecks/portage/__init__.py | 3 +-
.../repoman/modules/linechecks/quotes/__init__.py | 3 +-
.../lib/repoman/modules/linechecks/uri/__init__.py | 3 +-
repoman/lib/repoman/modules/linechecks/uri/uri.py | 28 +++++------
.../lib/repoman/modules/linechecks/use/__init__.py | 3 +-
.../repoman/modules/linechecks/use/builtwith.py | 2 +-
.../repoman/modules/linechecks/useless/__init__.py | 3 +-
.../modules/linechecks/whitespace/__init__.py | 3 +-
.../modules/linechecks/workaround/__init__.py | 3 +-
.../modules/linechecks/workaround/workarounds.py | 2 +-
.../lib/repoman/modules/scan/depend/__init__.py | 3 +-
.../repoman/modules/scan/depend/_depend_checks.py | 4 +-
repoman/lib/repoman/modules/scan/depend/profile.py | 22 ++++----
.../repoman/modules/scan/directories/__init__.py | 3 +-
repoman/lib/repoman/modules/scan/eapi/__init__.py | 3 +-
.../lib/repoman/modules/scan/ebuild/__init__.py | 3 +-
.../lib/repoman/modules/scan/eclasses/__init__.py | 3 +-
repoman/lib/repoman/modules/scan/fetch/__init__.py | 3 +-
.../lib/repoman/modules/scan/keywords/__init__.py | 3 +-
.../lib/repoman/modules/scan/manifest/__init__.py | 3 +-
.../lib/repoman/modules/scan/metadata/__init__.py | 3 +-
.../modules/scan/metadata/ebuild_metadata.py | 1 -
.../repoman/modules/scan/metadata/pkgmetadata.py | 5 +-
.../lib/repoman/modules/scan/metadata/restrict.py | 1 -
.../lib/repoman/modules/scan/options/__init__.py | 3 +-
repoman/lib/repoman/modules/vcs/None/status.py | 1 -
repoman/lib/repoman/modules/vcs/__init__.py | 1 -
repoman/lib/repoman/modules/vcs/bzr/changes.py | 2 +-
repoman/lib/repoman/modules/vcs/bzr/status.py | 2 +
repoman/lib/repoman/modules/vcs/cvs/status.py | 2 +-
repoman/lib/repoman/modules/vcs/git/changes.py | 3 +-
repoman/lib/repoman/modules/vcs/git/status.py | 3 +-
repoman/lib/repoman/modules/vcs/hg/changes.py | 3 +-
repoman/lib/repoman/modules/vcs/hg/status.py | 2 +
repoman/lib/repoman/modules/vcs/svn/changes.py | 2 -
repoman/lib/repoman/modules/vcs/svn/status.py | 1 +
repoman/lib/repoman/modules/vcs/vcs.py | 2 -
repoman/lib/repoman/repos.py | 1 +
repoman/lib/repoman/tests/commit/__test__.py | 1 -
repoman/lib/repoman/tests/runTests.py | 8 +--
repoman/lib/repoman/tests/simple/__test__.py | 1 -
repoman/lib/repoman/tests/simple/test_simple.py | 4 +-
repoman/lib/repoman/utilities.py | 6 +--
setup.py | 2 +-
tox.ini | 2 +-
103 files changed, 376 insertions(+), 404 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-04-03 8:28 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-04-03 8:28 UTC (permalink / raw
To: gentoo-commits
commit: 76014e501af0bd835a536f968e68df3e1a81f8fe
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 3 08:28:00 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 3 08:28:00 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=76014e50
Merge tag 'portage-3.0.17' into multilib
portage-3.0.17
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
MANIFEST.in | 3 +
RELEASE-NOTES | 5 +
bin/chmod-lite | 11 +-
bin/ebuild-ipc | 9 +-
bin/ebuild-pyhelper | 21 +
bin/egencache | 2 -
lib/_emerge/EbuildPhase.py | 28 +-
lib/_emerge/Package.py | 9 -
lib/_emerge/Scheduler.py | 2 -
lib/_emerge/UseFlagDisplay.py | 2 -
lib/_emerge/create_depgraph_params.py | 22 +-
lib/_emerge/resolver/output.py | 2 -
lib/portage/__init__.py | 14 +-
lib/portage/cache/flat_hash.py | 3 -
lib/portage/dbapi/vartree.py | 42 +-
lib/portage/locks.py | 91 +-
.../tests/resolver/test_unpack_dependencies.py | 65 --
lib/portage/tests/resolver/test_use_aliases.py | 131 ---
lib/portage/tests/resolver/test_useflags.py | 28 +-
lib/portage/tests/unicode/test_string_format.py | 9 -
lib/portage/util/_async/BuildLogger.py | 12 +-
lib/portage/util/_async/PipeLogger.py | 12 +-
lib/portage/util/_async/SchedulerInterface.py | 10 +-
lib/portage/util/_eventloop/EventLoop.py | 1153 --------------------
lib/portage/util/_eventloop/PollConstants.py | 17 -
lib/portage/util/_eventloop/PollSelectAdapter.py | 74 --
lib/portage/util/_eventloop/asyncio_event_loop.py | 7 +-
lib/portage/util/bin_entry_point.py | 35 +
lib/portage/util/digraph.py | 3 -
lib/portage/util/futures/_asyncio/__init__.py | 50 +-
lib/portage/util/futures/_asyncio/process.py | 116 --
lib/portage/util/futures/_asyncio/streams.py | 13 +-
lib/portage/util/futures/_asyncio/tasks.py | 96 --
lib/portage/util/futures/events.py | 186 ----
lib/portage/util/futures/futures.py | 156 +--
lib/portage/util/futures/transports.py | 87 --
lib/portage/util/futures/unix_events.py | 626 +----------
lib/portage/versions.py | 10 +-
man/emerge.1 | 9 +-
man/make.conf.5 | 8 +-
pyproject.toml | 6 +
setup.py | 102 +-
42 files changed, 366 insertions(+), 2921 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-04-03 8:28 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-04-03 8:28 UTC (permalink / raw
To: gentoo-commits
commit: 639064263dbd0d1a0753d8e754c53ac0ff10768b
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 3 08:28:06 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 3 08:28:06 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=63906426
Merge tag 'portage-3.0.18' into multilib
portage-3.0.18
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 4 +
RELEASE-NOTES | 7 +
bin/glsa-check | 3 +-
lib/_emerge/BlockerCache.py | 6 +-
lib/_emerge/help.py | 2 +-
lib/_emerge/main.py | 2 +
lib/portage/_sets/ProfilePackageSet.py | 9 +-
lib/portage/_sets/profiles.py | 10 +-
lib/portage/dbapi/_VdbMetadataDelta.py | 11 +-
lib/portage/dbapi/vartree.py | 6 +-
lib/portage/dep/__init__.py | 7 +-
lib/portage/eapi.py | 107 ++++++++---
lib/portage/emaint/modules/sync/sync.py | 40 +++-
lib/portage/locks.py | 4 +
.../package/ebuild/_config/KeywordsManager.py | 7 +-
.../package/ebuild/_config/LocationsManager.py | 11 +-
lib/portage/package/ebuild/_config/MaskManager.py | 7 +-
lib/portage/package/ebuild/_config/UseManager.py | 12 +-
lib/portage/package/ebuild/config.py | 11 +-
lib/portage/repository/config.py | 34 +++-
lib/portage/tests/dep/test_isvalidatom.py | 26 ++-
lib/portage/tests/resolver/ResolverPlayground.py | 10 +-
.../test_build_id_profile_format.py | 14 +-
lib/portage/tests/sync/test_sync_local.py | 15 +-
man/emerge.1 | 2 +-
man/portage.5 | 6 +-
repoman/bin/repoman | 4 +-
repoman/cnf/qa_data/qa_data.yaml | 1 +
repoman/cnf/repository/qa_data.yaml | 1 +
repoman/cnf/repository/repository.yaml | 1 +
repoman/lib/repoman/actions.py | 1 -
repoman/lib/repoman/main.py | 43 ++++-
.../repoman/modules/linechecks/phases/__init__.py | 6 +
.../lib/repoman/modules/linechecks/phases/phase.py | 132 +++++++++++++-
repoman/lib/repoman/repos.py | 8 +-
repoman/lib/repoman/tests/simple/test_simple.py | 203 +++++++++++++++++----
repoman/man/repoman.1 | 5 +-
setup.py | 11 +-
38 files changed, 647 insertions(+), 142 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-04-03 8:28 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-04-03 8:28 UTC (permalink / raw
To: gentoo-commits
commit: 0ea03067346adce3e7e825f3a47c1547a5d1856c
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 3 08:27:48 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 3 08:27:48 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0ea03067
Merge tag 'portage-3.0.15' into multilib
portage-3.0.15
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.github/workflows/ci.yml | 2 +-
NEWS | 5 +
RELEASE-NOTES | 12 ++
cnf/make.globals | 1 +
lib/_emerge/create_depgraph_params.py | 8 +-
lib/portage/__init__.py | 4 +-
lib/portage/_emirrordist/FetchTask.py | 3 +-
lib/portage/emaint/modules/merges/__init__.py | 14 +-
lib/portage/emaint/modules/merges/merges.py | 11 +-
lib/portage/package/ebuild/config.py | 17 ++-
lib/portage/package/ebuild/fetch.py | 195 ++++++++++++++++++++++++--
lib/portage/tests/ebuild/test_fetch.py | 182 +++++++++++++++++++-----
lib/portage/tests/emerge/test_simple.py | 4 +-
lib/portage/tests/resolver/test_autounmask.py | 25 +++-
lib/portage/util/_async/PopenProcess.py | 4 +-
man/emaint.1 | 6 +-
man/emerge.1 | 11 +-
man/make.conf.5 | 9 +-
setup.py | 4 +-
tox.ini | 2 +-
20 files changed, 434 insertions(+), 85 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-04-03 8:28 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-04-03 8:28 UTC (permalink / raw
To: gentoo-commits
commit: 8386b1c30385294d1f9e3f982bf3e2cd6fa204ad
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 3 08:27:55 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Apr 3 08:27:55 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=8386b1c3
Merge tag 'portage-3.0.16' into multilib
portage-3.0.16
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 3 +
RELEASE-NOTES | 9 +
bin/shelve-utils | 36 ++++
.../_compat_upgrade/binpkg_multi_instance.py | 33 ++++
lib/portage/_emirrordist/Config.py | 39 ++--
lib/portage/_emirrordist/ContentDB.py | 196 +++++++++++++++++++++
lib/portage/_emirrordist/DeletionIterator.py | 25 ++-
lib/portage/_emirrordist/DeletionTask.py | 8 +
lib/portage/_emirrordist/FetchIterator.py | 3 +-
lib/portage/_emirrordist/FetchTask.py | 5 +-
lib/portage/_emirrordist/main.py | 15 +-
lib/portage/dbapi/bintree.py | 1 +
lib/portage/package/ebuild/fetch.py | 12 +-
lib/portage/repository/config.py | 2 +
lib/portage/tests/ebuild/test_fetch.py | 160 ++++++++++++++++-
.../resolver/test_autounmask_use_slot_conflict.py | 51 ++++++
lib/portage/tests/util/test_shelve.py | 60 +++++++
lib/portage/util/path.py | 4 +-
lib/portage/util/shelve.py | 58 ++++++
man/emirrordist.1 | 6 +-
repoman/cnf/linechecks/linechecks.yaml | 2 +-
.../modules/linechecks/deprecated/deprecated.py | 2 +-
setup.py | 2 +-
23 files changed, 693 insertions(+), 39 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-07-25 11:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-07-25 11:43 UTC (permalink / raw
To: gentoo-commits
commit: 2be6680750aee41ae5c9eaaade8d8a924e842066
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 25 11:43:10 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jul 25 11:43:15 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=2be66807
Merge tag 'portage-3.0.20' into multilib
portage-3.0.20
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 4 ++++
RELEASE-NOTES | 5 ++++
bin/ebuild-ipc.py | 6 +++--
bin/ebuild.sh | 6 ++---
bin/misc-functions.sh | 13 ++++++----
bin/phase-functions.sh | 3 ++-
bin/pid-ns-init | 22 ++++++++++++++++-
bin/portageq | 6 +++--
lib/_emerge/EbuildPhase.py | 5 +++-
lib/_emerge/actions.py | 36 +++++++++++++++++++++++++---
lib/portage/dbapi/porttree.py | 8 +++++--
lib/portage/package/ebuild/doebuild.py | 19 +++++++++++++++
lib/portage/package/ebuild/fetch.py | 21 ++++++++++++-----
man/make.conf.5 | 10 +++++++-
repoman/setup.py | 40 +++++++++++++++++++++----------
setup.py | 43 +++++++++++++++++++++++-----------
16 files changed, 194 insertions(+), 53 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-07-25 11:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-07-25 11:43 UTC (permalink / raw
To: gentoo-commits
commit: 6047463bd3782fcc166b46f0dc781a378d626f68
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 25 11:42:48 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jul 25 11:43:02 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=6047463b
Merge tag 'portage-3.0.19' into multilib
portage-3.0.19
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 4 +
RELEASE-NOTES | 13 ++
bin/eapi.sh | 76 ++++++++-
bin/ebuild-helpers/doconfd | 8 +-
bin/ebuild-helpers/doenvd | 8 +-
bin/ebuild-helpers/doheader | 8 +-
bin/ebuild-helpers/doinitd | 9 +-
bin/ebuild-helpers/dosym | 67 +++++++-
bin/ebuild-ipc.py | 20 ++-
bin/ebuild.sh | 65 ++++++--
bin/isolated-functions.sh | 6 +-
bin/phase-functions.sh | 16 +-
bin/phase-helpers.sh | 60 +++++--
bin/regenworld | 7 +-
cnf/sets/portage.conf | 1 +
lib/_emerge/EbuildBuild.py | 25 ++-
lib/_emerge/Package.py | 8 +-
lib/_emerge/PackageUninstall.py | 2 +-
lib/_emerge/Scheduler.py | 36 +++--
lib/_emerge/actions.py | 30 +++-
lib/_emerge/depgraph.py | 7 +-
lib/_emerge/main.py | 4 +-
lib/_emerge/unmerge.py | 19 ++-
lib/portage/__init__.py | 4 +-
lib/portage/_emirrordist/FetchIterator.py | 68 ++++----
lib/portage/_sets/dbapi.py | 6 +
lib/portage/cache/metadata.py | 4 +-
lib/portage/const.py | 4 +-
lib/portage/dbapi/bintree.py | 7 +-
lib/portage/dbapi/porttree.py | 4 +-
lib/portage/dbapi/vartree.py | 2 +-
lib/portage/dep/__init__.py | 8 +-
lib/portage/dispatch_conf.py | 4 +-
lib/portage/eapi.py | 15 +-
.../package/ebuild/_config/special_env_vars.py | 7 +-
lib/portage/package/ebuild/config.py | 24 ++-
lib/portage/package/ebuild/doebuild.py | 15 +-
lib/portage/package/ebuild/fetch.py | 66 ++++----
lib/portage/tests/__init__.py | 127 ++++++++-------
lib/portage/tests/ebuild/test_shell_quote.py | 126 +++++++++++++++
lib/portage/tests/emerge/test_simple.py | 10 +-
lib/portage/tests/resolver/ResolverPlayground.py | 39 ++++-
lib/portage/tests/resolver/test_unmerge_order.py | 179 +++++++++++++++++++++
lib/portage/update.py | 17 +-
lib/portage/util/_async/PipeLogger.py | 35 ++--
lib/portage/util/env_update.py | 5 +
man/ebuild.5 | 33 +++-
man/emerge.1 | 2 +-
man/make.conf.5 | 34 +++-
man/portage.5 | 33 +++-
repoman/RELEASE-NOTES | 6 +
repoman/lib/repoman/argparser.py | 5 +-
repoman/lib/repoman/main.py | 2 +-
repoman/lib/repoman/modules/scan/module.py | 4 +-
repoman/lib/repoman/tests/__init__.py | 18 +--
repoman/lib/repoman/tests/simple/test_simple.py | 6 +-
repoman/setup.py | 9 +-
setup.py | 2 +-
58 files changed, 1147 insertions(+), 282 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-07-25 11:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-07-25 11:43 UTC (permalink / raw
To: gentoo-commits
commit: c0a00cde2d10eda4c207d488e01b48e0bfc75ce9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sun Jul 25 11:43:19 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jul 25 11:43:22 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c0a00cde
Merge tag 'portage-3.0.21' into multilib
portage-3.0.21
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.github/workflows/ci.yml | 2 +-
NEWS | 4 ++
README | 2 +-
bin/ebuild.sh | 16 +++---
bin/estrip | 14 ++---
bin/install-qa-check.d/10executable-issues | 2 +-
bin/install-qa-check.d/10ignored-flags | 4 +-
bin/install-qa-check.d/80libraries | 2 +-
bin/misc-functions.sh | 2 +-
bin/phase-functions.sh | 8 +--
bin/phase-helpers.sh | 2 +-
bin/pid-ns-init | 22 +-------
lib/_emerge/actions.py | 36 ++-----------
lib/portage/_sets/dbapi.py | 4 +-
lib/portage/package/ebuild/fetch.py | 4 +-
man/make.conf.5 | 10 +---
setup.py | 84 ++++++++++++++++++++++++++----
17 files changed, 114 insertions(+), 104 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-10-30 9:44 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-10-30 9:44 UTC (permalink / raw
To: gentoo-commits
commit: 4188cc1aa0a247a3d8a93cce13da8a281e3c83df
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 30 09:34:13 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Oct 30 09:37:05 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4188cc1a
Merge tag 'portage-3.0.22' into multilib
portage-3.0.22
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.github/workflows/ci.yml | 4 ++--
MANIFEST.in | 2 ++
NEWS | 9 +++++++++
bin/estrip | 4 +++-
lib/_emerge/resolver/output_helpers.py | 21 +++++++++++++++++++--
lib/portage/package/ebuild/doebuild.py | 11 ++++++++++-
man/emerge.1 | 2 +-
man/make.conf.5 | 3 +--
setup.py | 2 +-
tox.ini | 18 +++++++++---------
10 files changed, 57 insertions(+), 19 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2021-10-30 9:44 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2021-10-30 9:44 UTC (permalink / raw
To: gentoo-commits
commit: d3588989ed5cd2abee8dd4bacf6067491eb36096
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 30 09:37:49 2021 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sat Oct 30 09:37:49 2021 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d3588989
Merge tag 'portage-3.0.23' into multilib
portage-3.0.23
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 9 +++++
bin/dispatch-conf | 13 ++++++-
bin/ebuild.sh | 8 ++++
bin/pid-ns-init | 20 +++++++++-
lib/_emerge/post_emerge.py | 2 +-
lib/portage/dispatch_conf.py | 15 ++++++++
lib/portage/package/ebuild/doebuild.py | 2 +-
lib/portage/sync/controller.py | 16 +-------
.../util/_dyn_libs/display_preserved_libs.py | 11 ++++--
lib/portage/util/hooks.py | 43 ++++++++++++++++++++++
man/dispatch-conf.1 | 5 +++
man/make.conf.5 | 5 ++-
setup.py | 2 +-
13 files changed, 127 insertions(+), 24 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 10:01 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 10:01 UTC (permalink / raw
To: gentoo-commits
commit: 53e3b05235f8e438e1426ada3bd42fd1125b7b6d
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 09:54:15 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 09:58:42 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=53e3b052
Merge tag 'portage-3.0.24' into multilib
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.editorconfig | 2 +-
.github/workflows/black.yml | 10 +
.gitignorerevs | 2 +
NEWS | 9 +
README => README.md | 49 +-
RELEASE-NOTES | 7 +
bin/check-implicit-pointer-usage.py | 52 +-
bin/chmod-lite.py | 25 +-
bin/chpathtool.py | 323 +-
bin/dohtml.py | 424 +-
bin/doins.py | 1007 +-
bin/ebuild-ipc.py | 519 +-
bin/ebuild.sh | 36 +-
bin/filter-bash-environment.py | 266 +-
bin/install.py | 379 +-
bin/lock-helper.py | 34 +-
bin/misc-functions.sh | 64 +-
bin/phase-functions.sh | 4 +-
bin/pid-ns-init | 262 +-
bin/portageq | 3 +-
bin/socks5-server.py | 449 +-
bin/xattr-helper.py | 226 +-
bin/xpak-helper.py | 81 +-
doc/api/conf.py | 24 +-
lib/_emerge/AbstractDepPriority.py | 38 +-
lib/_emerge/AbstractEbuildProcess.py | 869 +-
lib/_emerge/AbstractPollTask.py | 205 +-
lib/_emerge/AsynchronousLock.py | 571 +-
lib/_emerge/AsynchronousTask.py | 391 +-
lib/_emerge/AtomArg.py | 11 +-
lib/_emerge/Binpkg.py | 988 +-
lib/_emerge/BinpkgEnvExtractor.py | 123 +-
lib/_emerge/BinpkgExtractorAsync.py | 190 +-
lib/_emerge/BinpkgFetcher.py | 447 +-
lib/_emerge/BinpkgPrefetcher.py | 74 +-
lib/_emerge/BinpkgVerifier.py | 232 +-
lib/_emerge/Blocker.py | 15 +-
lib/_emerge/BlockerCache.py | 343 +-
lib/_emerge/BlockerDB.py | 226 +-
lib/_emerge/BlockerDepPriority.py | 14 +-
lib/_emerge/CompositeTask.py | 234 +-
lib/_emerge/DepPriority.py | 100 +-
lib/_emerge/DepPriorityNormalRange.py | 86 +-
lib/_emerge/DepPrioritySatisfiedRange.py | 183 +-
lib/_emerge/Dependency.py | 38 +-
lib/_emerge/DependencyArg.py | 48 +-
lib/_emerge/EbuildBinpkg.py | 94 +-
lib/_emerge/EbuildBuild.py | 1127 +-
lib/_emerge/EbuildBuildDir.py | 295 +-
lib/_emerge/EbuildExecuter.py | 178 +-
lib/_emerge/EbuildFetcher.py | 741 +-
lib/_emerge/EbuildFetchonly.py | 58 +-
lib/_emerge/EbuildIpcDaemon.py | 164 +-
lib/_emerge/EbuildMerge.py | 139 +-
lib/_emerge/EbuildMetadataPhase.py | 431 +-
lib/_emerge/EbuildPhase.py | 1045 +-
lib/_emerge/EbuildProcess.py | 31 +-
lib/_emerge/EbuildSpawnProcess.py | 23 +-
lib/_emerge/FakeVartree.py | 621 +-
lib/_emerge/FifoIpcDaemon.py | 105 +-
lib/_emerge/JobStatusDisplay.py | 556 +-
lib/_emerge/MergeListItem.py | 262 +-
lib/_emerge/MetadataRegen.py | 292 +-
lib/_emerge/MiscFunctionsProcess.py | 91 +-
lib/_emerge/Package.py | 1869 +-
lib/_emerge/PackageArg.py | 18 +-
lib/_emerge/PackageMerge.py | 90 +-
lib/_emerge/PackagePhase.py | 176 +-
lib/_emerge/PackageUninstall.py | 274 +-
lib/_emerge/PackageVirtualDbapi.py | 274 +-
lib/_emerge/PipeReader.py | 169 +-
lib/_emerge/PollScheduler.py | 346 +-
lib/_emerge/ProgressHandler.py | 30 +-
lib/_emerge/RootConfig.py | 64 +-
lib/_emerge/Scheduler.py | 4260 ++--
lib/_emerge/SequentialTaskQueue.py | 157 +-
lib/_emerge/SetArg.py | 12 +-
lib/_emerge/SpawnProcess.py | 545 +-
lib/_emerge/SubProcess.py | 157 +-
lib/_emerge/Task.py | 91 +-
lib/_emerge/TaskSequence.py | 95 +-
lib/_emerge/UninstallFailure.py | 21 +-
lib/_emerge/UnmergeDepPriority.py | 68 +-
lib/_emerge/UseFlagDisplay.py | 188 +-
lib/_emerge/UserQuery.py | 108 +-
lib/_emerge/_find_deep_system_runtime_deps.py | 54 +-
lib/_emerge/_flush_elog_mod_echo.py | 19 +-
lib/_emerge/actions.py | 7052 +++---
lib/_emerge/chk_updated_cfg_files.py | 74 +-
lib/_emerge/clear_caches.py | 21 +-
lib/_emerge/countdown.py | 24 +-
lib/_emerge/create_depgraph_params.py | 398 +-
lib/_emerge/create_world_atom.py | 213 +-
lib/_emerge/depgraph.py | 21935 ++++++++++---------
lib/_emerge/emergelog.py | 69 +-
lib/_emerge/getloadavg.py | 43 +-
lib/_emerge/help.py | 168 +-
lib/_emerge/is_valid_package_atom.py | 30 +-
lib/_emerge/main.py | 2557 ++-
lib/_emerge/post_emerge.py | 292 +-
lib/_emerge/resolver/DbapiProvidesIndex.py | 191 +-
lib/_emerge/resolver/backtracking.py | 548 +-
lib/_emerge/resolver/circular_dependency.py | 576 +-
lib/_emerge/resolver/output.py | 1973 +-
lib/_emerge/resolver/output_helpers.py | 1113 +-
lib/_emerge/resolver/package_tracker.py | 740 +-
lib/_emerge/resolver/slot_collision.py | 2466 ++-
lib/_emerge/search.py | 1071 +-
lib/_emerge/show_invalid_depstring_notice.py | 49 +-
lib/_emerge/stdout_spinner.py | 148 +-
lib/_emerge/unmerge.py | 1268 +-
lib/portage/__init__.py | 1197 +-
lib/portage/_compat_upgrade/binpkg_compression.py | 67 +-
.../_compat_upgrade/binpkg_multi_instance.py | 44 +-
lib/portage/_compat_upgrade/default_locations.py | 174 +-
lib/portage/_emirrordist/Config.py | 274 +-
lib/portage/_emirrordist/ContentDB.py | 371 +-
lib/portage/_emirrordist/DeletionIterator.py | 204 +-
lib/portage/_emirrordist/DeletionTask.py | 284 +-
lib/portage/_emirrordist/FetchIterator.py | 539 +-
lib/portage/_emirrordist/FetchTask.py | 1354 +-
lib/portage/_emirrordist/MirrorDistTask.py | 458 +-
lib/portage/_emirrordist/main.py | 882 +-
lib/portage/_global_updates.py | 504 +-
lib/portage/_legacy_globals.py | 145 +-
lib/portage/_selinux.py | 228 +-
lib/portage/_sets/ProfilePackageSet.py | 65 +-
lib/portage/_sets/__init__.py | 619 +-
lib/portage/_sets/base.py | 462 +-
lib/portage/_sets/dbapi.py | 1073 +-
lib/portage/_sets/files.py | 757 +-
lib/portage/_sets/libs.py | 172 +-
lib/portage/_sets/profiles.py | 110 +-
lib/portage/_sets/security.py | 151 +-
lib/portage/_sets/shell.py | 65 +-
lib/portage/binrepo/config.py | 249 +-
lib/portage/cache/anydbm.py | 159 +-
lib/portage/cache/cache_errors.py | 103 +-
lib/portage/cache/ebuild_xattr.py | 298 +-
lib/portage/cache/flat_hash.py | 263 +-
lib/portage/cache/fs_template.py | 130 +-
lib/portage/cache/index/IndexStreamIterator.py | 32 +-
lib/portage/cache/index/pkg_desc_index.py | 67 +-
lib/portage/cache/mappings.py | 780 +-
lib/portage/cache/metadata.py | 292 +-
lib/portage/cache/sql_template.py | 618 +-
lib/portage/cache/sqlite.py | 633 +-
lib/portage/cache/template.py | 674 +-
lib/portage/cache/volatile.py | 35 +-
lib/portage/checksum.py | 948 +-
lib/portage/const.py | 382 +-
lib/portage/cvstree.py | 551 +-
lib/portage/data.py | 538 +-
lib/portage/dbapi/DummyTree.py | 24 +-
lib/portage/dbapi/IndexedPortdb.py | 313 +-
lib/portage/dbapi/IndexedVardb.py | 209 +-
.../dbapi/_ContentsCaseSensitivityManager.py | 179 +-
lib/portage/dbapi/_MergeProcess.py | 465 +-
lib/portage/dbapi/_SyncfsProcess.py | 91 +-
lib/portage/dbapi/_VdbMetadataDelta.py | 333 +-
lib/portage/dbapi/__init__.py | 878 +-
lib/portage/dbapi/_expand_new_virt.py | 129 +-
lib/portage/dbapi/_similar_name_search.py | 96 +-
lib/portage/dbapi/bintree.py | 3827 ++--
lib/portage/dbapi/cpv_expand.py | 183 +-
lib/portage/dbapi/dep_expand.py | 84 +-
lib/portage/dbapi/porttree.py | 3230 +--
lib/portage/dbapi/vartree.py | 12165 +++++-----
lib/portage/dbapi/virtual.py | 442 +-
lib/portage/debug.py | 215 +-
lib/portage/dep/__init__.py | 5919 ++---
lib/portage/dep/_dnf.py | 159 +-
lib/portage/dep/_slot_operator.py | 206 +-
lib/portage/dep/dep_check.py | 2006 +-
lib/portage/dep/soname/SonameAtom.py | 96 +-
lib/portage/dep/soname/multilib_category.py | 242 +-
lib/portage/dep/soname/parse.py | 68 +-
lib/portage/dispatch_conf.py | 707 +-
lib/portage/eapi.py | 466 +-
lib/portage/eclass_cache.py | 322 +-
lib/portage/elog/__init__.py | 326 +-
lib/portage/elog/filtering.py | 21 +-
lib/portage/elog/messages.py | 311 +-
lib/portage/elog/mod_custom.py | 25 +-
lib/portage/elog/mod_echo.py | 103 +-
lib/portage/elog/mod_mail.py | 63 +-
lib/portage/elog/mod_mail_summary.py | 150 +-
lib/portage/elog/mod_save.py | 128 +-
lib/portage/elog/mod_save_summary.py | 134 +-
lib/portage/elog/mod_syslog.py | 37 +-
lib/portage/emaint/defaults.py | 39 +-
lib/portage/emaint/main.py | 431 +-
lib/portage/emaint/modules/binhost/__init__.py | 26 +-
lib/portage/emaint/modules/binhost/binhost.py | 351 +-
lib/portage/emaint/modules/config/__init__.py | 26 +-
lib/portage/emaint/modules/config/config.py | 129 +-
lib/portage/emaint/modules/logs/__init__.py | 79 +-
lib/portage/emaint/modules/logs/logs.py | 186 +-
lib/portage/emaint/modules/merges/__init__.py | 69 +-
lib/portage/emaint/modules/merges/merges.py | 543 +-
lib/portage/emaint/modules/move/__init__.py | 46 +-
lib/portage/emaint/modules/move/move.py | 361 +-
lib/portage/emaint/modules/resume/__init__.py | 26 +-
lib/portage/emaint/modules/resume/resume.py | 97 +-
lib/portage/emaint/modules/sync/__init__.py | 99 +-
lib/portage/emaint/modules/sync/sync.py | 936 +-
lib/portage/emaint/modules/world/__init__.py | 26 +-
lib/portage/emaint/modules/world/world.py | 158 +-
lib/portage/env/config.py | 162 +-
lib/portage/env/loaders.py | 588 +-
lib/portage/env/validators.py | 23 +-
lib/portage/exception.py | 248 +-
lib/portage/getbinpkg.py | 1734 +-
lib/portage/glsa.py | 1432 +-
lib/portage/localization.py | 62 +-
lib/portage/locks.py | 1419 +-
lib/portage/mail.py | 238 +-
lib/portage/manifest.py | 1446 +-
lib/portage/metadata.py | 417 +-
lib/portage/module.py | 449 +-
lib/portage/news.py | 862 +-
lib/portage/output.py | 1544 +-
.../package/ebuild/_config/KeywordsManager.py | 658 +-
.../package/ebuild/_config/LicenseManager.py | 450 +-
.../package/ebuild/_config/LocationsManager.py | 752 +-
lib/portage/package/ebuild/_config/MaskManager.py | 585 +-
lib/portage/package/ebuild/_config/UseManager.py | 1297 +-
.../package/ebuild/_config/VirtualsManager.py | 444 +-
.../package/ebuild/_config/env_var_validation.py | 31 +-
lib/portage/package/ebuild/_config/features_set.py | 237 +-
lib/portage/package/ebuild/_config/helper.py | 103 +-
.../package/ebuild/_config/special_env_vars.py | 424 +-
.../package/ebuild/_config/unpack_dependencies.py | 67 +-
lib/portage/package/ebuild/_ipc/ExitCommand.py | 36 +-
lib/portage/package/ebuild/_ipc/IpcCommand.py | 7 +-
lib/portage/package/ebuild/_ipc/QueryCommand.py | 264 +-
lib/portage/package/ebuild/_metadata_invalid.py | 68 +-
.../ebuild/_parallel_manifest/ManifestProcess.py | 74 +-
.../ebuild/_parallel_manifest/ManifestScheduler.py | 146 +-
.../ebuild/_parallel_manifest/ManifestTask.py | 403 +-
lib/portage/package/ebuild/_spawn_nofetch.py | 206 +-
lib/portage/package/ebuild/config.py | 6246 +++---
.../package/ebuild/deprecated_profile_check.py | 172 +-
lib/portage/package/ebuild/digestcheck.py | 296 +-
lib/portage/package/ebuild/digestgen.py | 401 +-
lib/portage/package/ebuild/doebuild.py | 5524 ++---
lib/portage/package/ebuild/fetch.py | 3518 +--
lib/portage/package/ebuild/getmaskingreason.py | 205 +-
lib/portage/package/ebuild/getmaskingstatus.py | 333 +-
lib/portage/package/ebuild/prepare_build_dirs.py | 906 +-
lib/portage/package/ebuild/profile_iuse.py | 49 +-
lib/portage/process.py | 1872 +-
lib/portage/progress.py | 87 +-
lib/portage/proxy/lazyimport.py | 385 +-
lib/portage/proxy/objectproxy.py | 120 +-
lib/portage/repository/config.py | 2743 +--
.../repository/storage/hardlink_quarantine.py | 181 +-
lib/portage/repository/storage/hardlink_rcu.py | 491 +-
lib/portage/repository/storage/inplace.py | 61 +-
lib/portage/repository/storage/interface.py | 127 +-
lib/portage/sync/__init__.py | 57 +-
lib/portage/sync/config_checks.py | 131 +-
lib/portage/sync/controller.py | 717 +-
lib/portage/sync/getaddrinfo_validate.py | 37 +-
lib/portage/sync/modules/cvs/__init__.py | 64 +-
lib/portage/sync/modules/cvs/cvs.py | 116 +-
lib/portage/sync/modules/git/__init__.py | 115 +-
lib/portage/sync/modules/git/git.py | 584 +-
lib/portage/sync/modules/mercurial/__init__.py | 52 +-
lib/portage/sync/modules/mercurial/mercurial.py | 320 +-
lib/portage/sync/modules/rsync/__init__.py | 52 +-
lib/portage/sync/modules/rsync/rsync.py | 1519 +-
lib/portage/sync/modules/svn/__init__.py | 38 +-
lib/portage/sync/modules/svn/svn.py | 152 +-
lib/portage/sync/modules/webrsync/__init__.py | 60 +-
lib/portage/sync/modules/webrsync/webrsync.py | 236 +-
lib/portage/sync/old_tree_timestamp.py | 167 +-
lib/portage/sync/syncbase.py | 657 +-
lib/portage/tests/__init__.py | 550 +-
lib/portage/tests/bin/setup_env.py | 131 +-
lib/portage/tests/bin/test_dobin.py | 19 +-
lib/portage/tests/bin/test_dodir.py | 23 +-
lib/portage/tests/bin/test_doins.py | 636 +-
lib/portage/tests/bin/test_eapi7_ver_funcs.py | 460 +-
lib/portage/tests/bin/test_filter_bash_env.py | 70 +-
lib/portage/tests/dbapi/test_auxdb.py | 197 +-
lib/portage/tests/dbapi/test_fakedbapi.py | 163 +-
lib/portage/tests/dbapi/test_portdb_cache.py | 349 +-
lib/portage/tests/dep/testAtom.py | 997 +-
lib/portage/tests/dep/testCheckRequiredUse.py | 414 +-
lib/portage/tests/dep/testExtendedAtomDict.py | 20 +-
lib/portage/tests/dep/testExtractAffectingUSE.py | 158 +-
lib/portage/tests/dep/testStandalone.py | 66 +-
lib/portage/tests/dep/test_best_match_to_list.py | 168 +-
lib/portage/tests/dep/test_dep_getcpv.py | 56 +-
lib/portage/tests/dep/test_dep_getrepo.py | 40 +-
lib/portage/tests/dep/test_dep_getslot.py | 35 +-
lib/portage/tests/dep/test_dep_getusedeps.py | 47 +-
lib/portage/tests/dep/test_dnf_convert.py | 94 +-
lib/portage/tests/dep/test_get_operator.py | 53 +-
.../tests/dep/test_get_required_use_flags.py | 76 +-
lib/portage/tests/dep/test_isjustname.py | 32 +-
lib/portage/tests/dep/test_isvalidatom.py | 407 +-
lib/portage/tests/dep/test_match_from_list.py | 410 +-
lib/portage/tests/dep/test_overlap_dnf.py | 57 +-
lib/portage/tests/dep/test_paren_reduce.py | 121 +-
lib/portage/tests/dep/test_soname_atom_pickle.py | 20 +-
lib/portage/tests/dep/test_use_reduce.py | 1391 +-
.../tests/ebuild/test_array_fromfile_eof.py | 73 +-
lib/portage/tests/ebuild/test_config.py | 724 +-
lib/portage/tests/ebuild/test_doebuild_fd_pipes.py | 273 +-
lib/portage/tests/ebuild/test_doebuild_spawn.py | 175 +-
lib/portage/tests/ebuild/test_fetch.py | 1518 +-
lib/portage/tests/ebuild/test_ipc_daemon.py | 289 +-
lib/portage/tests/ebuild/test_shell_quote.py | 218 +-
lib/portage/tests/ebuild/test_spawn.py | 79 +-
.../tests/ebuild/test_use_expand_incremental.py | 212 +-
lib/portage/tests/emerge/test_config_protect.py | 451 +-
.../emerge/test_emerge_blocker_file_collision.py | 304 +-
lib/portage/tests/emerge/test_emerge_slot_abi.py | 335 +-
lib/portage/tests/emerge/test_global_updates.py | 33 +-
lib/portage/tests/emerge/test_simple.py | 1054 +-
.../tests/env/config/test_PackageKeywordsFile.py | 59 +-
.../tests/env/config/test_PackageMaskFile.py | 34 +-
.../tests/env/config/test_PackageUseFile.py | 44 +-
.../tests/env/config/test_PortageModulesFile.py | 57 +-
lib/portage/tests/glsa/test_security_set.py | 174 +-
lib/portage/tests/lafilefixer/test_lafilefixer.py | 187 +-
.../test_lazy_import_portage_baseline.py | 132 +-
.../lazyimport/test_preload_portage_submodules.py | 18 +-
lib/portage/tests/lint/metadata.py | 9 +-
lib/portage/tests/lint/test_bash_syntax.py | 81 +-
lib/portage/tests/lint/test_compile_modules.py | 103 +-
lib/portage/tests/lint/test_import_modules.py | 59 +-
lib/portage/tests/locks/test_asynchronous_lock.py | 340 +-
lib/portage/tests/locks/test_lock_nonblock.py | 120 +-
lib/portage/tests/news/test_NewsItem.py | 121 +-
lib/portage/tests/process/test_AsyncFunction.py | 91 +-
lib/portage/tests/process/test_PipeLogger.py | 106 +-
lib/portage/tests/process/test_PopenProcess.py | 156 +-
.../tests/process/test_PopenProcessBlockingIO.py | 103 +-
lib/portage/tests/process/test_poll.py | 182 +-
lib/portage/tests/process/test_unshare_net.py | 38 +-
lib/portage/tests/resolver/ResolverPlayground.py | 1947 +-
.../test_build_id_profile_format.py | 271 +-
.../binpkg_multi_instance/test_rebuilt_binaries.py | 193 +-
.../tests/resolver/soname/test_autounmask.py | 176 +-
lib/portage/tests/resolver/soname/test_depclean.py | 106 +-
.../tests/resolver/soname/test_downgrade.py | 463 +-
.../tests/resolver/soname/test_or_choices.py | 166 +-
.../tests/resolver/soname/test_reinstall.py | 150 +-
.../tests/resolver/soname/test_skip_update.py | 148 +-
.../soname/test_slot_conflict_reinstall.py | 671 +-
.../resolver/soname/test_slot_conflict_update.py | 203 +-
.../tests/resolver/soname/test_soname_provided.py | 131 +-
.../tests/resolver/soname/test_unsatisfiable.py | 117 +-
.../tests/resolver/soname/test_unsatisfied.py | 148 +-
.../test_aggressive_backtrack_downgrade.py | 153 +-
lib/portage/tests/resolver/test_autounmask.py | 1346 +-
.../tests/resolver/test_autounmask_binpkg_use.py | 115 +-
.../resolver/test_autounmask_keep_keywords.py | 122 +-
.../tests/resolver/test_autounmask_multilib_use.py | 147 +-
.../tests/resolver/test_autounmask_parent.py | 65 +-
.../resolver/test_autounmask_use_backtrack.py | 146 +-
.../tests/resolver/test_autounmask_use_breakage.py | 174 +-
.../resolver/test_autounmask_use_slot_conflict.py | 76 +-
lib/portage/tests/resolver/test_backtracking.py | 360 +-
lib/portage/tests/resolver/test_bdeps.py | 399 +-
.../resolver/test_binary_pkg_ebuild_visibility.py | 262 +-
lib/portage/tests/resolver/test_blocker.py | 240 +-
lib/portage/tests/resolver/test_changed_deps.py | 213 +-
.../tests/resolver/test_circular_choices.py | 401 +-
.../tests/resolver/test_circular_choices_rust.py | 160 +-
.../tests/resolver/test_circular_dependencies.py | 197 +-
lib/portage/tests/resolver/test_complete_graph.py | 291 +-
...test_complete_if_new_subslot_without_revbump.py | 120 +-
lib/portage/tests/resolver/test_depclean.py | 552 +-
lib/portage/tests/resolver/test_depclean_order.py | 105 +-
.../resolver/test_depclean_slot_unavailable.py | 127 +-
lib/portage/tests/resolver/test_depth.py | 586 +-
.../resolver/test_disjunctive_depend_order.py | 145 +-
lib/portage/tests/resolver/test_eapi.py | 298 +-
.../tests/resolver/test_features_test_use.py | 146 +-
.../resolver/test_imagemagick_graphicsmagick.py | 183 +-
lib/portage/tests/resolver/test_keywords.py | 664 +-
lib/portage/tests/resolver/test_merge_order.py | 1237 +-
.../test_missing_iuse_and_evaluated_atoms.py | 53 +-
lib/portage/tests/resolver/test_multirepo.py | 779 +-
lib/portage/tests/resolver/test_multislot.py | 99 +-
.../tests/resolver/test_old_dep_chain_display.py | 67 +-
lib/portage/tests/resolver/test_onlydeps.py | 57 +-
.../tests/resolver/test_onlydeps_circular.py | 87 +-
.../tests/resolver/test_onlydeps_minimal.py | 83 +-
lib/portage/tests/resolver/test_or_choices.py | 1474 +-
.../tests/resolver/test_or_downgrade_installed.py | 152 +-
.../tests/resolver/test_or_upgrade_installed.py | 418 +-
lib/portage/tests/resolver/test_output.py | 183 +-
lib/portage/tests/resolver/test_package_tracker.py | 509 +-
.../tests/resolver/test_profile_default_eapi.py | 214 +-
.../tests/resolver/test_profile_package_set.py | 217 +-
lib/portage/tests/resolver/test_rebuild.py | 324 +-
.../test_regular_slot_change_without_revbump.py | 104 +-
lib/portage/tests/resolver/test_required_use.py | 435 +-
.../resolver/test_runtime_cycle_merge_order.py | 127 +-
lib/portage/tests/resolver/test_simple.py | 144 +-
lib/portage/tests/resolver/test_slot_abi.py | 907 +-
.../tests/resolver/test_slot_abi_downgrade.py | 425 +-
.../resolver/test_slot_change_without_revbump.py | 150 +-
lib/portage/tests/resolver/test_slot_collisions.py | 606 +-
.../resolver/test_slot_conflict_force_rebuild.py | 125 +-
.../resolver/test_slot_conflict_mask_update.py | 63 +-
.../tests/resolver/test_slot_conflict_rebuild.py | 937 +-
.../test_slot_conflict_unsatisfied_deep_deps.py | 351 +-
.../tests/resolver/test_slot_conflict_update.py | 156 +-
.../resolver/test_slot_conflict_update_virt.py | 129 +-
.../resolver/test_slot_operator_autounmask.py | 232 +-
.../tests/resolver/test_slot_operator_bdeps.py | 395 +-
.../resolver/test_slot_operator_complete_graph.py | 250 +-
.../resolver/test_slot_operator_exclusive_slots.py | 266 +-
.../resolver/test_slot_operator_missed_update.py | 196 +-
.../tests/resolver/test_slot_operator_rebuild.py | 196 +-
.../resolver/test_slot_operator_required_use.py | 114 +-
.../resolver/test_slot_operator_reverse_deps.py | 540 +-
.../test_slot_operator_runtime_pkg_mask.py | 240 +-
.../resolver/test_slot_operator_unsatisfied.py | 121 +-
.../tests/resolver/test_slot_operator_unsolved.py | 147 +-
..._slot_operator_update_probe_parent_downgrade.py | 112 +-
.../test_solve_non_slot_operator_slot_conflicts.py | 113 +-
lib/portage/tests/resolver/test_targetroot.py | 178 +-
lib/portage/tests/resolver/test_unmerge_order.py | 394 +-
.../tests/resolver/test_use_dep_defaults.py | 80 +-
lib/portage/tests/resolver/test_useflags.py | 214 +-
.../resolver/test_virtual_minimize_children.py | 548 +-
lib/portage/tests/resolver/test_virtual_slot.py | 458 +-
lib/portage/tests/resolver/test_with_test_deps.py | 150 +-
lib/portage/tests/runTests.py | 36 +-
.../tests/sets/base/testInternalPackageSet.py | 67 +-
lib/portage/tests/sets/files/testConfigFileSet.py | 37 +-
lib/portage/tests/sets/files/testStaticFileSet.py | 27 +-
lib/portage/tests/sets/shell/testShell.py | 31 +-
lib/portage/tests/sync/test_sync_local.py | 836 +-
lib/portage/tests/unicode/test_string_format.py | 78 +-
lib/portage/tests/update/test_move_ent.py | 188 +-
lib/portage/tests/update/test_move_slot_ent.py | 259 +-
lib/portage/tests/update/test_update_dbentry.py | 560 +-
.../tests/util/dyn_libs/test_soname_deps.py | 37 +-
.../tests/util/eventloop/test_call_soon_fifo.py | 28 +-
lib/portage/tests/util/file_copy/test_copyfile.py | 98 +-
.../util/futures/asyncio/test_child_watcher.py | 78 +-
.../futures/asyncio/test_event_loop_in_fork.py | 68 +-
.../tests/util/futures/asyncio/test_pipe_closed.py | 251 +-
.../asyncio/test_policy_wrapper_recursion.py | 22 +-
.../futures/asyncio/test_run_until_complete.py | 44 +-
.../util/futures/asyncio/test_subprocess_exec.py | 356 +-
.../util/futures/asyncio/test_wakeup_fd_sigchld.py | 62 +-
.../tests/util/futures/test_compat_coroutine.py | 392 +-
.../tests/util/futures/test_done_callback.py | 41 +-
.../util/futures/test_done_callback_after_exit.py | 69 +-
.../tests/util/futures/test_iter_completed.py | 141 +-
lib/portage/tests/util/futures/test_retry.py | 462 +-
lib/portage/tests/util/test_checksum.py | 236 +-
lib/portage/tests/util/test_digraph.py | 495 +-
lib/portage/tests/util/test_file_copier.py | 63 +-
lib/portage/tests/util/test_getconfig.py | 111 +-
lib/portage/tests/util/test_grabdict.py | 9 +-
lib/portage/tests/util/test_install_mask.py | 315 +-
lib/portage/tests/util/test_normalizedPath.py | 11 +-
lib/portage/tests/util/test_shelve.py | 90 +-
lib/portage/tests/util/test_socks5.py | 314 +-
lib/portage/tests/util/test_stackDictList.py | 28 +-
lib/portage/tests/util/test_stackDicts.py | 41 +-
lib/portage/tests/util/test_stackLists.py | 22 +-
lib/portage/tests/util/test_uniqueArray.py | 33 +-
lib/portage/tests/util/test_varExpand.py | 182 +-
lib/portage/tests/util/test_whirlpool.py | 17 +-
lib/portage/tests/util/test_xattr.py | 278 +-
lib/portage/tests/versions/test_cpv_sort_key.py | 18 +-
lib/portage/tests/versions/test_vercmp.py | 151 +-
lib/portage/tests/xpak/test_decodeint.py | 12 +-
lib/portage/update.py | 805 +-
lib/portage/util/ExtractKernelVersion.py | 135 +-
lib/portage/util/SlotObject.py | 101 +-
lib/portage/util/__init__.py | 3580 +--
lib/portage/util/_async/AsyncFunction.py | 116 +-
lib/portage/util/_async/AsyncScheduler.py | 194 +-
lib/portage/util/_async/AsyncTaskFuture.py | 48 +-
lib/portage/util/_async/BuildLogger.py | 201 +-
lib/portage/util/_async/FileCopier.py | 32 +-
lib/portage/util/_async/FileDigester.py | 140 +-
lib/portage/util/_async/ForkProcess.py | 295 +-
lib/portage/util/_async/PipeLogger.py | 359 +-
lib/portage/util/_async/PipeReaderBlockingIO.py | 130 +-
lib/portage/util/_async/PopenProcess.py | 56 +-
lib/portage/util/_async/SchedulerInterface.py | 233 +-
lib/portage/util/_async/TaskScheduler.py | 23 +-
lib/portage/util/_async/run_main_scheduler.py | 66 +-
lib/portage/util/_compare_files.py | 179 +-
lib/portage/util/_ctypes.py | 65 +-
lib/portage/util/_desktop_entry.py | 117 +-
lib/portage/util/_dyn_libs/LinkageMapELF.py | 1855 +-
lib/portage/util/_dyn_libs/NeededEntry.py | 129 +-
.../util/_dyn_libs/PreservedLibsRegistry.py | 461 +-
.../util/_dyn_libs/display_preserved_libs.py | 167 +-
lib/portage/util/_dyn_libs/soname_deps.py | 310 +-
lib/portage/util/_dyn_libs/soname_deps_qa.py | 161 +-
lib/portage/util/_eventloop/asyncio_event_loop.py | 264 +-
lib/portage/util/_eventloop/global_event_loop.py | 2 +-
lib/portage/util/_get_vm_info.py | 140 +-
lib/portage/util/_info_files.py | 234 +-
lib/portage/util/_path.py | 34 +-
lib/portage/util/_pty.py | 98 +-
lib/portage/util/_urlopen.py | 157 +-
lib/portage/util/_xattr.py | 350 +-
lib/portage/util/backoff.py | 80 +-
lib/portage/util/bin_entry_point.py | 44 +-
lib/portage/util/changelog.py | 103 +-
lib/portage/util/compression_probe.py | 191 +-
lib/portage/util/configparser.py | 106 +-
lib/portage/util/cpuinfo.py | 43 +-
lib/portage/util/digraph.py | 747 +-
lib/portage/util/elf/constants.py | 82 +-
lib/portage/util/elf/header.py | 116 +-
lib/portage/util/endian/decode.py | 70 +-
lib/portage/util/env_update.py | 798 +-
lib/portage/util/file_copy/__init__.py | 37 +-
lib/portage/util/formatter.py | 95 +-
lib/portage/util/futures/__init__.py | 4 +-
lib/portage/util/futures/_asyncio/__init__.py | 486 +-
lib/portage/util/futures/_asyncio/streams.py | 139 +-
lib/portage/util/futures/_sync_decorator.py | 75 +-
lib/portage/util/futures/compat_coroutine.py | 220 +-
lib/portage/util/futures/executor/fork.py | 228 +-
lib/portage/util/futures/extendedfutures.py | 115 +-
lib/portage/util/futures/futures.py | 16 +-
lib/portage/util/futures/iter_completed.py | 342 +-
lib/portage/util/futures/retry.py | 377 +-
lib/portage/util/futures/unix_events.py | 96 +-
lib/portage/util/hooks.py | 51 +-
lib/portage/util/install_mask.py | 340 +-
lib/portage/util/iterators/MultiIterGroupBy.py | 164 +-
lib/portage/util/lafilefixer.py | 331 +-
lib/portage/util/listdir.py | 251 +-
lib/portage/util/locale.py | 240 +-
lib/portage/util/movefile.py | 665 +-
lib/portage/util/mtimedb.py | 221 +-
lib/portage/util/netlink.py | 139 +-
lib/portage/util/path.py | 82 +-
lib/portage/util/shelve.py | 86 +-
lib/portage/util/socks5.py | 199 +-
lib/portage/util/whirlpool.py | 2736 ++-
lib/portage/util/writeable_check.py | 199 +-
lib/portage/versions.py | 1066 +-
lib/portage/xml/metadata.py | 842 +-
lib/portage/xpak.py | 943 +-
man/make.conf.5 | 2 +-
repoman/bin/repoman | 46 +-
repoman/lib/repoman/__init__.py | 153 +-
repoman/lib/repoman/_portage.py | 7 +-
repoman/lib/repoman/_subprocess.py | 89 +-
repoman/lib/repoman/actions.py | 1467 +-
repoman/lib/repoman/argparser.py | 621 +-
repoman/lib/repoman/check_missingslot.py | 43 +-
repoman/lib/repoman/config.py | 284 +-
repoman/lib/repoman/copyrights.py | 221 +-
repoman/lib/repoman/errors.py | 17 +-
repoman/lib/repoman/gpg.py | 106 +-
repoman/lib/repoman/main.py | 369 +-
repoman/lib/repoman/metadata.py | 130 +-
repoman/lib/repoman/modules/commit/manifest.py | 189 +-
repoman/lib/repoman/modules/commit/repochecks.py | 54 +-
.../modules/linechecks/assignment/__init__.py | 34 +-
.../modules/linechecks/assignment/assignment.py | 40 +-
repoman/lib/repoman/modules/linechecks/base.py | 177 +-
repoman/lib/repoman/modules/linechecks/config.py | 195 +-
.../lib/repoman/modules/linechecks/controller.py | 277 +-
.../repoman/modules/linechecks/depend/__init__.py | 22 +-
.../repoman/modules/linechecks/depend/implicit.py | 63 +-
.../modules/linechecks/deprecated/__init__.py | 70 +-
.../modules/linechecks/deprecated/deprecated.py | 39 +-
.../modules/linechecks/deprecated/inherit.py | 113 +-
.../lib/repoman/modules/linechecks/do/__init__.py | 22 +-
repoman/lib/repoman/modules/linechecks/do/dosym.py | 24 +-
.../repoman/modules/linechecks/eapi/__init__.py | 82 +-
.../lib/repoman/modules/linechecks/eapi/checks.py | 100 +-
.../repoman/modules/linechecks/eapi/definition.py | 55 +-
.../repoman/modules/linechecks/emake/__init__.py | 34 +-
.../lib/repoman/modules/linechecks/emake/emake.py | 30 +-
.../modules/linechecks/gentoo_header/__init__.py | 22 +-
.../modules/linechecks/gentoo_header/header.py | 95 +-
.../repoman/modules/linechecks/helpers/__init__.py | 22 +-
.../repoman/modules/linechecks/helpers/offset.py | 31 +-
.../repoman/modules/linechecks/nested/__init__.py | 22 +-
.../repoman/modules/linechecks/nested/nested.py | 13 +-
.../repoman/modules/linechecks/nested/nesteddie.py | 14 +-
.../repoman/modules/linechecks/patches/__init__.py | 22 +-
.../repoman/modules/linechecks/patches/patches.py | 29 +-
.../repoman/modules/linechecks/phases/__init__.py | 58 +-
.../lib/repoman/modules/linechecks/phases/phase.py | 305 +-
.../repoman/modules/linechecks/portage/__init__.py | 34 +-
.../repoman/modules/linechecks/portage/internal.py | 44 +-
.../repoman/modules/linechecks/quotes/__init__.py | 34 +-
.../repoman/modules/linechecks/quotes/quoteda.py | 15 +-
.../repoman/modules/linechecks/quotes/quotes.py | 147 +-
.../lib/repoman/modules/linechecks/uri/__init__.py | 22 +-
repoman/lib/repoman/modules/linechecks/uri/uri.py | 50 +-
.../lib/repoman/modules/linechecks/use/__init__.py | 22 +-
.../repoman/modules/linechecks/use/builtwith.py | 9 +-
.../repoman/modules/linechecks/useless/__init__.py | 34 +-
.../lib/repoman/modules/linechecks/useless/cd.py | 32 +-
.../repoman/modules/linechecks/useless/dodoc.py | 19 +-
.../modules/linechecks/whitespace/__init__.py | 34 +-
.../repoman/modules/linechecks/whitespace/blank.py | 31 +-
.../modules/linechecks/whitespace/whitespace.py | 23 +-
.../modules/linechecks/workaround/__init__.py | 22 +-
.../modules/linechecks/workaround/workarounds.py | 12 +-
.../lib/repoman/modules/scan/depend/__init__.py | 57 +-
.../repoman/modules/scan/depend/_depend_checks.py | 448 +-
.../lib/repoman/modules/scan/depend/_gen_arches.py | 112 +-
repoman/lib/repoman/modules/scan/depend/profile.py | 748 +-
.../repoman/modules/scan/directories/__init__.py | 83 +-
.../lib/repoman/modules/scan/directories/files.py | 155 +-
.../lib/repoman/modules/scan/directories/mtime.py | 46 +-
repoman/lib/repoman/modules/scan/eapi/__init__.py | 38 +-
repoman/lib/repoman/modules/scan/eapi/eapi.py | 87 +-
.../lib/repoman/modules/scan/ebuild/__init__.py | 106 +-
repoman/lib/repoman/modules/scan/ebuild/ebuild.py | 464 +-
.../lib/repoman/modules/scan/ebuild/multicheck.py | 100 +-
.../lib/repoman/modules/scan/eclasses/__init__.py | 78 +-
repoman/lib/repoman/modules/scan/eclasses/live.py | 119 +-
repoman/lib/repoman/modules/scan/eclasses/ruby.py | 86 +-
repoman/lib/repoman/modules/scan/fetch/__init__.py | 51 +-
repoman/lib/repoman/modules/scan/fetch/fetches.py | 369 +-
.../lib/repoman/modules/scan/keywords/__init__.py | 51 +-
.../lib/repoman/modules/scan/keywords/keywords.py | 331 +-
.../lib/repoman/modules/scan/manifest/__init__.py | 45 +-
.../lib/repoman/modules/scan/manifest/manifests.py | 92 +-
.../lib/repoman/modules/scan/metadata/__init__.py | 158 +-
.../repoman/modules/scan/metadata/description.py | 73 +-
.../modules/scan/metadata/ebuild_metadata.py | 128 +-
.../repoman/modules/scan/metadata/pkgmetadata.py | 374 +-
.../lib/repoman/modules/scan/metadata/restrict.py | 96 +-
.../lib/repoman/modules/scan/metadata/use_flags.py | 155 +-
repoman/lib/repoman/modules/scan/module.py | 173 +-
.../lib/repoman/modules/scan/options/__init__.py | 37 +-
.../lib/repoman/modules/scan/options/options.py | 48 +-
repoman/lib/repoman/modules/scan/scan.py | 99 +-
repoman/lib/repoman/modules/scan/scanbase.py | 106 +-
repoman/lib/repoman/modules/vcs/None/__init__.py | 46 +-
repoman/lib/repoman/modules/vcs/None/changes.py | 88 +-
repoman/lib/repoman/modules/vcs/None/status.py | 96 +-
repoman/lib/repoman/modules/vcs/__init__.py | 5 +-
repoman/lib/repoman/modules/vcs/bzr/__init__.py | 46 +-
repoman/lib/repoman/modules/vcs/bzr/changes.py | 115 +-
repoman/lib/repoman/modules/vcs/bzr/status.py | 104 +-
repoman/lib/repoman/modules/vcs/changes.py | 311 +-
repoman/lib/repoman/modules/vcs/cvs/__init__.py | 46 +-
repoman/lib/repoman/modules/vcs/cvs/changes.py | 218 +-
repoman/lib/repoman/modules/vcs/cvs/status.py | 239 +-
repoman/lib/repoman/modules/vcs/git/__init__.py | 46 +-
repoman/lib/repoman/modules/vcs/git/changes.py | 252 +-
repoman/lib/repoman/modules/vcs/git/status.py | 115 +-
repoman/lib/repoman/modules/vcs/hg/__init__.py | 46 +-
repoman/lib/repoman/modules/vcs/hg/changes.py | 193 +-
repoman/lib/repoman/modules/vcs/hg/status.py | 95 +-
repoman/lib/repoman/modules/vcs/settings.py | 176 +-
repoman/lib/repoman/modules/vcs/svn/__init__.py | 46 +-
repoman/lib/repoman/modules/vcs/svn/changes.py | 266 +-
repoman/lib/repoman/modules/vcs/svn/status.py | 268 +-
repoman/lib/repoman/modules/vcs/vcs.py | 259 +-
repoman/lib/repoman/profile.py | 133 +-
repoman/lib/repoman/qa_data.py | 374 +-
repoman/lib/repoman/qa_tracker.py | 81 +-
repoman/lib/repoman/repos.py | 624 +-
repoman/lib/repoman/scanner.py | 852 +-
repoman/lib/repoman/tests/__init__.py | 539 +-
.../lib/repoman/tests/changelog/test_echangelog.py | 251 +-
repoman/lib/repoman/tests/commit/test_commitmsg.py | 156 +-
repoman/lib/repoman/tests/runTests.py | 36 +-
repoman/lib/repoman/tests/simple/test_simple.py | 903 +-
repoman/lib/repoman/utilities.py | 1019 +-
repoman/runtests | 258 +-
repoman/setup.py | 768 +-
runtests | 252 +-
setup.py | 1423 +-
tabcheck.py | 2 +-
685 files changed, 141206 insertions(+), 124231 deletions(-)
diff --cc bin/phase-functions.sh
index 8039e71b1,9a4c97b16..4b8adb82c
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -319,9 -294,9 +319,9 @@@ __dyn_clean()
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
"$PORTAGE_BUILDDIR"/.exit_status
- rm -rf "${PORTAGE_BUILDDIR}/build-info"
+ rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
rm -rf "${WORKDIR}"
- rm -f "${PORTAGE_BUILDDIR}/files"
+ rm -rf "${PORTAGE_BUILDDIR}/files"
fi
if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
diff --cc lib/_emerge/EbuildExecuter.py
index cfc0427ba,450e53594..5a528f432
--- a/lib/_emerge/EbuildExecuter.py
+++ b/lib/_emerge/EbuildExecuter.py
@@@ -6,105 -6,92 +6,95 @@@ from _emerge.TaskSequence import TaskSe
from _emerge.CompositeTask import CompositeTask
import portage
from portage import os
- from portage.eapi import eapi_has_src_prepare_and_src_configure, \
- eapi_exports_replace_vars
+ from portage.eapi import (
+ eapi_has_src_prepare_and_src_configure,
+ eapi_exports_replace_vars,
+ )
- class EbuildExecuter(CompositeTask):
-
- __slots__ = ("pkg", "settings")
-
- _phases = ("prepare", "configure", "compile", "test", "install")
-
- def _start(self):
- pkg = self.pkg
- scheduler = self.scheduler
- settings = self.settings
- cleanup = 0
- portage.prepare_build_dirs(pkg.root, settings, cleanup)
-
- if eapi_exports_replace_vars(settings['EAPI']):
- vardb = pkg.root_config.trees['vartree'].dbapi
- settings["REPLACING_VERSIONS"] = " ".join(
- set(portage.versions.cpv_getversion(match) \
- for match in vardb.match(pkg.slot_atom) + \
- vardb.match('='+pkg.cpv)))
-
- setup_phase = EbuildPhase(background=self.background,
- phase="setup", scheduler=scheduler,
- settings=settings)
-
- setup_phase.addExitListener(self._setup_exit)
- self._task_queued(setup_phase)
- self.scheduler.scheduleSetup(setup_phase)
-
- def _setup_exit(self, setup_phase):
-
- if self._default_exit(setup_phase) != os.EX_OK:
- self.wait()
- return
-
- unpack_phase = EbuildPhase(background=self.background,
- phase="unpack", scheduler=self.scheduler,
- settings=self.settings)
-
- if "live" in self.settings.get("PROPERTIES", "").split():
- # Serialize $DISTDIR access for live ebuilds since
- # otherwise they can interfere with eachother.
-
- unpack_phase.addExitListener(self._unpack_exit)
- self._task_queued(unpack_phase)
- self.scheduler.scheduleUnpack(unpack_phase)
- else:
- self._start_task(unpack_phase, self._unpack_exit)
-
- def _unpack_exit(self, unpack_phase):
-
- if self._default_exit(unpack_phase) != os.EX_OK:
- self.wait()
- return
-
- ebuild_phases = TaskSequence(scheduler=self.scheduler)
-
- pkg = self.pkg
- phases = self._phases
- eapi = pkg.eapi
- if not eapi_has_src_prepare_and_src_configure(eapi):
- # skip src_prepare and src_configure
- phases = phases[2:]
+ class EbuildExecuter(CompositeTask):
- for phase in phases:
- ebuild_phases.add(EbuildPhase(background=self.background,
- phase=phase, scheduler=self.scheduler,
- settings=self.settings))
+ __slots__ = ("pkg", "settings")
+
+ _phases = ("prepare", "configure", "compile", "test", "install")
+
+ def _start(self):
+ pkg = self.pkg
+ scheduler = self.scheduler
+ settings = self.settings
+ cleanup = 0
+ portage.prepare_build_dirs(pkg.root, settings, cleanup)
+
+ if eapi_exports_replace_vars(settings["EAPI"]):
+ vardb = pkg.root_config.trees["vartree"].dbapi
+ settings["REPLACING_VERSIONS"] = " ".join(
+ set(
+ portage.versions.cpv_getversion(match)
+ for match in vardb.match(pkg.slot_atom) + vardb.match("=" + pkg.cpv)
+ )
+ )
+
+ setup_phase = EbuildPhase(
+ background=self.background,
+ phase="setup",
+ scheduler=scheduler,
+ settings=settings,
+ )
+
+ setup_phase.addExitListener(self._setup_exit)
+ self._task_queued(setup_phase)
+ self.scheduler.scheduleSetup(setup_phase)
+
+ def _setup_exit(self, setup_phase):
+
+ if self._default_exit(setup_phase) != os.EX_OK:
+ self.wait()
+ return
+
+ unpack_phase = EbuildPhase(
+ background=self.background,
+ phase="unpack",
+ scheduler=self.scheduler,
+ settings=self.settings,
+ )
+
+ if "live" in self.settings.get("PROPERTIES", "").split():
+ # Serialize $DISTDIR access for live ebuilds since
+ # otherwise they can interfere with eachother.
+
+ unpack_phase.addExitListener(self._unpack_exit)
+ self._task_queued(unpack_phase)
+ self.scheduler.scheduleUnpack(unpack_phase)
+
+ else:
+ self._start_task(unpack_phase, self._unpack_exit)
+
+ def _unpack_exit(self, unpack_phase):
+
+ if self._default_exit(unpack_phase) != os.EX_OK:
+ self.wait()
+ return
+
+ ebuild_phases = TaskSequence(scheduler=self.scheduler)
+
+ pkg = self.pkg
+ phases = self._phases
+ eapi = pkg.eapi
+ if not eapi_has_src_prepare_and_src_configure(eapi):
+ # skip src_prepare and src_configure
+ phases = phases[2:]
+
+ for phase in phases:
+ ebuild_phases.add(
+ EbuildPhase(
+ background=self.background,
+ phase=phase,
+ scheduler=self.scheduler,
+ settings=self.settings,
+ )
+ )
- self._start_task(ebuild_phases, self._default_final_exit)
+ if 'force-multilib' in self.settings.features:
+ self._start_task(ebuild_phases, self._install_exit)
+ else:
+ self._start_task(ebuild_phases, self._default_final_exit)
-
- def _install_exit(self, install_phase):
-
- if self._default_exit(install_phase) != os.EX_OK:
- self.wait()
- return
- if not os.path.exists(self.settings["D"]):
- pkg = self.pkg
- scheduler = self.scheduler
- settings = self.settings
- cleanup = 1
-
- # This initializes PORTAGE_LOG_FILE.
- portage.prepare_build_dirs(pkg.root, settings, cleanup)
-
- setup_phase = EbuildPhase(background=self.background,
- phase="setup", scheduler=scheduler,
- settings=settings)
-
- setup_phase.addExitListener(self._setup_exit)
- self._current_task = setup_phase
- self.scheduler.scheduleSetup(setup_phase)
- else:
- self.returncode = os.EX_OK
- self.wait()
- return
diff --cc lib/_emerge/Package.py
index 82fe22fec,90dfccdef..0ee9bfb8b
--- a/lib/_emerge/Package.py
+++ b/lib/_emerge/Package.py
@@@ -16,815 -22,884 +22,916 @@@ from portage.exception import InvalidDa
from portage.localization import _
from _emerge.Task import Task
+
class Package(Task):
- __hash__ = Task.__hash__
- __slots__ = ("built", "cpv", "depth",
- "installed", "onlydeps", "operation",
- "root_config", "type_name",
- "category", "counter", "cp", "cpv_split",
- "inherited", "iuse", "mtime",
- "pf", "root", "slot", "sub_slot", "slot_atom", "version") + \
- ("_invalid", "_masks", "_metadata", "_provided_cps",
- "_raw_metadata", "_provides", "_requires", "_use",
- "_validated_atoms", "_visible")
-
- metadata_keys = [
- "BDEPEND",
- "BUILD_ID", "BUILD_TIME", "CHOST", "COUNTER", "DEFINED_PHASES",
- "DEPEND", "EAPI", "IDEPEND", "INHERITED", "IUSE", "KEYWORDS",
- "LICENSE", "MD5", "PDEPEND", "PROVIDES",
- "RDEPEND", "repository", "REQUIRED_USE",
- "PROPERTIES", "REQUIRES", "RESTRICT", "SIZE",
- "SLOT", "USE", "_mtime_"]
-
- _dep_keys = ('BDEPEND', 'DEPEND', 'IDEPEND', 'PDEPEND', 'RDEPEND')
- _buildtime_keys = ('BDEPEND', 'DEPEND')
- _runtime_keys = ('IDEPEND', 'PDEPEND', 'RDEPEND')
- _use_conditional_misc_keys = ('LICENSE', 'PROPERTIES', 'RESTRICT')
- UNKNOWN_REPO = _unknown_repo
-
- def __init__(self, **kwargs):
- metadata = _PackageMetadataWrapperBase(kwargs.pop('metadata'))
- Task.__init__(self, **kwargs)
- # the SlotObject constructor assigns self.root_config from keyword args
- # and is an instance of a '_emerge.RootConfig.RootConfig class
- self.root = self.root_config.root
- self._raw_metadata = metadata
- self._metadata = _PackageMetadataWrapper(self, metadata)
- if not self.built:
- self._metadata['CHOST'] = self.root_config.settings.get('CHOST', '')
- eapi_attrs = _get_eapi_attrs(self.eapi)
-
- try:
- db = self.cpv._db
- except AttributeError:
- if self.built:
- # For independence from the source ebuild repository and
- # profile implicit IUSE state, require the _db attribute
- # for built packages.
- raise
- db = self.root_config.trees['porttree'].dbapi
-
- self.cpv = _pkg_str(self.cpv, metadata=self._metadata,
- settings=self.root_config.settings, db=db)
- if hasattr(self.cpv, 'slot_invalid'):
- self._invalid_metadata('SLOT.invalid',
- "SLOT: invalid value: '%s'" % self._metadata["SLOT"])
- self.cpv_split = self.cpv.cpv_split
- self.category, self.pf = portage.catsplit(self.cpv)
- self.cp = self.cpv.cp
- self.version = self.cpv.version
- self.slot = self.cpv.slot
- self.sub_slot = self.cpv.sub_slot
- self.slot_atom = Atom("%s%s%s" % (self.cp, _slot_separator, self.slot))
- # sync metadata with validated repo (may be UNKNOWN_REPO)
- self._metadata['repository'] = self.cpv.repo
-
- if self.root_config.settings.local_config:
- implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
- else:
- implicit_match = db._repoman_iuse_implicit_cnstr(self.cpv, self._metadata)
++
+ __hash__ = Task.__hash__
+ __slots__ = (
+ "built",
+ "cpv",
+ "depth",
+ "installed",
+ "onlydeps",
+ "operation",
+ "root_config",
+ "type_name",
+ "category",
+ "counter",
+ "cp",
+ "cpv_split",
+ "inherited",
+ "iuse",
+ "mtime",
+ "pf",
+ "root",
+ "slot",
+ "sub_slot",
+ "slot_atom",
+ "version",
+ ) + (
+ "_invalid",
+ "_masks",
+ "_metadata",
+ "_provided_cps",
+ "_raw_metadata",
+ "_provides",
+ "_requires",
+ "_use",
+ "_validated_atoms",
+ "_visible",
+ )
+
+ metadata_keys = [
+ "BDEPEND",
+ "BUILD_ID",
+ "BUILD_TIME",
+ "CHOST",
+ "COUNTER",
+ "DEFINED_PHASES",
+ "DEPEND",
+ "EAPI",
+ "IDEPEND",
+ "INHERITED",
+ "IUSE",
+ "KEYWORDS",
+ "LICENSE",
+ "MD5",
+ "PDEPEND",
+ "PROVIDES",
+ "RDEPEND",
+ "repository",
+ "REQUIRED_USE",
+ "PROPERTIES",
+ "REQUIRES",
+ "RESTRICT",
+ "SIZE",
+ "SLOT",
+ "USE",
+ "_mtime_",
+ ]
+
+ _dep_keys = ("BDEPEND", "DEPEND", "IDEPEND", "PDEPEND", "RDEPEND")
+ _buildtime_keys = ("BDEPEND", "DEPEND")
+ _runtime_keys = ("IDEPEND", "PDEPEND", "RDEPEND")
+ _use_conditional_misc_keys = ("LICENSE", "PROPERTIES", "RESTRICT")
+ UNKNOWN_REPO = _unknown_repo
+
+ def __init__(self, **kwargs):
+ metadata = _PackageMetadataWrapperBase(kwargs.pop("metadata"))
+ Task.__init__(self, **kwargs)
+ # the SlotObject constructor assigns self.root_config from keyword args
+ # and is an instance of a '_emerge.RootConfig.RootConfig class
+ self.root = self.root_config.root
+ self._raw_metadata = metadata
+ self._metadata = _PackageMetadataWrapper(self, metadata)
+ if not self.built:
+ self._metadata["CHOST"] = self.root_config.settings.get("CHOST", "")
+ eapi_attrs = _get_eapi_attrs(self.eapi)
+
+ try:
+ db = self.cpv._db
+ except AttributeError:
+ if self.built:
+ # For independence from the source ebuild repository and
+ # profile implicit IUSE state, require the _db attribute
+ # for built packages.
+ raise
+ db = self.root_config.trees["porttree"].dbapi
+
+ self.cpv = _pkg_str(
+ self.cpv, metadata=self._metadata, settings=self.root_config.settings, db=db
+ )
+ if hasattr(self.cpv, "slot_invalid"):
+ self._invalid_metadata(
+ "SLOT.invalid", "SLOT: invalid value: '%s'" % self._metadata["SLOT"]
+ )
+ self.cpv_split = self.cpv.cpv_split
+ self.category, self.pf = portage.catsplit(self.cpv)
+ self.cp = self.cpv.cp
+ self.version = self.cpv.version
+ self.slot = self.cpv.slot
+ self.sub_slot = self.cpv.sub_slot
+ self.slot_atom = Atom("%s%s%s" % (self.cp, _slot_separator, self.slot))
+ # sync metadata with validated repo (may be UNKNOWN_REPO)
+ self._metadata["repository"] = self.cpv.repo
+
+ if self.root_config.settings.local_config:
+ implicit_match = db._iuse_implicit_cnstr(self.cpv, self._metadata)
+ else:
+ implicit_match = db._repoman_iuse_implicit_cnstr(self.cpv, self._metadata)
+ if 'force-multilib' in self.root_config.settings.features:
+ iuse = self._metadata["IUSE"]
+ for multilib_abis in self.root_config.settings.get("MULTILIB_ABIS", '').split():
+ iuse += " multilib_abi_" + multilib_abis
+ iuse += " abiwrapper"
+ self._metadata["IUSE"] = iuse
- usealiases = self.root_config.settings._use_manager.getUseAliases(self)
- self.iuse = self._iuse(self, self._metadata["IUSE"].split(),
- implicit_match, usealiases, self.eapi)
-
- if (self.iuse.enabled or self.iuse.disabled) and \
- not eapi_attrs.iuse_defaults:
- if not self.installed:
- self._invalid_metadata('EAPI.incompatible',
- "IUSE contains defaults, but EAPI doesn't allow them")
- if self.inherited is None:
- self.inherited = frozenset()
-
- if self.operation is None:
- if self.onlydeps or self.installed:
- self.operation = "nomerge"
- else:
- self.operation = "merge"
-
- self._hash_key = Package._gen_hash_key(cpv=self.cpv,
- installed=self.installed, onlydeps=self.onlydeps,
- operation=self.operation, repo_name=self.cpv.repo,
- root_config=self.root_config,
- type_name=self.type_name)
- self._hash_value = hash(self._hash_key)
-
- @property
- def eapi(self):
- return self._metadata["EAPI"]
-
- @property
- def build_id(self):
- return self.cpv.build_id
-
- @property
- def build_time(self):
- if not self.built:
- raise AttributeError('build_time')
- return self.cpv.build_time
-
- @property
- def defined_phases(self):
- return self._metadata.defined_phases
-
- @property
- def properties(self):
- return self._metadata.properties
-
- @property
- def provided_cps(self):
- return (self.cp,)
-
- @property
- def restrict(self):
- return self._metadata.restrict
-
- @property
- def metadata(self):
- warnings.warn("_emerge.Package.Package.metadata is deprecated",
- DeprecationWarning, stacklevel=3)
- return self._metadata
-
- # These are calculated on-demand, so that they are calculated
- # after FakeVartree applies its metadata tweaks.
- @property
- def invalid(self):
- if self._invalid is None:
- self._validate_deps()
- if self._invalid is None:
- self._invalid = False
- return self._invalid
-
- @property
- def masks(self):
- if self._masks is None:
- self._masks = self._eval_masks()
- return self._masks
-
- @property
- def visible(self):
- if self._visible is None:
- self._visible = self._eval_visiblity(self.masks)
- return self._visible
-
- @property
- def validated_atoms(self):
- """
- Returns *all* validated atoms from the deps, regardless
- of USE conditionals, with USE conditionals inside
- atoms left unevaluated.
- """
- if self._validated_atoms is None:
- self._validate_deps()
- return self._validated_atoms
-
- @property
- def stable(self):
- return self.cpv.stable
-
- @property
- def provides(self):
- self.invalid
- return self._provides
-
- @property
- def requires(self):
- self.invalid
- return self._requires
-
- @classmethod
- def _gen_hash_key(cls, cpv=None, installed=None, onlydeps=None,
- operation=None, repo_name=None, root_config=None,
- type_name=None, **kwargs):
-
- if operation is None:
- if installed or onlydeps:
- operation = "nomerge"
- else:
- operation = "merge"
-
- root = None
- if root_config is not None:
- root = root_config.root
- else:
- raise TypeError("root_config argument is required")
-
- elements = [type_name, root, str(cpv), operation]
-
- # For installed (and binary) packages we don't care for the repo
- # when it comes to hashing, because there can only be one cpv.
- # So overwrite the repo_key with type_name.
- if type_name is None:
- raise TypeError("type_name argument is required")
- elif type_name == "ebuild":
- if repo_name is None:
- raise AssertionError(
- "Package._gen_hash_key() " + \
- "called without 'repo_name' argument")
- elements.append(repo_name)
- elif type_name == "binary":
- # Including a variety of fingerprints in the hash makes
- # it possible to simultaneously consider multiple similar
- # packages. Note that digests are not included here, since
- # they are relatively expensive to compute, and they may
- # not necessarily be available.
- elements.extend([cpv.build_id, cpv.file_size,
- cpv.build_time, cpv.mtime])
- else:
- # For installed (and binary) packages we don't care for the repo
- # when it comes to hashing, because there can only be one cpv.
- # So overwrite the repo_key with type_name.
- elements.append(type_name)
-
- return tuple(elements)
-
- def _validate_deps(self):
- """
- Validate deps. This does not trigger USE calculation since that
- is expensive for ebuilds and therefore we want to avoid doing
- it unnecessarily (like for masked packages).
- """
- eapi = self.eapi
- dep_eapi = eapi
- dep_valid_flag = self.iuse.is_valid_flag
- if self.installed:
- # Ignore EAPI.incompatible and conditionals missing
- # from IUSE for installed packages since these issues
- # aren't relevant now (re-evaluate when new EAPIs are
- # deployed).
- dep_eapi = None
- dep_valid_flag = None
-
- validated_atoms = []
- for k in self._dep_keys:
- v = self._metadata.get(k)
- if not v:
- continue
- try:
- atoms = use_reduce(v, eapi=dep_eapi,
- matchall=True, is_valid_flag=dep_valid_flag,
- token_class=Atom, flat=True)
- except InvalidDependString as e:
- self._metadata_exception(k, e)
- else:
- validated_atoms.extend(atoms)
- if not self.built:
- for atom in atoms:
- if not isinstance(atom, Atom):
- continue
- if atom.slot_operator_built:
- e = InvalidDependString(
- _("Improper context for slot-operator "
- "\"built\" atom syntax: %s") %
- (atom.unevaluated_atom,))
- self._metadata_exception(k, e)
-
- if self.root_config.settings.local_config and \
+ usealiases = self.root_config.settings._use_manager.getUseAliases(self)
+ self.iuse = self._iuse(
+ self, self._metadata["IUSE"].split(), implicit_match, usealiases, self.eapi
+ )
+
+ if (self.iuse.enabled or self.iuse.disabled) and not eapi_attrs.iuse_defaults:
+ if not self.installed:
+ self._invalid_metadata(
+ "EAPI.incompatible",
+ "IUSE contains defaults, but EAPI doesn't allow them",
+ )
+ if self.inherited is None:
+ self.inherited = frozenset()
+
+ if self.operation is None:
+ if self.onlydeps or self.installed:
+ self.operation = "nomerge"
+ else:
+ self.operation = "merge"
+
+ self._hash_key = Package._gen_hash_key(
+ cpv=self.cpv,
+ installed=self.installed,
+ onlydeps=self.onlydeps,
+ operation=self.operation,
+ repo_name=self.cpv.repo,
+ root_config=self.root_config,
+ type_name=self.type_name,
+ )
+ self._hash_value = hash(self._hash_key)
+
+ @property
+ def eapi(self):
+ return self._metadata["EAPI"]
+
+ @property
+ def build_id(self):
+ return self.cpv.build_id
+
+ @property
+ def build_time(self):
+ if not self.built:
+ raise AttributeError("build_time")
+ return self.cpv.build_time
+
+ @property
+ def defined_phases(self):
+ return self._metadata.defined_phases
+
+ @property
+ def properties(self):
+ return self._metadata.properties
+
+ @property
+ def provided_cps(self):
+ return (self.cp,)
+
+ @property
+ def restrict(self):
+ return self._metadata.restrict
+
+ @property
+ def metadata(self):
+ warnings.warn(
+ "_emerge.Package.Package.metadata is deprecated",
+ DeprecationWarning,
+ stacklevel=3,
+ )
+ return self._metadata
+
+ # These are calculated on-demand, so that they are calculated
+ # after FakeVartree applies its metadata tweaks.
+ @property
+ def invalid(self):
+ if self._invalid is None:
+ self._validate_deps()
+ if self._invalid is None:
+ self._invalid = False
+ return self._invalid
+
+ @property
+ def masks(self):
+ if self._masks is None:
+ self._masks = self._eval_masks()
+ return self._masks
+
+ @property
+ def visible(self):
+ if self._visible is None:
+ self._visible = self._eval_visiblity(self.masks)
+ return self._visible
+
+ @property
+ def validated_atoms(self):
+ """
+ Returns *all* validated atoms from the deps, regardless
+ of USE conditionals, with USE conditionals inside
+ atoms left unevaluated.
+ """
+ if self._validated_atoms is None:
+ self._validate_deps()
+ return self._validated_atoms
+
+ @property
+ def stable(self):
+ return self.cpv.stable
+
+ @property
+ def provides(self):
+ self.invalid
+ return self._provides
+
+ @property
+ def requires(self):
+ self.invalid
+ return self._requires
+
+ @classmethod
+ def _gen_hash_key(
+ cls,
+ cpv=None,
+ installed=None,
+ onlydeps=None,
+ operation=None,
+ repo_name=None,
+ root_config=None,
+ type_name=None,
+ **kwargs
+ ):
+
+ if operation is None:
+ if installed or onlydeps:
+ operation = "nomerge"
+ else:
+ operation = "merge"
+
+ root = None
+ if root_config is not None:
+ root = root_config.root
+ else:
+ raise TypeError("root_config argument is required")
+
+ elements = [type_name, root, str(cpv), operation]
+
+ # For installed (and binary) packages we don't care for the repo
+ # when it comes to hashing, because there can only be one cpv.
+ # So overwrite the repo_key with type_name.
+ if type_name is None:
+ raise TypeError("type_name argument is required")
+ elif type_name == "ebuild":
+ if repo_name is None:
+ raise AssertionError(
+ "Package._gen_hash_key() " + "called without 'repo_name' argument"
+ )
+ elements.append(repo_name)
+ elif type_name == "binary":
+ # Including a variety of fingerprints in the hash makes
+ # it possible to simultaneously consider multiple similar
+ # packages. Note that digests are not included here, since
+ # they are relatively expensive to compute, and they may
+ # not necessarily be available.
+ elements.extend([cpv.build_id, cpv.file_size, cpv.build_time, cpv.mtime])
+ else:
+ # For installed (and binary) packages we don't care for the repo
+ # when it comes to hashing, because there can only be one cpv.
+ # So overwrite the repo_key with type_name.
+ elements.append(type_name)
+
+ return tuple(elements)
+
+ def _validate_deps(self):
+ """
+ Validate deps. This does not trigger USE calculation since that
+ is expensive for ebuilds and therefore we want to avoid doing
+ it unnecessarily (like for masked packages).
+ """
+ eapi = self.eapi
+ dep_eapi = eapi
+ dep_valid_flag = self.iuse.is_valid_flag
+ if self.installed:
+ # Ignore EAPI.incompatible and conditionals missing
+ # from IUSE for installed packages since these issues
+ # aren't relevant now (re-evaluate when new EAPIs are
+ # deployed).
+ dep_eapi = None
+ dep_valid_flag = None
+
+ validated_atoms = []
+ for k in self._dep_keys:
+ v = self._metadata.get(k)
+ if not v:
+ continue
+ try:
+ atoms = use_reduce(
+ v,
+ eapi=dep_eapi,
+ matchall=True,
+ is_valid_flag=dep_valid_flag,
+ token_class=Atom,
+ flat=True,
+ )
+ except InvalidDependString as e:
+ self._metadata_exception(k, e)
+ else:
+ validated_atoms.extend(atoms)
+ if not self.built:
+ for atom in atoms:
+ if not isinstance(atom, Atom):
+ continue
+ if atom.slot_operator_built:
+ e = InvalidDependString(
+ _(
+ "Improper context for slot-operator "
+ '"built" atom syntax: %s'
+ )
+ % (atom.unevaluated_atom,)
+ )
+ self._metadata_exception(k, e)
+
- self._validated_atoms = tuple(
+ 'force-multilib' in self.root_config.settings.features:
+ mysettings = self.root_config.settings
+ no_auto_flag = frozenset(mysettings.get("NO_AUTO_FLAG", "").split())
+ for i, x in enumerate(validated_atoms):
+ if not isinstance(x, Atom):
+ continue
+ if x.cp in no_auto_flag:
+ continue
+ multilib_flags = []
+ for multilib_abis in mysettings.get("MULTILIB_ABIS", '').split():
+ multilib_flag = 'multilib_abi_' + multilib_abis
+ if x.unevaluated_atom.use is None or \
+ x.unevaluated_atom.use.conditional is None or \
+ multilib_flag not in x.unevaluated_atom.use.conditional.enabled:
+ multilib_flags.append(multilib_flag + '?')
+ if multilib_flags:
+ if x.unevaluated_atom.use is None:
+ use_tokens = []
+ else:
+ use_tokens = list(x.unevaluated_atom.use.tokens)
+ use_tokens.extend(multilib_flags)
+ validated_atoms[i] = Atom(
+ x.unevaluated_atom.without_use + \
+ "[%s]" % (",".join(use_tokens)))
+
- self._validated_atoms = tuple(set(atom for atom in
- validated_atoms if isinstance(atom, Atom)))
-
- for k in self._use_conditional_misc_keys:
- v = self._metadata.get(k)
- if not v:
- continue
- try:
- use_reduce(v, eapi=dep_eapi, matchall=True,
- is_valid_flag=dep_valid_flag)
- except InvalidDependString as e:
- self._metadata_exception(k, e)
-
- k = 'REQUIRED_USE'
- v = self._metadata.get(k)
- if v and not self.built:
- if not _get_eapi_attrs(eapi).required_use:
- self._invalid_metadata('EAPI.incompatible',
- "REQUIRED_USE set, but EAPI='%s' doesn't allow it" % eapi)
- else:
- try:
- check_required_use(v, (),
- self.iuse.is_valid_flag, eapi=eapi)
- except InvalidDependString as e:
- self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
-
- k = 'SRC_URI'
- v = self._metadata.get(k)
- if v:
- try:
- use_reduce(v, is_src_uri=True, eapi=eapi, matchall=True,
- is_valid_flag=self.iuse.is_valid_flag)
- except InvalidDependString as e:
- if not self.installed:
- self._metadata_exception(k, e)
-
- if self.built:
- k = 'PROVIDES'
- try:
- self._provides = frozenset(
- parse_soname_deps(self._metadata[k]))
- except InvalidData as e:
- self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
-
- k = 'REQUIRES'
- try:
- self._requires = frozenset(
- parse_soname_deps(self._metadata[k]))
- except InvalidData as e:
- self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
-
- def copy(self):
- return Package(built=self.built, cpv=self.cpv, depth=self.depth,
- installed=self.installed, metadata=self._raw_metadata,
- onlydeps=self.onlydeps, operation=self.operation,
- root_config=self.root_config, type_name=self.type_name)
-
- def _eval_masks(self):
- masks = {}
- settings = self.root_config.settings
-
- if self.invalid is not False:
- masks['invalid'] = self.invalid
-
- if not settings._accept_chost(self.cpv, self._metadata):
- masks['CHOST'] = self._metadata['CHOST']
-
- eapi = self.eapi
- if not portage.eapi_is_supported(eapi):
- masks['EAPI.unsupported'] = eapi
- if portage._eapi_is_deprecated(eapi):
- masks['EAPI.deprecated'] = eapi
-
- missing_keywords = settings._getMissingKeywords(
- self.cpv, self._metadata)
- if missing_keywords:
- masks['KEYWORDS'] = missing_keywords
-
- try:
- missing_properties = settings._getMissingProperties(
- self.cpv, self._metadata)
- if missing_properties:
- masks['PROPERTIES'] = missing_properties
- except InvalidDependString:
- # already recorded as 'invalid'
- pass
-
- try:
- missing_restricts = settings._getMissingRestrict(
- self.cpv, self._metadata)
- if missing_restricts:
- masks['RESTRICT'] = missing_restricts
- except InvalidDependString:
- # already recorded as 'invalid'
- pass
-
- mask_atom = settings._getMaskAtom(self.cpv, self._metadata)
- if mask_atom is not None:
- masks['package.mask'] = mask_atom
-
- try:
- missing_licenses = settings._getMissingLicenses(
- self.cpv, self._metadata)
- if missing_licenses:
- masks['LICENSE'] = missing_licenses
- except InvalidDependString:
- # already recorded as 'invalid'
- pass
-
- if not masks:
- masks = False
-
- return masks
-
- def _eval_visiblity(self, masks):
-
- if masks is not False:
-
- if 'EAPI.unsupported' in masks:
- return False
-
- if 'invalid' in masks:
- return False
-
- if not self.installed and ( \
- 'CHOST' in masks or \
- 'EAPI.deprecated' in masks or \
- 'KEYWORDS' in masks or \
- 'PROPERTIES' in masks or \
- 'RESTRICT' in masks):
- return False
-
- if 'package.mask' in masks or \
- 'LICENSE' in masks:
- return False
-
- return True
-
- def get_keyword_mask(self):
- """returns None, 'missing', or 'unstable'."""
-
- missing = self.root_config.settings._getRawMissingKeywords(
- self.cpv, self._metadata)
-
- if not missing:
- return None
-
- if '**' in missing:
- return 'missing'
-
- global_accept_keywords = frozenset(
- self.root_config.settings.get("ACCEPT_KEYWORDS", "").split())
-
- for keyword in missing:
- if keyword.lstrip("~") in global_accept_keywords:
- return 'unstable'
-
- return 'missing'
-
- def isHardMasked(self):
- """returns a bool if the cpv is in the list of
- expanded pmaskdict[cp] available ebuilds"""
- pmask = self.root_config.settings._getRawMaskAtom(
- self.cpv, self._metadata)
- return pmask is not None
-
- def _metadata_exception(self, k, e):
-
- if k.endswith('DEPEND'):
- qacat = 'dependency.syntax'
- else:
- qacat = k + ".syntax"
-
- if not self.installed:
- categorized_error = False
- if e.errors:
- for error in e.errors:
- if getattr(error, 'category', None) is None:
- continue
- categorized_error = True
- self._invalid_metadata(error.category,
- "%s: %s" % (k, error))
-
- if not categorized_error:
- self._invalid_metadata(qacat,"%s: %s" % (k, e))
- else:
- # For installed packages, show the path of the file
- # containing the invalid metadata, since the user may
- # want to fix the deps by hand.
- vardb = self.root_config.trees['vartree'].dbapi
- path = vardb.getpath(self.cpv, filename=k)
- self._invalid_metadata(qacat, "%s: %s in '%s'" % (k, e, path))
-
- def _invalid_metadata(self, msg_type, msg):
- if self._invalid is None:
- self._invalid = {}
- msgs = self._invalid.get(msg_type)
- if msgs is None:
- msgs = []
- self._invalid[msg_type] = msgs
- msgs.append(msg)
-
- def __str__(self):
- if self.operation == "merge":
- if self.type_name == "binary":
- cpv_color = "PKG_BINARY_MERGE"
- else:
- cpv_color = "PKG_MERGE"
- elif self.operation == "uninstall":
- cpv_color = "PKG_UNINSTALL"
- else:
- cpv_color = "PKG_NOMERGE"
-
- build_id_str = ""
- if isinstance(self.cpv.build_id, int) and self.cpv.build_id > 0:
- build_id_str = "-%s" % self.cpv.build_id
-
- s = "(%s, %s" \
- % (portage.output.colorize(cpv_color, self.cpv +
- build_id_str + _slot_separator + self.slot + "/" +
- self.sub_slot + _repo_separator + self.repo),
- self.type_name)
-
- if self.type_name == "installed":
- if self.root_config.settings['ROOT'] != "/":
- s += " in '%s'" % self.root_config.settings['ROOT']
- if self.operation == "uninstall":
- s += " scheduled for uninstall"
- else:
- if self.operation == "merge":
- s += " scheduled for merge"
- if self.root_config.settings['ROOT'] != "/":
- s += " to '%s'" % self.root_config.settings['ROOT']
- s += ")"
- return s
-
- class _use_class:
-
- __slots__ = ("enabled", "_expand", "_expand_hidden",
- "_force", "_pkg", "_mask")
-
- # Share identical frozenset instances when available.
- _frozensets = {}
-
- def __init__(self, pkg, enabled_flags):
- self._pkg = pkg
- self._expand = None
- self._expand_hidden = None
- self._force = None
- self._mask = None
- if eapi_has_use_aliases(pkg.eapi):
- for enabled_flag in enabled_flags:
- enabled_flags.extend(pkg.iuse.alias_mapping.get(enabled_flag, []))
- self.enabled = frozenset(enabled_flags)
- if pkg.built:
- # Use IUSE to validate USE settings for built packages,
- # in case the package manager that built this package
- # failed to do that for some reason (or in case of
- # data corruption).
- missing_iuse = pkg.iuse.get_missing_iuse(self.enabled)
- if missing_iuse:
- self.enabled = self.enabled.difference(missing_iuse)
-
- def _init_force_mask(self):
- pkgsettings = self._pkg._get_pkgsettings()
- frozensets = self._frozensets
- s = frozenset(
- pkgsettings.get("USE_EXPAND", "").lower().split())
- self._expand = frozensets.setdefault(s, s)
- s = frozenset(
- pkgsettings.get("USE_EXPAND_HIDDEN", "").lower().split())
- self._expand_hidden = frozensets.setdefault(s, s)
- s = pkgsettings.useforce
- self._force = frozensets.setdefault(s, s)
- s = pkgsettings.usemask
- self._mask = frozensets.setdefault(s, s)
-
- @property
- def expand(self):
- if self._expand is None:
- self._init_force_mask()
- return self._expand
-
- @property
- def expand_hidden(self):
- if self._expand_hidden is None:
- self._init_force_mask()
- return self._expand_hidden
-
- @property
- def force(self):
- if self._force is None:
- self._init_force_mask()
- return self._force
-
- @property
- def mask(self):
- if self._mask is None:
- self._init_force_mask()
- return self._mask
-
- @property
- def repo(self):
- return self._metadata['repository']
-
- @property
- def repo_priority(self):
- repo_info = self.root_config.settings.repositories.prepos.get(self.repo)
- if repo_info is None:
- return None
- return repo_info.priority
-
- @property
- def use(self):
- if self._use is None:
- self._init_use()
- return self._use
-
- def _get_pkgsettings(self):
- pkgsettings = self.root_config.trees[
- 'porttree'].dbapi.doebuild_settings
- pkgsettings.setcpv(self)
- return pkgsettings
-
- def _init_use(self):
- if self.built:
- # Use IUSE to validate USE settings for built packages,
- # in case the package manager that built this package
- # failed to do that for some reason (or in case of
- # data corruption). The enabled flags must be consistent
- # with implicit IUSE, in order to avoid potential
- # inconsistencies in USE dep matching (see bug #453400).
- use_str = self._metadata['USE']
- is_valid_flag = self.iuse.is_valid_flag
- enabled_flags = [x for x in use_str.split() if is_valid_flag(x)]
- use_str = " ".join(enabled_flags)
- self._use = self._use_class(
- self, enabled_flags)
- else:
- try:
- use_str = _PackageMetadataWrapperBase.__getitem__(
- self._metadata, 'USE')
- except KeyError:
- use_str = None
- calculated_use = False
- if not use_str:
- use_str = self._get_pkgsettings()["PORTAGE_USE"]
- calculated_use = True
- self._use = self._use_class(
- self, use_str.split())
- # Initialize these now, since USE access has just triggered
- # setcpv, and we want to cache the result of the force/mask
- # calculations that were done.
- if calculated_use:
- self._use._init_force_mask()
-
- _PackageMetadataWrapperBase.__setitem__(
- self._metadata, 'USE', use_str)
-
- return use_str
-
- class _iuse:
-
- __slots__ = ("__weakref__", "_iuse_implicit_match", "_pkg", "alias_mapping",
- "all", "all_aliases", "enabled", "disabled", "tokens")
-
- def __init__(self, pkg, tokens, iuse_implicit_match, aliases, eapi):
- self._pkg = pkg
- self.tokens = tuple(tokens)
- self._iuse_implicit_match = iuse_implicit_match
- enabled = []
- disabled = []
- other = []
- enabled_aliases = []
- disabled_aliases = []
- other_aliases = []
- aliases_supported = eapi_has_use_aliases(eapi)
- self.alias_mapping = {}
- for x in tokens:
- prefix = x[:1]
- if prefix == "+":
- enabled.append(x[1:])
- if aliases_supported:
- self.alias_mapping[x[1:]] = aliases.get(x[1:], [])
- enabled_aliases.extend(self.alias_mapping[x[1:]])
- elif prefix == "-":
- disabled.append(x[1:])
- if aliases_supported:
- self.alias_mapping[x[1:]] = aliases.get(x[1:], [])
- disabled_aliases.extend(self.alias_mapping[x[1:]])
- else:
- other.append(x)
- if aliases_supported:
- self.alias_mapping[x] = aliases.get(x, [])
- other_aliases.extend(self.alias_mapping[x])
- self.enabled = frozenset(chain(enabled, enabled_aliases))
- self.disabled = frozenset(chain(disabled, disabled_aliases))
- self.all = frozenset(chain(enabled, disabled, other))
- self.all_aliases = frozenset(chain(enabled_aliases, disabled_aliases, other_aliases))
-
- def is_valid_flag(self, flags):
- """
- @return: True if all flags are valid USE values which may
- be specified in USE dependencies, False otherwise.
- """
- if isinstance(flags, str):
- flags = [flags]
-
- for flag in flags:
- if not flag in self.all and not flag in self.all_aliases and \
- not self._iuse_implicit_match(flag):
- return False
- return True
-
- def get_missing_iuse(self, flags):
- """
- @return: A list of flags missing from IUSE.
- """
- if isinstance(flags, str):
- flags = [flags]
- missing_iuse = []
- for flag in flags:
- if not flag in self.all and not flag in self.all_aliases and \
- not self._iuse_implicit_match(flag):
- missing_iuse.append(flag)
- return missing_iuse
-
- def get_real_flag(self, flag):
- """
- Returns the flag's name within the scope of this package
- (accounting for aliases), or None if the flag is unknown.
- """
- if flag in self.all:
- return flag
-
- if flag in self.all_aliases:
- for k, v in self.alias_mapping.items():
- if flag in v:
- return k
-
- if self._iuse_implicit_match(flag):
- return flag
-
- return None
-
- def __len__(self):
- return 4
-
- def __iter__(self):
- """
- This is used to generate mtimedb resume mergelist entries, so we
- limit it to 4 items for backward compatibility.
- """
- return iter(self._hash_key[:4])
-
- def __lt__(self, other):
- if other.cp != self.cp:
- return self.cp < other.cp
- result = portage.vercmp(self.version, other.version)
- if result < 0:
- return True
- if result == 0 and self.built and other.built:
- return self.build_time < other.build_time
- return False
-
- def __le__(self, other):
- if other.cp != self.cp:
- return self.cp <= other.cp
- result = portage.vercmp(self.version, other.version)
- if result <= 0:
- return True
- if result == 0 and self.built and other.built:
- return self.build_time <= other.build_time
- return False
-
- def __gt__(self, other):
- if other.cp != self.cp:
- return self.cp > other.cp
- result = portage.vercmp(self.version, other.version)
- if result > 0:
- return True
- if result == 0 and self.built and other.built:
- return self.build_time > other.build_time
- return False
-
- def __ge__(self, other):
- if other.cp != self.cp:
- return self.cp >= other.cp
- result = portage.vercmp(self.version, other.version)
- if result >= 0:
- return True
- if result == 0 and self.built and other.built:
- return self.build_time >= other.build_time
- return False
-
- def with_use(self, use):
- """
- Return an Package instance with the specified USE flags. The
- current instance may be returned if it has identical USE flags.
- @param use: a set of USE flags
- @type use: frozenset
- @return: A package with the specified USE flags
- @rtype: Package
- """
- if use is not self.use.enabled:
- pkg = self.copy()
- pkg._metadata["USE"] = " ".join(use)
- else:
- pkg = self
- return pkg
-
- _all_metadata_keys = set(x for x in portage.auxdbkeys \
- if not x.startswith("UNUSED_"))
++self._validated_atoms = tuple(
+ set(atom for atom in validated_atoms if isinstance(atom, Atom))
+ )
+
+ for k in self._use_conditional_misc_keys:
+ v = self._metadata.get(k)
+ if not v:
+ continue
+ try:
+ use_reduce(
+ v, eapi=dep_eapi, matchall=True, is_valid_flag=dep_valid_flag
+ )
+ except InvalidDependString as e:
+ self._metadata_exception(k, e)
+
+ k = "REQUIRED_USE"
+ v = self._metadata.get(k)
+ if v and not self.built:
+ if not _get_eapi_attrs(eapi).required_use:
+ self._invalid_metadata(
+ "EAPI.incompatible",
+ "REQUIRED_USE set, but EAPI='%s' doesn't allow it" % eapi,
+ )
+ else:
+ try:
+ check_required_use(v, (), self.iuse.is_valid_flag, eapi=eapi)
+ except InvalidDependString as e:
+ self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
+
+ k = "SRC_URI"
+ v = self._metadata.get(k)
+ if v:
+ try:
+ use_reduce(
+ v,
+ is_src_uri=True,
+ eapi=eapi,
+ matchall=True,
+ is_valid_flag=self.iuse.is_valid_flag,
+ )
+ except InvalidDependString as e:
+ if not self.installed:
+ self._metadata_exception(k, e)
+
+ if self.built:
+ k = "PROVIDES"
+ try:
+ self._provides = frozenset(parse_soname_deps(self._metadata[k]))
+ except InvalidData as e:
+ self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
+
+ k = "REQUIRES"
+ try:
+ self._requires = frozenset(parse_soname_deps(self._metadata[k]))
+ except InvalidData as e:
+ self._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
+
+ def copy(self):
+ return Package(
+ built=self.built,
+ cpv=self.cpv,
+ depth=self.depth,
+ installed=self.installed,
+ metadata=self._raw_metadata,
+ onlydeps=self.onlydeps,
+ operation=self.operation,
+ root_config=self.root_config,
+ type_name=self.type_name,
+ )
+
+ def _eval_masks(self):
+ masks = {}
+ settings = self.root_config.settings
+
+ if self.invalid is not False:
+ masks["invalid"] = self.invalid
+
+ if not settings._accept_chost(self.cpv, self._metadata):
+ masks["CHOST"] = self._metadata["CHOST"]
+
+ eapi = self.eapi
+ if not portage.eapi_is_supported(eapi):
+ masks["EAPI.unsupported"] = eapi
+ if portage._eapi_is_deprecated(eapi):
+ masks["EAPI.deprecated"] = eapi
+
+ missing_keywords = settings._getMissingKeywords(self.cpv, self._metadata)
+ if missing_keywords:
+ masks["KEYWORDS"] = missing_keywords
+
+ try:
+ missing_properties = settings._getMissingProperties(
+ self.cpv, self._metadata
+ )
+ if missing_properties:
+ masks["PROPERTIES"] = missing_properties
+ except InvalidDependString:
+ # already recorded as 'invalid'
+ pass
+
+ try:
+ missing_restricts = settings._getMissingRestrict(self.cpv, self._metadata)
+ if missing_restricts:
+ masks["RESTRICT"] = missing_restricts
+ except InvalidDependString:
+ # already recorded as 'invalid'
+ pass
+
+ mask_atom = settings._getMaskAtom(self.cpv, self._metadata)
+ if mask_atom is not None:
+ masks["package.mask"] = mask_atom
+
+ try:
+ missing_licenses = settings._getMissingLicenses(self.cpv, self._metadata)
+ if missing_licenses:
+ masks["LICENSE"] = missing_licenses
+ except InvalidDependString:
+ # already recorded as 'invalid'
+ pass
+
+ if not masks:
+ masks = False
+
+ return masks
+
+ def _eval_visiblity(self, masks):
+
+ if masks is not False:
+
+ if "EAPI.unsupported" in masks:
+ return False
+
+ if "invalid" in masks:
+ return False
+
+ if not self.installed and (
+ "CHOST" in masks
+ or "EAPI.deprecated" in masks
+ or "KEYWORDS" in masks
+ or "PROPERTIES" in masks
+ or "RESTRICT" in masks
+ ):
+ return False
+
+ if "package.mask" in masks or "LICENSE" in masks:
+ return False
+
+ return True
+
+ def get_keyword_mask(self):
+ """returns None, 'missing', or 'unstable'."""
+
+ missing = self.root_config.settings._getRawMissingKeywords(
+ self.cpv, self._metadata
+ )
+
+ if not missing:
+ return None
+
+ if "**" in missing:
+ return "missing"
+
+ global_accept_keywords = frozenset(
+ self.root_config.settings.get("ACCEPT_KEYWORDS", "").split()
+ )
+
+ for keyword in missing:
+ if keyword.lstrip("~") in global_accept_keywords:
+ return "unstable"
+
+ return "missing"
+
+ def isHardMasked(self):
+ """returns a bool if the cpv is in the list of
+ expanded pmaskdict[cp] available ebuilds"""
+ pmask = self.root_config.settings._getRawMaskAtom(self.cpv, self._metadata)
+ return pmask is not None
+
+ def _metadata_exception(self, k, e):
+
+ if k.endswith("DEPEND"):
+ qacat = "dependency.syntax"
+ else:
+ qacat = k + ".syntax"
+
+ if not self.installed:
+ categorized_error = False
+ if e.errors:
+ for error in e.errors:
+ if getattr(error, "category", None) is None:
+ continue
+ categorized_error = True
+ self._invalid_metadata(error.category, "%s: %s" % (k, error))
+
+ if not categorized_error:
+ self._invalid_metadata(qacat, "%s: %s" % (k, e))
+ else:
+ # For installed packages, show the path of the file
+ # containing the invalid metadata, since the user may
+ # want to fix the deps by hand.
+ vardb = self.root_config.trees["vartree"].dbapi
+ path = vardb.getpath(self.cpv, filename=k)
+ self._invalid_metadata(qacat, "%s: %s in '%s'" % (k, e, path))
+
+ def _invalid_metadata(self, msg_type, msg):
+ if self._invalid is None:
+ self._invalid = {}
+ msgs = self._invalid.get(msg_type)
+ if msgs is None:
+ msgs = []
+ self._invalid[msg_type] = msgs
+ msgs.append(msg)
+
+ def __str__(self):
+ if self.operation == "merge":
+ if self.type_name == "binary":
+ cpv_color = "PKG_BINARY_MERGE"
+ else:
+ cpv_color = "PKG_MERGE"
+ elif self.operation == "uninstall":
+ cpv_color = "PKG_UNINSTALL"
+ else:
+ cpv_color = "PKG_NOMERGE"
+
+ build_id_str = ""
+ if isinstance(self.cpv.build_id, int) and self.cpv.build_id > 0:
+ build_id_str = "-%s" % self.cpv.build_id
+
+ s = "(%s, %s" % (
+ portage.output.colorize(
+ cpv_color,
+ self.cpv
+ + build_id_str
+ + _slot_separator
+ + self.slot
+ + "/"
+ + self.sub_slot
+ + _repo_separator
+ + self.repo,
+ ),
+ self.type_name,
+ )
+
+ if self.type_name == "installed":
+ if self.root_config.settings["ROOT"] != "/":
+ s += " in '%s'" % self.root_config.settings["ROOT"]
+ if self.operation == "uninstall":
+ s += " scheduled for uninstall"
+ else:
+ if self.operation == "merge":
+ s += " scheduled for merge"
+ if self.root_config.settings["ROOT"] != "/":
+ s += " to '%s'" % self.root_config.settings["ROOT"]
+ s += ")"
+ return s
+
+ class _use_class:
+
+ __slots__ = ("enabled", "_expand", "_expand_hidden", "_force", "_pkg", "_mask")
+
+ # Share identical frozenset instances when available.
+ _frozensets = {}
+
+ def __init__(self, pkg, enabled_flags):
+ self._pkg = pkg
+ self._expand = None
+ self._expand_hidden = None
+ self._force = None
+ self._mask = None
+ if eapi_has_use_aliases(pkg.eapi):
+ for enabled_flag in enabled_flags:
+ enabled_flags.extend(pkg.iuse.alias_mapping.get(enabled_flag, []))
+ self.enabled = frozenset(enabled_flags)
+ if pkg.built:
+ # Use IUSE to validate USE settings for built packages,
+ # in case the package manager that built this package
+ # failed to do that for some reason (or in case of
+ # data corruption).
+ missing_iuse = pkg.iuse.get_missing_iuse(self.enabled)
+ if missing_iuse:
+ self.enabled = self.enabled.difference(missing_iuse)
+
+ def _init_force_mask(self):
+ pkgsettings = self._pkg._get_pkgsettings()
+ frozensets = self._frozensets
+ s = frozenset(pkgsettings.get("USE_EXPAND", "").lower().split())
+ self._expand = frozensets.setdefault(s, s)
+ s = frozenset(pkgsettings.get("USE_EXPAND_HIDDEN", "").lower().split())
+ self._expand_hidden = frozensets.setdefault(s, s)
+ s = pkgsettings.useforce
+ self._force = frozensets.setdefault(s, s)
+ s = pkgsettings.usemask
+ self._mask = frozensets.setdefault(s, s)
+
+ @property
+ def expand(self):
+ if self._expand is None:
+ self._init_force_mask()
+ return self._expand
+
+ @property
+ def expand_hidden(self):
+ if self._expand_hidden is None:
+ self._init_force_mask()
+ return self._expand_hidden
+
+ @property
+ def force(self):
+ if self._force is None:
+ self._init_force_mask()
+ return self._force
+
+ @property
+ def mask(self):
+ if self._mask is None:
+ self._init_force_mask()
+ return self._mask
+
+ @property
+ def repo(self):
+ return self._metadata["repository"]
+
+ @property
+ def repo_priority(self):
+ repo_info = self.root_config.settings.repositories.prepos.get(self.repo)
+ if repo_info is None:
+ return None
+ return repo_info.priority
+
+ @property
+ def use(self):
+ if self._use is None:
+ self._init_use()
+ return self._use
+
+ def _get_pkgsettings(self):
+ pkgsettings = self.root_config.trees["porttree"].dbapi.doebuild_settings
+ pkgsettings.setcpv(self)
+ return pkgsettings
+
+ def _init_use(self):
+ if self.built:
+ # Use IUSE to validate USE settings for built packages,
+ # in case the package manager that built this package
+ # failed to do that for some reason (or in case of
+ # data corruption). The enabled flags must be consistent
+ # with implicit IUSE, in order to avoid potential
+ # inconsistencies in USE dep matching (see bug #453400).
+ use_str = self._metadata["USE"]
+ is_valid_flag = self.iuse.is_valid_flag
+ enabled_flags = [x for x in use_str.split() if is_valid_flag(x)]
+ use_str = " ".join(enabled_flags)
+ self._use = self._use_class(self, enabled_flags)
+ else:
+ try:
+ use_str = _PackageMetadataWrapperBase.__getitem__(self._metadata, "USE")
+ except KeyError:
+ use_str = None
+ calculated_use = False
+ if not use_str:
+ use_str = self._get_pkgsettings()["PORTAGE_USE"]
+ calculated_use = True
+ self._use = self._use_class(self, use_str.split())
+ # Initialize these now, since USE access has just triggered
+ # setcpv, and we want to cache the result of the force/mask
+ # calculations that were done.
+ if calculated_use:
+ self._use._init_force_mask()
+
+ _PackageMetadataWrapperBase.__setitem__(self._metadata, "USE", use_str)
+
+ return use_str
+
+ class _iuse:
+
+ __slots__ = (
+ "__weakref__",
+ "_iuse_implicit_match",
+ "_pkg",
+ "alias_mapping",
+ "all",
+ "all_aliases",
+ "enabled",
+ "disabled",
+ "tokens",
+ )
+
+ def __init__(self, pkg, tokens, iuse_implicit_match, aliases, eapi):
+ self._pkg = pkg
+ self.tokens = tuple(tokens)
+ self._iuse_implicit_match = iuse_implicit_match
+ enabled = []
+ disabled = []
+ other = []
+ enabled_aliases = []
+ disabled_aliases = []
+ other_aliases = []
+ aliases_supported = eapi_has_use_aliases(eapi)
+ self.alias_mapping = {}
+ for x in tokens:
+ prefix = x[:1]
+ if prefix == "+":
+ enabled.append(x[1:])
+ if aliases_supported:
+ self.alias_mapping[x[1:]] = aliases.get(x[1:], [])
+ enabled_aliases.extend(self.alias_mapping[x[1:]])
+ elif prefix == "-":
+ disabled.append(x[1:])
+ if aliases_supported:
+ self.alias_mapping[x[1:]] = aliases.get(x[1:], [])
+ disabled_aliases.extend(self.alias_mapping[x[1:]])
+ else:
+ other.append(x)
+ if aliases_supported:
+ self.alias_mapping[x] = aliases.get(x, [])
+ other_aliases.extend(self.alias_mapping[x])
+ self.enabled = frozenset(chain(enabled, enabled_aliases))
+ self.disabled = frozenset(chain(disabled, disabled_aliases))
+ self.all = frozenset(chain(enabled, disabled, other))
+ self.all_aliases = frozenset(
+ chain(enabled_aliases, disabled_aliases, other_aliases)
+ )
+
+ def is_valid_flag(self, flags):
+ """
+ @return: True if all flags are valid USE values which may
+ be specified in USE dependencies, False otherwise.
+ """
+ if isinstance(flags, str):
+ flags = [flags]
+
+ for flag in flags:
+ if (
+ not flag in self.all
+ and not flag in self.all_aliases
+ and not self._iuse_implicit_match(flag)
+ ):
+ return False
+ return True
+
+ def get_missing_iuse(self, flags):
+ """
+ @return: A list of flags missing from IUSE.
+ """
+ if isinstance(flags, str):
+ flags = [flags]
+ missing_iuse = []
+ for flag in flags:
+ if (
+ not flag in self.all
+ and not flag in self.all_aliases
+ and not self._iuse_implicit_match(flag)
+ ):
+ missing_iuse.append(flag)
+ return missing_iuse
+
+ def get_real_flag(self, flag):
+ """
+ Returns the flag's name within the scope of this package
+ (accounting for aliases), or None if the flag is unknown.
+ """
+ if flag in self.all:
+ return flag
+
+ if flag in self.all_aliases:
+ for k, v in self.alias_mapping.items():
+ if flag in v:
+ return k
+
+ if self._iuse_implicit_match(flag):
+ return flag
+
+ return None
+
+ def __len__(self):
+ return 4
+
+ def __iter__(self):
+ """
+ This is used to generate mtimedb resume mergelist entries, so we
+ limit it to 4 items for backward compatibility.
+ """
+ return iter(self._hash_key[:4])
+
+ def __lt__(self, other):
+ if other.cp != self.cp:
+ return self.cp < other.cp
+ result = portage.vercmp(self.version, other.version)
+ if result < 0:
+ return True
+ if result == 0 and self.built and other.built:
+ return self.build_time < other.build_time
+ return False
+
+ def __le__(self, other):
+ if other.cp != self.cp:
+ return self.cp <= other.cp
+ result = portage.vercmp(self.version, other.version)
+ if result <= 0:
+ return True
+ if result == 0 and self.built and other.built:
+ return self.build_time <= other.build_time
+ return False
+
+ def __gt__(self, other):
+ if other.cp != self.cp:
+ return self.cp > other.cp
+ result = portage.vercmp(self.version, other.version)
+ if result > 0:
+ return True
+ if result == 0 and self.built and other.built:
+ return self.build_time > other.build_time
+ return False
+
+ def __ge__(self, other):
+ if other.cp != self.cp:
+ return self.cp >= other.cp
+ result = portage.vercmp(self.version, other.version)
+ if result >= 0:
+ return True
+ if result == 0 and self.built and other.built:
+ return self.build_time >= other.build_time
+ return False
+
+ def with_use(self, use):
+ """
+ Return an Package instance with the specified USE flags. The
+ current instance may be returned if it has identical USE flags.
+ @param use: a set of USE flags
+ @type use: frozenset
+ @return: A package with the specified USE flags
+ @rtype: Package
+ """
+ if use is not self.use.enabled:
+ pkg = self.copy()
+ pkg._metadata["USE"] = " ".join(use)
+ else:
+ pkg = self
+ return pkg
+
+
+ _all_metadata_keys = set(x for x in portage.auxdbkeys)
_all_metadata_keys.update(Package.metadata_keys)
_all_metadata_keys = frozenset(_all_metadata_keys)
diff --cc lib/_emerge/actions.py
index 425336441,05a115250..35c9e4b7f
--- a/lib/_emerge/actions.py
+++ b/lib/_emerge/actions.py
@@@ -2393,87 -2747,97 +2747,97 @@@ def adjust_config(myopts, settings)
def display_missing_pkg_set(root_config, set_name):
- msg = []
- msg.append(("emerge: There are no sets to satisfy '%s'. " + \
- "The following sets exist:") % \
- colorize("INFORM", set_name))
- msg.append("")
+ msg = []
+ msg.append(
+ ("emerge: There are no sets to satisfy '%s'. " + "The following sets exist:")
+ % colorize("INFORM", set_name)
+ )
+ msg.append("")
+
+ for s in sorted(root_config.sets):
+ msg.append(" %s" % s)
+ msg.append("")
- for s in sorted(root_config.sets):
- msg.append(" %s" % s)
- msg.append("")
+ writemsg_level("".join("%s\n" % l for l in msg), level=logging.ERROR, noiselevel=-1)
- writemsg_level("".join("%s\n" % l for l in msg),
- level=logging.ERROR, noiselevel=-1)
def relative_profile_path(portdir, abs_profile):
- realpath = os.path.realpath(abs_profile)
- basepath = os.path.realpath(os.path.join(portdir, "profiles"))
- if realpath.startswith(basepath):
- profilever = realpath[1 + len(basepath):]
- else:
- profilever = None
- return profilever
+ realpath = os.path.realpath(abs_profile)
+ basepath = os.path.realpath(os.path.join(portdir, "profiles"))
+ if realpath.startswith(basepath):
+ profilever = realpath[1 + len(basepath) :]
+ else:
+ profilever = None
+ return profilever
+
def getportageversion(portdir, _unused, profile, chost, vardb):
- pythonver = 'python %d.%d.%d-%s-%d' % sys.version_info[:]
- profilever = None
- repositories = vardb.settings.repositories
- if profile:
- profilever = relative_profile_path(portdir, profile)
- if profilever is None:
- try:
- for parent in portage.grabfile(
- os.path.join(profile, 'parent')):
- profilever = relative_profile_path(portdir,
- os.path.join(profile, parent))
- if profilever is not None:
- break
- colon = parent.find(":")
- if colon != -1:
- p_repo_name = parent[:colon]
- try:
- p_repo_loc = \
- repositories.get_location_for_name(p_repo_name)
- except KeyError:
- pass
- else:
- profilever = relative_profile_path(p_repo_loc,
- os.path.join(p_repo_loc, 'profiles',
- parent[colon+1:]))
- if profilever is not None:
- break
- except portage.exception.PortageException:
- pass
-
- if profilever is None:
- try:
- profilever = "!" + os.readlink(profile)
- except OSError:
- pass
-
- if profilever is None:
- profilever = "unavailable"
-
- libcver = []
- libclist = set()
- for atom in expand_new_virt(vardb, portage.const.LIBC_PACKAGE_ATOM):
- if not atom.blocker:
- libclist.update(vardb.match(atom))
- if libclist:
- for cpv in sorted(libclist):
- libc_split = portage.catpkgsplit(cpv)[1:]
- if libc_split[-1] == "r0":
- libc_split = libc_split[:-1]
- libcver.append("-".join(libc_split))
- else:
- libcver = ["unavailable"]
-
- gccver = getgccversion(chost)
- unameout=platform.release()+" "+platform.machine()
-
- return "Portage %s (%s, %s, %s, %s, %s)" % \
- (portage.VERSION + "-multilib", pythonver, profilever, gccver, ",".join(libcver), unameout)
+ pythonver = "python %d.%d.%d-%s-%d" % sys.version_info[:]
+ profilever = None
+ repositories = vardb.settings.repositories
+ if profile:
+ profilever = relative_profile_path(portdir, profile)
+ if profilever is None:
+ try:
+ for parent in portage.grabfile(os.path.join(profile, "parent")):
+ profilever = relative_profile_path(
+ portdir, os.path.join(profile, parent)
+ )
+ if profilever is not None:
+ break
+ colon = parent.find(":")
+ if colon != -1:
+ p_repo_name = parent[:colon]
+ try:
+ p_repo_loc = repositories.get_location_for_name(p_repo_name)
+ except KeyError:
+ pass
+ else:
+ profilever = relative_profile_path(
+ p_repo_loc,
+ os.path.join(
+ p_repo_loc, "profiles", parent[colon + 1 :]
+ ),
+ )
+ if profilever is not None:
+ break
+ except portage.exception.PortageException:
+ pass
+
+ if profilever is None:
+ try:
+ profilever = "!" + os.readlink(profile)
+ except OSError:
+ pass
+
+ if profilever is None:
+ profilever = "unavailable"
+
+ libcver = []
+ libclist = set()
+ for atom in expand_new_virt(vardb, portage.const.LIBC_PACKAGE_ATOM):
+ if not atom.blocker:
+ libclist.update(vardb.match(atom))
+ if libclist:
+ for cpv in sorted(libclist):
+ libc_split = portage.catpkgsplit(cpv)[1:]
+ if libc_split[-1] == "r0":
+ libc_split = libc_split[:-1]
+ libcver.append("-".join(libc_split))
+ else:
+ libcver = ["unavailable"]
+
+ gccver = getgccversion(chost)
+ unameout = platform.release() + " " + platform.machine()
+
+ return "Portage %s (%s, %s, %s, %s, %s)" % (
- portage.VERSION,
++ portage.VERSION + "-multilib",
+ pythonver,
+ profilever,
+ gccver,
+ ",".join(libcver),
+ unameout,
+ )
class _emerge_config(SlotObject):
@@@ -2897,508 -3338,628 +3338,635 @@@ def repo_name_duplicate_check(trees)
def run_action(emerge_config):
- # skip global updates prior to sync, since it's called after sync
- if emerge_config.action not in ('help', 'info', 'sync', 'version') and \
- emerge_config.opts.get('--package-moves') != 'n' and \
- _global_updates(emerge_config.trees,
- emerge_config.target_config.mtimedb["updates"],
- quiet=("--quiet" in emerge_config.opts)):
- emerge_config.target_config.mtimedb.commit()
- # Reload the whole config from scratch.
- load_emerge_config(emerge_config=emerge_config)
-
- xterm_titles = "notitles" not in \
- emerge_config.target_config.settings.features
- if xterm_titles:
- xtermTitle("emerge")
-
- if "--digest" in emerge_config.opts:
- os.environ["FEATURES"] = os.environ.get("FEATURES","") + " digest"
- # Reload the whole config from scratch so that the portdbapi internal
- # config is updated with new FEATURES.
- load_emerge_config(emerge_config=emerge_config)
-
- # NOTE: adjust_configs() can map options to FEATURES, so any relevant
- # options adjustments should be made prior to calling adjust_configs().
- if "--buildpkgonly" in emerge_config.opts:
- emerge_config.opts["--buildpkg"] = True
-
- if "getbinpkg" in emerge_config.target_config.settings.features:
- emerge_config.opts["--getbinpkg"] = True
-
- if "--getbinpkgonly" in emerge_config.opts:
- emerge_config.opts["--getbinpkg"] = True
-
- if "--getbinpkgonly" in emerge_config.opts:
- emerge_config.opts["--usepkgonly"] = True
-
- if "--getbinpkg" in emerge_config.opts:
- emerge_config.opts["--usepkg"] = True
-
- if "--usepkgonly" in emerge_config.opts:
- emerge_config.opts["--usepkg"] = True
-
- # Populate the bintree with current --getbinpkg setting.
- # This needs to happen before:
- # * expand_set_arguments, in case any sets use the bintree
- # * adjust_configs and profile_check, in order to propagate settings
- # implicit IUSE and USE_EXPAND settings from the binhost(s)
- if (emerge_config.action in ('search', None) and
- '--usepkg' in emerge_config.opts):
- for mytrees in emerge_config.trees.values():
- kwargs = {}
- if (mytrees is emerge_config.target_config.trees and
- emerge_config.target_config is not emerge_config.running_config and
- emerge_config.opts.get('--quickpkg-direct', 'n') == 'y'):
- kwargs['add_repos'] = (emerge_config.running_config.trees['vartree'].dbapi,)
-
- try:
- mytrees['bintree'].populate(
- getbinpkgs='--getbinpkg' in emerge_config.opts,
- **kwargs)
- except ParseError as e:
- writemsg('\n\n!!!%s.\nSee make.conf(5) for more info.\n'
- % (e,), noiselevel=-1)
- return 1
-
- adjust_configs(emerge_config.opts, emerge_config.trees)
-
- if profile_check(emerge_config.trees, emerge_config.action) != os.EX_OK:
- return 1
-
- apply_priorities(emerge_config.target_config.settings)
+ # skip global updates prior to sync, since it's called after sync
+ if (
+ emerge_config.action not in ("help", "info", "sync", "version")
+ and emerge_config.opts.get("--package-moves") != "n"
+ and _global_updates(
+ emerge_config.trees,
+ emerge_config.target_config.mtimedb["updates"],
+ quiet=("--quiet" in emerge_config.opts),
+ )
+ ):
+ emerge_config.target_config.mtimedb.commit()
+ # Reload the whole config from scratch.
+ load_emerge_config(emerge_config=emerge_config)
+
+ xterm_titles = "notitles" not in emerge_config.target_config.settings.features
+ if xterm_titles:
+ xtermTitle("emerge")
+
+ if "--digest" in emerge_config.opts:
+ os.environ["FEATURES"] = os.environ.get("FEATURES", "") + " digest"
+ # Reload the whole config from scratch so that the portdbapi internal
+ # config is updated with new FEATURES.
+ load_emerge_config(emerge_config=emerge_config)
+
+ # NOTE: adjust_configs() can map options to FEATURES, so any relevant
+ # options adjustments should be made prior to calling adjust_configs().
+ if "--buildpkgonly" in emerge_config.opts:
+ emerge_config.opts["--buildpkg"] = True
+
+ if "getbinpkg" in emerge_config.target_config.settings.features:
+ emerge_config.opts["--getbinpkg"] = True
+
+ if "--getbinpkgonly" in emerge_config.opts:
+ emerge_config.opts["--getbinpkg"] = True
+
+ if "--getbinpkgonly" in emerge_config.opts:
+ emerge_config.opts["--usepkgonly"] = True
+
+ if "--getbinpkg" in emerge_config.opts:
+ emerge_config.opts["--usepkg"] = True
+
+ if "--usepkgonly" in emerge_config.opts:
+ emerge_config.opts["--usepkg"] = True
+
+ # Populate the bintree with current --getbinpkg setting.
+ # This needs to happen before:
+ # * expand_set_arguments, in case any sets use the bintree
+ # * adjust_configs and profile_check, in order to propagate settings
+ # implicit IUSE and USE_EXPAND settings from the binhost(s)
+ if emerge_config.action in ("search", None) and "--usepkg" in emerge_config.opts:
+ for mytrees in emerge_config.trees.values():
+ kwargs = {}
+ if (
+ mytrees is emerge_config.target_config.trees
+ and emerge_config.target_config is not emerge_config.running_config
+ and emerge_config.opts.get("--quickpkg-direct", "n") == "y"
+ ):
+ kwargs["add_repos"] = (
+ emerge_config.running_config.trees["vartree"].dbapi,
+ )
+
+ try:
+ mytrees["bintree"].populate(
+ getbinpkgs="--getbinpkg" in emerge_config.opts, **kwargs
+ )
+ except ParseError as e:
+ writemsg(
+ "\n\n!!!%s.\nSee make.conf(5) for more info.\n" % (e,),
+ noiselevel=-1,
+ )
+ return 1
+
+ adjust_configs(emerge_config.opts, emerge_config.trees)
+
+ if profile_check(emerge_config.trees, emerge_config.action) != os.EX_OK:
+ return 1
+
+ apply_priorities(emerge_config.target_config.settings)
+ if 'force-multilib' in emerge_config.target_config.settings.features:
+ if emerge_config.target_config.settings.get("NO_AUTO_FLAG", "") == "":
+ writemsg_level(bad("!!! Failed to find vars from extra profile") + "\n",level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! Please make sure that you did follow the instructions and included the extra profile\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! http://git.overlays.gentoo.org/gitweb/?p=proj/multilib-portage.git;a=blob;f=doc/portage-multilib-instructions\n"),level=logging.ERROR, noiselevel=-1)
+ writemsg_level(bad("!!! has some basic instructions for the setup\n"),level=logging.ERROR, noiselevel=-1)
+ return 1
- if ("--autounmask-continue" in emerge_config.opts and
- emerge_config.opts.get("--autounmask") == "n"):
- writemsg_level(
- " %s --autounmask-continue has been disabled by --autounmask=n\n" %
- warn("*"), level=logging.WARNING, noiselevel=-1)
-
- for fmt in emerge_config.target_config.settings.get("PORTAGE_BINPKG_FORMAT", "").split():
- if not fmt in portage.const.SUPPORTED_BINPKG_FORMATS:
- if "--pkg-format" in emerge_config.opts:
- problematic="--pkg-format"
- else:
- problematic="PORTAGE_BINPKG_FORMAT"
-
- writemsg_level(("emerge: %s is not set correctly. Format " + \
- "'%s' is not supported.\n") % (problematic, fmt),
- level=logging.ERROR, noiselevel=-1)
- return 1
-
- if emerge_config.action == 'version':
- writemsg_stdout(getportageversion(
- emerge_config.target_config.settings["PORTDIR"],
- None,
- emerge_config.target_config.settings.profile_path,
- emerge_config.target_config.settings.get("CHOST"),
- emerge_config.target_config.trees['vartree'].dbapi) + '\n',
- noiselevel=-1)
- return 0
- if emerge_config.action == 'help':
- emerge_help()
- return 0
-
- spinner = stdout_spinner()
- if "candy" in emerge_config.target_config.settings.features:
- spinner.update = spinner.update_scroll
-
- if "--quiet" not in emerge_config.opts:
- portage.deprecated_profile_check(
- settings=emerge_config.target_config.settings)
- repo_name_check(emerge_config.trees)
- repo_name_duplicate_check(emerge_config.trees)
- config_protect_check(emerge_config.trees)
- check_procfs()
-
- for mytrees in emerge_config.trees.values():
- mydb = mytrees["porttree"].dbapi
- # Freeze the portdbapi for performance (memoize all xmatch results).
- mydb.freeze()
-
- del mytrees, mydb
-
- for x in emerge_config.args:
- if x.endswith((".ebuild", ".tbz2")) and \
- os.path.exists(os.path.abspath(x)):
- print(colorize("BAD", "\n*** emerging by path is broken "
- "and may not always work!!!\n"))
- break
-
- if emerge_config.action == "list-sets":
- writemsg_stdout("".join("%s\n" % s for s in
- sorted(emerge_config.target_config.sets)))
- return os.EX_OK
- if emerge_config.action == "check-news":
- news_counts = count_unread_news(
- emerge_config.target_config.trees["porttree"].dbapi,
- emerge_config.target_config.trees["vartree"].dbapi)
- if any(news_counts.values()):
- display_news_notifications(news_counts)
- elif "--quiet" not in emerge_config.opts:
- print("", colorize("GOOD", "*"), "No news items were found.")
- return os.EX_OK
-
- ensure_required_sets(emerge_config.trees)
-
- if emerge_config.action is None and \
- "--resume" in emerge_config.opts and emerge_config.args:
- writemsg("emerge: unexpected argument(s) for --resume: %s\n" %
- " ".join(emerge_config.args), noiselevel=-1)
- return 1
-
- # only expand sets for actions taking package arguments
- oldargs = emerge_config.args[:]
- if emerge_config.action in ("clean", "config", "depclean",
- "info", "prune", "unmerge", "rage-clean", None):
- newargs, retval = expand_set_arguments(
- emerge_config.args, emerge_config.action,
- emerge_config.target_config)
- if retval != os.EX_OK:
- return retval
-
- # Need to handle empty sets specially, otherwise emerge will react
- # with the help message for empty argument lists
- if oldargs and not newargs:
- print("emerge: no targets left after set expansion")
- return 0
-
- emerge_config.args = newargs
-
- if "--tree" in emerge_config.opts and \
- "--columns" in emerge_config.opts:
- print("emerge: can't specify both of \"--tree\" and \"--columns\".")
- return 1
-
- if '--emptytree' in emerge_config.opts and \
- '--noreplace' in emerge_config.opts:
- writemsg_level("emerge: can't specify both of " + \
- "\"--emptytree\" and \"--noreplace\".\n",
- level=logging.ERROR, noiselevel=-1)
- return 1
-
- if "--quiet" in emerge_config.opts:
- spinner.update = spinner.update_quiet
- portage.util.noiselimit = -1
-
- if "--fetch-all-uri" in emerge_config.opts:
- emerge_config.opts["--fetchonly"] = True
-
- if "--skipfirst" in emerge_config.opts and \
- "--resume" not in emerge_config.opts:
- emerge_config.opts["--resume"] = True
-
- # Allow -p to remove --ask
- if "--pretend" in emerge_config.opts:
- emerge_config.opts.pop("--ask", None)
-
- # forbid --ask when not in a terminal
- # note: this breaks `emerge --ask | tee logfile`, but that doesn't work anyway.
- if ("--ask" in emerge_config.opts) and (not sys.stdin.isatty()):
- portage.writemsg("!!! \"--ask\" should only be used in a terminal. Exiting.\n",
- noiselevel=-1)
- return 1
-
- if emerge_config.target_config.settings.get("PORTAGE_DEBUG", "") == "1":
- spinner.update = spinner.update_quiet
- portage.util.noiselimit = 0
- if "python-trace" in emerge_config.target_config.settings.features:
- portage.debug.set_trace(True)
-
- if not "--quiet" in emerge_config.opts:
- if '--nospinner' in emerge_config.opts or \
- emerge_config.target_config.settings.get('TERM') == 'dumb' or \
- not sys.stdout.isatty():
- spinner.update = spinner.update_basic
-
- if "--debug" in emerge_config.opts:
- print("myaction", emerge_config.action)
- print("myopts", emerge_config.opts)
-
- if not emerge_config.action and not emerge_config.args and \
- "--resume" not in emerge_config.opts:
- emerge_help()
- return 1
-
- pretend = "--pretend" in emerge_config.opts
- fetchonly = "--fetchonly" in emerge_config.opts or \
- "--fetch-all-uri" in emerge_config.opts
- buildpkgonly = "--buildpkgonly" in emerge_config.opts
-
- # check if root user is the current user for the actions where emerge needs this
- if portage.data.secpass < 2:
- # We've already allowed "--version" and "--help" above.
- if "--pretend" not in emerge_config.opts and \
- emerge_config.action not in ("search", "info"):
- need_superuser = emerge_config.action in ('clean', 'depclean',
- 'deselect', 'prune', 'unmerge', "rage-clean") or not \
- (fetchonly or \
- (buildpkgonly and portage.data.secpass >= 1) or \
- emerge_config.action in ("metadata", "regen", "sync"))
- if portage.data.secpass < 1 or \
- need_superuser:
- if need_superuser:
- access_desc = "superuser"
- else:
- access_desc = "portage group"
- # Always show portage_group_warning() when only portage group
- # access is required but the user is not in the portage group.
- if "--ask" in emerge_config.opts:
- writemsg_stdout("This action requires %s access...\n" % \
- (access_desc,), noiselevel=-1)
- if portage.data.secpass < 1 and not need_superuser:
- portage.data.portage_group_warning()
- uq = UserQuery(emerge_config.opts)
- if uq.query("Would you like to add --pretend to options?",
- "--ask-enter-invalid" in emerge_config.opts) == "No":
- return 128 + signal.SIGINT
- emerge_config.opts["--pretend"] = True
- emerge_config.opts.pop("--ask")
- else:
- sys.stderr.write(("emerge: %s access is required\n") \
- % access_desc)
- if portage.data.secpass < 1 and not need_superuser:
- portage.data.portage_group_warning()
- return 1
-
- # Disable emergelog for everything except build or unmerge operations.
- # This helps minimize parallel emerge.log entries that can confuse log
- # parsers like genlop.
- disable_emergelog = False
-
- emerge_log_dir = emerge_config.target_config.settings.get("EMERGE_LOG_DIR")
- default_log_dir = os.path.join(
- os.sep, portage.const.EPREFIX.lstrip(os.sep), "var", "log"
- )
- for x in ("--pretend", "--fetchonly", "--fetch-all-uri"):
- if x in emerge_config.opts:
- if x == "--fetchonly" and "--quiet" in emerge_config.opts:
- # Log will be used to store fetch progress
- log_dir = emerge_log_dir if emerge_log_dir else default_log_dir
- disable_emergelog = not all(
- os.access(logfile, os.W_OK)
- for logfile in set(
- first_existing(os.path.join(log_dir, logfile))
- for logfile in ("emerge.log", "emerge-fetch.log")
- )
- )
- break
- else:
- disable_emergelog = True
- break
- if disable_emergelog:
- pass
- elif emerge_config.action in ("search", "info"):
- disable_emergelog = True
- elif portage.data.secpass < 1:
- disable_emergelog = True
-
- import _emerge.emergelog
- _emerge.emergelog._disable = disable_emergelog
-
- if not disable_emergelog:
- if emerge_log_dir:
- try:
- # At least the parent needs to exist for the lock file.
- portage.util.ensure_dirs(emerge_log_dir)
- except portage.exception.PortageException as e:
- writemsg_level("!!! Error creating directory for " + \
- "EMERGE_LOG_DIR='%s':\n!!! %s\n" % \
- (emerge_log_dir, e),
- noiselevel=-1, level=logging.ERROR)
- portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir)
- else:
- _emerge.emergelog._emerge_log_dir = emerge_log_dir
- else:
- _emerge.emergelog._emerge_log_dir = default_log_dir
- portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir)
-
- if not "--pretend" in emerge_config.opts:
- time_fmt = "%b %d, %Y %H:%M:%S"
- time_str = time.strftime(time_fmt, time.localtime(time.time()))
- # Avoid potential UnicodeDecodeError in Python 2, since strftime
- # returns bytes in Python 2, and %b may contain non-ascii chars.
- time_str = _unicode_decode(time_str,
- encoding=_encodings['content'], errors='replace')
- emergelog(xterm_titles, "Started emerge on: %s" % time_str)
- myelogstr=""
- if emerge_config.opts:
- opt_list = []
- for opt, arg in emerge_config.opts.items():
- if arg is True:
- opt_list.append(opt)
- elif isinstance(arg, list):
- # arguments like --exclude that use 'append' action
- for x in arg:
- opt_list.append("%s=%s" % (opt, x))
- else:
- opt_list.append("%s=%s" % (opt, arg))
- myelogstr=" ".join(opt_list)
- if emerge_config.action:
- myelogstr += " --" + emerge_config.action
- if oldargs:
- myelogstr += " " + " ".join(oldargs)
- emergelog(xterm_titles, " *** emerge " + myelogstr)
-
- oldargs = None
-
- def emergeexitsig(signum, frame):
- signal.signal(signal.SIGTERM, signal.SIG_IGN)
- portage.util.writemsg(
- "\n\nExiting on signal %(signal)s\n" % {"signal":signum})
- sys.exit(128 + signum)
-
- signal.signal(signal.SIGTERM, emergeexitsig)
-
- def emergeexit():
- """This gets out final log message in before we quit."""
- if "--pretend" not in emerge_config.opts:
- emergelog(xterm_titles, " *** terminating.")
- if xterm_titles:
- xtermTitleReset()
- portage.atexit_register(emergeexit)
-
- if emerge_config.action in ("config", "metadata", "regen", "sync"):
- if "--pretend" in emerge_config.opts:
- sys.stderr.write(("emerge: The '%s' action does " + \
- "not support '--pretend'.\n") % emerge_config.action)
- return 1
-
- if "sync" == emerge_config.action:
- return action_sync(emerge_config)
- if "metadata" == emerge_config.action:
- action_metadata(emerge_config.target_config.settings,
- emerge_config.target_config.trees['porttree'].dbapi,
- emerge_config.opts)
- elif emerge_config.action=="regen":
- validate_ebuild_environment(emerge_config.trees)
- return action_regen(emerge_config.target_config.settings,
- emerge_config.target_config.trees['porttree'].dbapi,
- emerge_config.opts.get("--jobs"),
- emerge_config.opts.get("--load-average"))
- # HELP action
- elif "config" == emerge_config.action:
- validate_ebuild_environment(emerge_config.trees)
- return action_config(emerge_config.target_config.settings,
- emerge_config.trees, emerge_config.opts, emerge_config.args)
-
- # SEARCH action
- elif "search" == emerge_config.action:
- validate_ebuild_environment(emerge_config.trees)
- action_search(emerge_config.target_config,
- emerge_config.opts, emerge_config.args, spinner)
-
- elif emerge_config.action in \
- ('clean', 'depclean', 'deselect', 'prune', 'unmerge', 'rage-clean'):
- validate_ebuild_environment(emerge_config.trees)
- rval = action_uninstall(emerge_config.target_config.settings,
- emerge_config.trees, emerge_config.target_config.mtimedb["ldpath"],
- emerge_config.opts, emerge_config.action,
- emerge_config.args, spinner)
- if not (emerge_config.action == 'deselect' or
- buildpkgonly or fetchonly or pretend):
- post_emerge(emerge_config.action, emerge_config.opts,
- emerge_config.args, emerge_config.target_config.root,
- emerge_config.trees, emerge_config.target_config.mtimedb, rval)
- return rval
-
- elif emerge_config.action == 'info':
-
- # Ensure atoms are valid before calling unmerge().
- vardb = emerge_config.target_config.trees['vartree'].dbapi
- portdb = emerge_config.target_config.trees['porttree'].dbapi
- bindb = emerge_config.target_config.trees['bintree'].dbapi
- valid_atoms = []
- for x in emerge_config.args:
- if is_valid_package_atom(x, allow_repo=True):
- try:
- #look at the installed files first, if there is no match
- #look at the ebuilds, since EAPI 4 allows running pkg_info
- #on non-installed packages
- valid_atom = dep_expand(x, mydb=vardb)
- if valid_atom.cp.split("/")[0] == "null":
- valid_atom = dep_expand(x, mydb=portdb)
-
- if valid_atom.cp.split("/")[0] == "null" and \
- "--usepkg" in emerge_config.opts:
- valid_atom = dep_expand(x, mydb=bindb)
-
- valid_atoms.append(valid_atom)
-
- except portage.exception.AmbiguousPackageName as e:
- msg = "The short ebuild name \"" + x + \
- "\" is ambiguous. Please specify " + \
- "one of the following " + \
- "fully-qualified ebuild names instead:"
- for line in textwrap.wrap(msg, 70):
- writemsg_level("!!! %s\n" % (line,),
- level=logging.ERROR, noiselevel=-1)
- for i in e.args[0]:
- writemsg_level(" %s\n" % colorize("INFORM", i),
- level=logging.ERROR, noiselevel=-1)
- writemsg_level("\n", level=logging.ERROR, noiselevel=-1)
- return 1
- continue
- msg = []
- msg.append("'%s' is not a valid package atom." % (x,))
- msg.append("Please check ebuild(5) for full details.")
- writemsg_level("".join("!!! %s\n" % line for line in msg),
- level=logging.ERROR, noiselevel=-1)
- return 1
-
- return action_info(emerge_config.target_config.settings,
- emerge_config.trees, emerge_config.opts, valid_atoms)
-
- # "update", "system", or just process files:
- else:
- validate_ebuild_environment(emerge_config.trees)
-
- for x in emerge_config.args:
- if x.startswith(SETPREFIX) or \
- is_valid_package_atom(x, allow_repo=True):
- continue
- if x[:1] == os.sep:
- continue
- try:
- os.lstat(x)
- continue
- except OSError:
- pass
- msg = []
- msg.append("'%s' is not a valid package atom." % (x,))
- msg.append("Please check ebuild(5) for full details.")
- writemsg_level("".join("!!! %s\n" % line for line in msg),
- level=logging.ERROR, noiselevel=-1)
- return 1
-
- # GLEP 42 says to display news *after* an emerge --pretend
- if "--pretend" not in emerge_config.opts:
- uq = UserQuery(emerge_config.opts)
- if display_news_notification(emerge_config.target_config,
- emerge_config.opts) \
- and "--ask" in emerge_config.opts \
- and "--read-news" in emerge_config.opts \
- and uq.query("Would you like to read the news items while " \
- "calculating dependencies?",
- '--ask-enter-invalid' in emerge_config.opts) == "Yes":
- try:
- subprocess.call(['eselect', 'news', 'read'])
- # If eselect is not installed, Python <3.3 will throw an
- # OSError. >=3.3 will throw a FileNotFoundError, which is a
- # subclass of OSError.
- except OSError:
- writemsg("Please install eselect to use this feature.\n",
- noiselevel=-1)
- retval = action_build(emerge_config, spinner=spinner)
- post_emerge(emerge_config.action, emerge_config.opts,
- emerge_config.args, emerge_config.target_config.root,
- emerge_config.trees, emerge_config.target_config.mtimedb, retval)
-
- return retval
+ if (
+ "--autounmask-continue" in emerge_config.opts
+ and emerge_config.opts.get("--autounmask") == "n"
+ ):
+ writemsg_level(
+ " %s --autounmask-continue has been disabled by --autounmask=n\n"
+ % warn("*"),
+ level=logging.WARNING,
+ noiselevel=-1,
+ )
+
+ for fmt in emerge_config.target_config.settings.get(
+ "PORTAGE_BINPKG_FORMAT", ""
+ ).split():
+ if not fmt in portage.const.SUPPORTED_BINPKG_FORMATS:
+ if "--pkg-format" in emerge_config.opts:
+ problematic = "--pkg-format"
+ else:
+ problematic = "PORTAGE_BINPKG_FORMAT"
+
+ writemsg_level(
+ (
+ "emerge: %s is not set correctly. Format "
+ + "'%s' is not supported.\n"
+ )
+ % (problematic, fmt),
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+ return 1
+
+ if emerge_config.action == "version":
+ writemsg_stdout(
+ getportageversion(
+ emerge_config.target_config.settings["PORTDIR"],
+ None,
+ emerge_config.target_config.settings.profile_path,
+ emerge_config.target_config.settings.get("CHOST"),
+ emerge_config.target_config.trees["vartree"].dbapi,
+ )
+ + "\n",
+ noiselevel=-1,
+ )
+ return 0
+ if emerge_config.action == "help":
+ emerge_help()
+ return 0
+
+ spinner = stdout_spinner()
+ if "candy" in emerge_config.target_config.settings.features:
+ spinner.update = spinner.update_scroll
+
+ if "--quiet" not in emerge_config.opts:
+ portage.deprecated_profile_check(settings=emerge_config.target_config.settings)
+ repo_name_check(emerge_config.trees)
+ repo_name_duplicate_check(emerge_config.trees)
+ config_protect_check(emerge_config.trees)
+ check_procfs()
+
+ for mytrees in emerge_config.trees.values():
+ mydb = mytrees["porttree"].dbapi
+ # Freeze the portdbapi for performance (memoize all xmatch results).
+ mydb.freeze()
+
+ del mytrees, mydb
+
+ for x in emerge_config.args:
+ if x.endswith((".ebuild", ".tbz2")) and os.path.exists(os.path.abspath(x)):
+ print(
+ colorize(
+ "BAD",
+ "\n*** emerging by path is broken " "and may not always work!!!\n",
+ )
+ )
+ break
+
+ if emerge_config.action == "list-sets":
+ writemsg_stdout(
+ "".join("%s\n" % s for s in sorted(emerge_config.target_config.sets))
+ )
+ return os.EX_OK
+ if emerge_config.action == "check-news":
+ news_counts = count_unread_news(
+ emerge_config.target_config.trees["porttree"].dbapi,
+ emerge_config.target_config.trees["vartree"].dbapi,
+ )
+ if any(news_counts.values()):
+ display_news_notifications(news_counts)
+ elif "--quiet" not in emerge_config.opts:
+ print("", colorize("GOOD", "*"), "No news items were found.")
+ return os.EX_OK
+
+ ensure_required_sets(emerge_config.trees)
+
+ if (
+ emerge_config.action is None
+ and "--resume" in emerge_config.opts
+ and emerge_config.args
+ ):
+ writemsg(
+ "emerge: unexpected argument(s) for --resume: %s\n"
+ % " ".join(emerge_config.args),
+ noiselevel=-1,
+ )
+ return 1
+
+ # only expand sets for actions taking package arguments
+ oldargs = emerge_config.args[:]
+ if emerge_config.action in (
+ "clean",
+ "config",
+ "depclean",
+ "info",
+ "prune",
+ "unmerge",
+ "rage-clean",
+ None,
+ ):
+ newargs, retval = expand_set_arguments(
+ emerge_config.args, emerge_config.action, emerge_config.target_config
+ )
+ if retval != os.EX_OK:
+ return retval
+
+ # Need to handle empty sets specially, otherwise emerge will react
+ # with the help message for empty argument lists
+ if oldargs and not newargs:
+ print("emerge: no targets left after set expansion")
+ return 0
+
+ emerge_config.args = newargs
+
+ if "--tree" in emerge_config.opts and "--columns" in emerge_config.opts:
+ print('emerge: can\'t specify both of "--tree" and "--columns".')
+ return 1
+
+ if "--emptytree" in emerge_config.opts and "--noreplace" in emerge_config.opts:
+ writemsg_level(
+ "emerge: can't specify both of " + '"--emptytree" and "--noreplace".\n',
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+ return 1
+
+ if "--quiet" in emerge_config.opts:
+ spinner.update = spinner.update_quiet
+ portage.util.noiselimit = -1
+
+ if "--fetch-all-uri" in emerge_config.opts:
+ emerge_config.opts["--fetchonly"] = True
+
+ if "--skipfirst" in emerge_config.opts and "--resume" not in emerge_config.opts:
+ emerge_config.opts["--resume"] = True
+
+ # Allow -p to remove --ask
+ if "--pretend" in emerge_config.opts:
+ emerge_config.opts.pop("--ask", None)
+
+ # forbid --ask when not in a terminal
+ # note: this breaks `emerge --ask | tee logfile`, but that doesn't work anyway.
+ if ("--ask" in emerge_config.opts) and (not sys.stdin.isatty()):
+ portage.writemsg(
+ '!!! "--ask" should only be used in a terminal. Exiting.\n', noiselevel=-1
+ )
+ return 1
+
+ if emerge_config.target_config.settings.get("PORTAGE_DEBUG", "") == "1":
+ spinner.update = spinner.update_quiet
+ portage.util.noiselimit = 0
+ if "python-trace" in emerge_config.target_config.settings.features:
+ portage.debug.set_trace(True)
+
+ if not "--quiet" in emerge_config.opts:
+ if (
+ "--nospinner" in emerge_config.opts
+ or emerge_config.target_config.settings.get("TERM") == "dumb"
+ or not sys.stdout.isatty()
+ ):
+ spinner.update = spinner.update_basic
+
+ if "--debug" in emerge_config.opts:
+ print("myaction", emerge_config.action)
+ print("myopts", emerge_config.opts)
+
+ if (
+ not emerge_config.action
+ and not emerge_config.args
+ and "--resume" not in emerge_config.opts
+ ):
+ emerge_help()
+ return 1
+
+ pretend = "--pretend" in emerge_config.opts
+ fetchonly = (
+ "--fetchonly" in emerge_config.opts or "--fetch-all-uri" in emerge_config.opts
+ )
+ buildpkgonly = "--buildpkgonly" in emerge_config.opts
+
+ # check if root user is the current user for the actions where emerge needs this
+ if portage.data.secpass < 2:
+ # We've already allowed "--version" and "--help" above.
+ if "--pretend" not in emerge_config.opts and emerge_config.action not in (
+ "search",
+ "info",
+ ):
+ need_superuser = emerge_config.action in (
+ "clean",
+ "depclean",
+ "deselect",
+ "prune",
+ "unmerge",
+ "rage-clean",
+ ) or not (
+ fetchonly
+ or (buildpkgonly and portage.data.secpass >= 1)
+ or emerge_config.action in ("metadata", "regen", "sync")
+ )
+ if portage.data.secpass < 1 or need_superuser:
+ if need_superuser:
+ access_desc = "superuser"
+ else:
+ access_desc = "portage group"
+ # Always show portage_group_warning() when only portage group
+ # access is required but the user is not in the portage group.
+ if "--ask" in emerge_config.opts:
+ writemsg_stdout(
+ "This action requires %s access...\n" % (access_desc,),
+ noiselevel=-1,
+ )
+ if portage.data.secpass < 1 and not need_superuser:
+ portage.data.portage_group_warning()
+ uq = UserQuery(emerge_config.opts)
+ if (
+ uq.query(
+ "Would you like to add --pretend to options?",
+ "--ask-enter-invalid" in emerge_config.opts,
+ )
+ == "No"
+ ):
+ return 128 + signal.SIGINT
+ emerge_config.opts["--pretend"] = True
+ emerge_config.opts.pop("--ask")
+ else:
+ sys.stderr.write(("emerge: %s access is required\n") % access_desc)
+ if portage.data.secpass < 1 and not need_superuser:
+ portage.data.portage_group_warning()
+ return 1
+
+ # Disable emergelog for everything except build or unmerge operations.
+ # This helps minimize parallel emerge.log entries that can confuse log
+ # parsers like genlop.
+ disable_emergelog = False
+
+ emerge_log_dir = emerge_config.target_config.settings.get("EMERGE_LOG_DIR")
+ default_log_dir = os.path.join(
+ os.sep, portage.const.EPREFIX.lstrip(os.sep), "var", "log"
+ )
+ for x in ("--pretend", "--fetchonly", "--fetch-all-uri"):
+ if x in emerge_config.opts:
+ if x == "--fetchonly" and "--quiet" in emerge_config.opts:
+ # Log will be used to store fetch progress
+ log_dir = emerge_log_dir if emerge_log_dir else default_log_dir
+ disable_emergelog = not all(
+ os.access(logfile, os.W_OK)
+ for logfile in set(
+ first_existing(os.path.join(log_dir, logfile))
+ for logfile in ("emerge.log", "emerge-fetch.log")
+ )
+ )
+ break
+ else:
+ disable_emergelog = True
+ break
+ if disable_emergelog:
+ pass
+ elif emerge_config.action in ("search", "info"):
+ disable_emergelog = True
+ elif portage.data.secpass < 1:
+ disable_emergelog = True
+
+ import _emerge.emergelog
+
+ _emerge.emergelog._disable = disable_emergelog
+
+ if not disable_emergelog:
+ if emerge_log_dir:
+ try:
+ # At least the parent needs to exist for the lock file.
+ portage.util.ensure_dirs(emerge_log_dir)
+ except portage.exception.PortageException as e:
+ writemsg_level(
+ "!!! Error creating directory for "
+ + "EMERGE_LOG_DIR='%s':\n!!! %s\n" % (emerge_log_dir, e),
+ noiselevel=-1,
+ level=logging.ERROR,
+ )
+ portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir)
+ else:
+ _emerge.emergelog._emerge_log_dir = emerge_log_dir
+ else:
+ _emerge.emergelog._emerge_log_dir = default_log_dir
+ portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir)
+
+ if not "--pretend" in emerge_config.opts:
+ time_fmt = "%b %d, %Y %H:%M:%S"
+ time_str = time.strftime(time_fmt, time.localtime(time.time()))
+ # Avoid potential UnicodeDecodeError in Python 2, since strftime
+ # returns bytes in Python 2, and %b may contain non-ascii chars.
+ time_str = _unicode_decode(
+ time_str, encoding=_encodings["content"], errors="replace"
+ )
+ emergelog(xterm_titles, "Started emerge on: %s" % time_str)
+ myelogstr = ""
+ if emerge_config.opts:
+ opt_list = []
+ for opt, arg in emerge_config.opts.items():
+ if arg is True:
+ opt_list.append(opt)
+ elif isinstance(arg, list):
+ # arguments like --exclude that use 'append' action
+ for x in arg:
+ opt_list.append("%s=%s" % (opt, x))
+ else:
+ opt_list.append("%s=%s" % (opt, arg))
+ myelogstr = " ".join(opt_list)
+ if emerge_config.action:
+ myelogstr += " --" + emerge_config.action
+ if oldargs:
+ myelogstr += " " + " ".join(oldargs)
+ emergelog(xterm_titles, " *** emerge " + myelogstr)
+
+ oldargs = None
+
+ def emergeexitsig(signum, frame):
+ signal.signal(signal.SIGTERM, signal.SIG_IGN)
+ portage.util.writemsg("\n\nExiting on signal %(signal)s\n" % {"signal": signum})
+ sys.exit(128 + signum)
+
+ signal.signal(signal.SIGTERM, emergeexitsig)
+
+ def emergeexit():
+ """This gets out final log message in before we quit."""
+ if "--pretend" not in emerge_config.opts:
+ emergelog(xterm_titles, " *** terminating.")
+ if xterm_titles:
+ xtermTitleReset()
+
+ portage.atexit_register(emergeexit)
+
+ if emerge_config.action in ("config", "metadata", "regen", "sync"):
+ if "--pretend" in emerge_config.opts:
+ sys.stderr.write(
+ ("emerge: The '%s' action does " + "not support '--pretend'.\n")
+ % emerge_config.action
+ )
+ return 1
+
+ if "sync" == emerge_config.action:
+ return action_sync(emerge_config)
+ if "metadata" == emerge_config.action:
+ action_metadata(
+ emerge_config.target_config.settings,
+ emerge_config.target_config.trees["porttree"].dbapi,
+ emerge_config.opts,
+ )
+ elif emerge_config.action == "regen":
+ validate_ebuild_environment(emerge_config.trees)
+ return action_regen(
+ emerge_config.target_config.settings,
+ emerge_config.target_config.trees["porttree"].dbapi,
+ emerge_config.opts.get("--jobs"),
+ emerge_config.opts.get("--load-average"),
+ )
+ # HELP action
+ elif "config" == emerge_config.action:
+ validate_ebuild_environment(emerge_config.trees)
+ return action_config(
+ emerge_config.target_config.settings,
+ emerge_config.trees,
+ emerge_config.opts,
+ emerge_config.args,
+ )
+
+ # SEARCH action
+ elif "search" == emerge_config.action:
+ validate_ebuild_environment(emerge_config.trees)
+ action_search(
+ emerge_config.target_config, emerge_config.opts, emerge_config.args, spinner
+ )
+
+ elif emerge_config.action in (
+ "clean",
+ "depclean",
+ "deselect",
+ "prune",
+ "unmerge",
+ "rage-clean",
+ ):
+ validate_ebuild_environment(emerge_config.trees)
+ rval = action_uninstall(
+ emerge_config.target_config.settings,
+ emerge_config.trees,
+ emerge_config.target_config.mtimedb["ldpath"],
+ emerge_config.opts,
+ emerge_config.action,
+ emerge_config.args,
+ spinner,
+ )
+ if not (
+ emerge_config.action == "deselect" or buildpkgonly or fetchonly or pretend
+ ):
+ post_emerge(
+ emerge_config.action,
+ emerge_config.opts,
+ emerge_config.args,
+ emerge_config.target_config.root,
+ emerge_config.trees,
+ emerge_config.target_config.mtimedb,
+ rval,
+ )
+ return rval
+
+ elif emerge_config.action == "info":
+
+ # Ensure atoms are valid before calling unmerge().
+ vardb = emerge_config.target_config.trees["vartree"].dbapi
+ portdb = emerge_config.target_config.trees["porttree"].dbapi
+ bindb = emerge_config.target_config.trees["bintree"].dbapi
+ valid_atoms = []
+ for x in emerge_config.args:
+ if is_valid_package_atom(x, allow_repo=True):
+ try:
+ # look at the installed files first, if there is no match
+ # look at the ebuilds, since EAPI 4 allows running pkg_info
+ # on non-installed packages
+ valid_atom = dep_expand(x, mydb=vardb)
+ if valid_atom.cp.split("/")[0] == "null":
+ valid_atom = dep_expand(x, mydb=portdb)
+
+ if (
+ valid_atom.cp.split("/")[0] == "null"
+ and "--usepkg" in emerge_config.opts
+ ):
+ valid_atom = dep_expand(x, mydb=bindb)
+
+ valid_atoms.append(valid_atom)
+
+ except portage.exception.AmbiguousPackageName as e:
+ msg = (
+ 'The short ebuild name "'
+ + x
+ + '" is ambiguous. Please specify '
+ + "one of the following "
+ + "fully-qualified ebuild names instead:"
+ )
+ for line in textwrap.wrap(msg, 70):
+ writemsg_level(
+ "!!! %s\n" % (line,), level=logging.ERROR, noiselevel=-1
+ )
+ for i in e.args[0]:
+ writemsg_level(
+ " %s\n" % colorize("INFORM", i),
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+ writemsg_level("\n", level=logging.ERROR, noiselevel=-1)
+ return 1
+ continue
+ msg = []
+ msg.append("'%s' is not a valid package atom." % (x,))
+ msg.append("Please check ebuild(5) for full details.")
+ writemsg_level(
+ "".join("!!! %s\n" % line for line in msg),
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+ return 1
+
+ return action_info(
+ emerge_config.target_config.settings,
+ emerge_config.trees,
+ emerge_config.opts,
+ valid_atoms,
+ )
+
+ # "update", "system", or just process files:
+ else:
+ validate_ebuild_environment(emerge_config.trees)
+
+ for x in emerge_config.args:
+ if x.startswith(SETPREFIX) or is_valid_package_atom(x, allow_repo=True):
+ continue
+ if x[:1] == os.sep:
+ continue
+ try:
+ os.lstat(x)
+ continue
+ except OSError:
+ pass
+ msg = []
+ msg.append("'%s' is not a valid package atom." % (x,))
+ msg.append("Please check ebuild(5) for full details.")
+ writemsg_level(
+ "".join("!!! %s\n" % line for line in msg),
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+ return 1
+
+ # GLEP 42 says to display news *after* an emerge --pretend
+ if "--pretend" not in emerge_config.opts:
+ uq = UserQuery(emerge_config.opts)
+ if (
+ display_news_notification(
+ emerge_config.target_config, emerge_config.opts
+ )
+ and "--ask" in emerge_config.opts
+ and "--read-news" in emerge_config.opts
+ and uq.query(
+ "Would you like to read the news items while "
+ "calculating dependencies?",
+ "--ask-enter-invalid" in emerge_config.opts,
+ )
+ == "Yes"
+ ):
+ try:
+ subprocess.call(["eselect", "news", "read"])
+ # If eselect is not installed, Python <3.3 will throw an
+ # OSError. >=3.3 will throw a FileNotFoundError, which is a
+ # subclass of OSError.
+ except OSError:
+ writemsg(
+ "Please install eselect to use this feature.\n", noiselevel=-1
+ )
+ retval = action_build(emerge_config, spinner=spinner)
+ post_emerge(
+ emerge_config.action,
+ emerge_config.opts,
+ emerge_config.args,
+ emerge_config.target_config.root,
+ emerge_config.trees,
+ emerge_config.target_config.mtimedb,
+ retval,
+ )
+
+ return retval
diff --cc lib/portage/const.py
index 1896a6a22,abe0ef6c6..cfc0da43b
--- a/lib/portage/const.py
+++ b/lib/portage/const.py
@@@ -60,166 -60,168 +60,170 @@@ GLOBAL_CONFIG_PATH = "/usr/share/portag
# NOTE: Use realpath(__file__) so that python module symlinks in site-packages
# are followed back to the real location of the whole portage installation.
# NOTE: Please keep PORTAGE_BASE_PATH in one line to help substitutions.
- PORTAGE_BASE_PATH = os.path.join(os.sep, os.sep.join(os.path.realpath(__file__.rstrip("co")).split(os.sep)[:-3]))
- PORTAGE_BIN_PATH = PORTAGE_BASE_PATH + "/bin"
- PORTAGE_PYM_PATH = os.path.realpath(os.path.join(__file__, '../..'))
- LOCALE_DATA_PATH = PORTAGE_BASE_PATH + "/locale" # FIXME: not used
- EBUILD_SH_BINARY = PORTAGE_BIN_PATH + "/ebuild.sh"
- MISC_SH_BINARY = PORTAGE_BIN_PATH + "/misc-functions.sh"
- SANDBOX_BINARY = "/usr/bin/sandbox"
- FAKEROOT_BINARY = "/usr/bin/fakeroot"
- BASH_BINARY = "/bin/bash"
- MOVE_BINARY = "/bin/mv"
- PRELINK_BINARY = "/usr/sbin/prelink"
+ # fmt:off
+ PORTAGE_BASE_PATH = os.path.join(os.sep, os.sep.join(os.path.realpath(__file__.rstrip("co")).split(os.sep)[:-3]))
+ # fmt:on
+ PORTAGE_BIN_PATH = PORTAGE_BASE_PATH + "/bin"
+ PORTAGE_PYM_PATH = os.path.realpath(os.path.join(__file__, "../.."))
+ LOCALE_DATA_PATH = PORTAGE_BASE_PATH + "/locale" # FIXME: not used
+ EBUILD_SH_BINARY = PORTAGE_BIN_PATH + "/ebuild.sh"
+ MISC_SH_BINARY = PORTAGE_BIN_PATH + "/misc-functions.sh"
+ SANDBOX_BINARY = "/usr/bin/sandbox"
+ FAKEROOT_BINARY = "/usr/bin/fakeroot"
+ BASH_BINARY = "/bin/bash"
+ MOVE_BINARY = "/bin/mv"
+ PRELINK_BINARY = "/usr/sbin/prelink"
- INVALID_ENV_FILE = "/etc/spork/is/not/valid/profile.env"
- MERGING_IDENTIFIER = "-MERGING-"
- REPO_NAME_FILE = "repo_name"
- REPO_NAME_LOC = "profiles" + "/" + REPO_NAME_FILE
+ INVALID_ENV_FILE = "/etc/spork/is/not/valid/profile.env"
+ MERGING_IDENTIFIER = "-MERGING-"
+ REPO_NAME_FILE = "repo_name"
+ REPO_NAME_LOC = "profiles" + "/" + REPO_NAME_FILE
- PORTAGE_PACKAGE_ATOM = "sys-apps/portage"
- LIBC_PACKAGE_ATOM = "virtual/libc"
- OS_HEADERS_PACKAGE_ATOM = "virtual/os-headers"
- CVS_PACKAGE_ATOM = "dev-vcs/cvs"
- GIT_PACKAGE_ATOM = "dev-vcs/git"
- HG_PACKAGE_ATOM = "dev-vcs/mercurial"
- RSYNC_PACKAGE_ATOM = "net-misc/rsync"
+ PORTAGE_PACKAGE_ATOM = "sys-apps/portage"
+ LIBC_PACKAGE_ATOM = "virtual/libc"
+ OS_HEADERS_PACKAGE_ATOM = "virtual/os-headers"
+ CVS_PACKAGE_ATOM = "dev-vcs/cvs"
+ GIT_PACKAGE_ATOM = "dev-vcs/git"
+ HG_PACKAGE_ATOM = "dev-vcs/mercurial"
+ RSYNC_PACKAGE_ATOM = "net-misc/rsync"
- INCREMENTALS = (
- "ACCEPT_KEYWORDS",
- "CONFIG_PROTECT",
- "CONFIG_PROTECT_MASK",
- "ENV_UNSET",
- "FEATURES",
- "IUSE_IMPLICIT",
- "PRELINK_PATH",
- "PRELINK_PATH_MASK",
- "PROFILE_ONLY_VARIABLES",
- "USE",
- "USE_EXPAND",
- "USE_EXPAND_HIDDEN",
- "USE_EXPAND_IMPLICIT",
- "USE_EXPAND_UNPREFIXED",
+ INCREMENTALS = (
+ "ACCEPT_KEYWORDS",
+ "CONFIG_PROTECT",
+ "CONFIG_PROTECT_MASK",
+ "ENV_UNSET",
+ "FEATURES",
+ "IUSE_IMPLICIT",
+ "PRELINK_PATH",
+ "PRELINK_PATH_MASK",
+ "PROFILE_ONLY_VARIABLES",
+ "USE",
+ "USE_EXPAND",
+ "USE_EXPAND_HIDDEN",
+ "USE_EXPAND_IMPLICIT",
+ "USE_EXPAND_UNPREFIXED",
+ "NO_AUTO_FLAG", "RESTRICT_MULTILIB_BINARIES"
)
- EBUILD_PHASES = (
- "pretend",
- "setup",
- "unpack",
- "prepare",
- "configure",
- "compile",
- "test",
- "install",
- "package",
- "instprep",
- "preinst",
- "postinst",
- "prerm",
- "postrm",
- "nofetch",
- "config",
- "info",
- "other",
+ EBUILD_PHASES = (
+ "pretend",
+ "setup",
+ "unpack",
+ "prepare",
+ "configure",
+ "compile",
+ "test",
+ "install",
+ "package",
+ "instprep",
+ "preinst",
+ "postinst",
+ "prerm",
+ "postrm",
+ "nofetch",
+ "config",
+ "info",
+ "other",
+ )
+ SUPPORTED_FEATURES = frozenset(
+ [
+ "assume-digests",
+ "binpkg-docompress",
+ "binpkg-dostrip",
+ "binpkg-logs",
+ "binpkg-multi-instance",
+ "buildpkg",
+ "buildsyspkg",
+ "candy",
+ "case-insensitive-fs",
+ "ccache",
+ "cgroup",
+ "chflags",
+ "clean-logs",
+ "collision-protect",
+ "compress-build-logs",
+ "compressdebug",
+ "compress-index",
+ "config-protect-if-modified",
+ "digest",
+ "distcc",
+ "distlocks",
+ "downgrade-backup",
+ "ebuild-locks",
+ "fail-clean",
+ "fakeroot",
+ "fixlafiles",
+ "force-mirror",
++ "force-multilib",
+ "force-prefix",
+ "getbinpkg",
+ "icecream",
+ "installsources",
+ "ipc-sandbox",
+ "keeptemp",
+ "keepwork",
+ "lmirror",
+ "merge-sync",
+ "metadata-transfer",
+ "mirror",
+ "mount-sandbox",
+ "multilib-strict",
+ "network-sandbox",
+ "network-sandbox-proxy",
+ "news",
+ "noauto",
+ "noclean",
+ "nodoc",
+ "noinfo",
+ "noman",
+ "nostrip",
+ "notitles",
+ "parallel-fetch",
+ "parallel-install",
+ "pid-sandbox",
+ "pkgdir-index-trusted",
+ "prelink-checksums",
+ "preserve-libs",
+ "protect-owned",
+ "python-trace",
+ "qa-unresolved-soname-deps",
+ "sandbox",
+ "selinux",
+ "sesandbox",
+ "sfperms",
+ "sign",
+ "skiprocheck",
+ "splitdebug",
+ "split-elog",
+ "split-log",
+ "strict",
+ "strict-keepdir",
+ "stricter",
+ "suidctl",
+ "test",
+ "test-fail-continue",
+ "unknown-features-filter",
+ "unknown-features-warn",
+ "unmerge-backup",
+ "unmerge-logs",
+ "unmerge-orphans",
+ "unprivileged",
+ "userfetch",
+ "userpriv",
+ "usersandbox",
+ "usersync",
+ "webrsync-gpg",
+ "xattr",
+ ]
)
- SUPPORTED_FEATURES = frozenset([
- "assume-digests",
- "binpkg-docompress",
- "binpkg-dostrip",
- "binpkg-logs",
- "binpkg-multi-instance",
- "buildpkg",
- "buildsyspkg",
- "candy",
- "case-insensitive-fs",
- "ccache",
- "cgroup",
- "chflags",
- "clean-logs",
- "collision-protect",
- "compress-build-logs",
- "compressdebug",
- "compress-index",
- "config-protect-if-modified",
- "digest",
- "distcc",
- "distlocks",
- "downgrade-backup",
- "ebuild-locks",
- "fail-clean",
- "fakeroot",
- "fixlafiles",
- "force-mirror",
- "force-multilib",
- "force-prefix",
- "getbinpkg",
- "icecream",
- "installsources",
- "ipc-sandbox",
- "keeptemp",
- "keepwork",
- "lmirror",
- "merge-sync",
- "metadata-transfer",
- "mirror",
- "mount-sandbox",
- "multilib-strict",
- "network-sandbox",
- "network-sandbox-proxy",
- "news",
- "noauto",
- "noclean",
- "nodoc",
- "noinfo",
- "noman",
- "nostrip",
- "notitles",
- "parallel-fetch",
- "parallel-install",
- "pid-sandbox",
- "pkgdir-index-trusted",
- "prelink-checksums",
- "preserve-libs",
- "protect-owned",
- "python-trace",
- "qa-unresolved-soname-deps",
- "sandbox",
- "selinux",
- "sesandbox",
- "sfperms",
- "sign",
- "skiprocheck",
- "splitdebug",
- "split-elog",
- "split-log",
- "strict",
- "strict-keepdir",
- "stricter",
- "suidctl",
- "test",
- "test-fail-continue",
- "unknown-features-filter",
- "unknown-features-warn",
- "unmerge-backup",
- "unmerge-logs",
- "unmerge-orphans",
- "unprivileged",
- "userfetch",
- "userpriv",
- "usersandbox",
- "usersync",
- "webrsync-gpg",
- "xattr",
- ])
- EAPI = 8
+ EAPI = 8
- HASHING_BLOCKSIZE = 32768
+ HASHING_BLOCKSIZE = 32768
MANIFEST2_HASH_DEFAULTS = frozenset(["BLAKE2B", "SHA512"])
- MANIFEST2_HASH_DEFAULT = "BLAKE2B"
+ MANIFEST2_HASH_DEFAULT = "BLAKE2B"
- MANIFEST2_IDENTIFIERS = ("AUX", "MISC", "DIST", "EBUILD")
+ MANIFEST2_IDENTIFIERS = ("AUX", "MISC", "DIST", "EBUILD")
# The EPREFIX for the current install is hardcoded here, but access to this
# constant should be minimal, in favor of access via the EPREFIX setting of
diff --cc lib/portage/dep/__init__.py
index 151f545c2,3b3577025..921483d8d
--- a/lib/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
@@@ -850,373 -1056,413 +1056,414 @@@ def flatten(mylist)
class _use_dep:
- __slots__ = ("_eapi_attrs", "conditional", "missing_enabled", "missing_disabled",
- "disabled", "enabled", "tokens", "required")
-
- class _conditionals_class:
- __slots__ = ("enabled", "disabled", "equal", "not_equal")
-
- def items(self):
- for k in self.__slots__:
- v = getattr(self, k, None)
- if v:
- yield (k, v)
-
- def values(self):
- for k in self.__slots__:
- v = getattr(self, k, None)
- if v:
- yield v
-
- # used in InvalidAtom messages
- _conditional_strings = {
- 'enabled' : '%s?',
- 'disabled': '!%s?',
- 'equal': '%s=',
- 'not_equal': '!%s=',
- }
-
- def __init__(self, use, eapi_attrs, enabled_flags=None, disabled_flags=None, missing_enabled=None,
- missing_disabled=None, conditional=None, required=None):
-
- self._eapi_attrs = eapi_attrs
-
- if enabled_flags is not None:
- #A shortcut for the classe's own methods.
- self.tokens = use
- if not isinstance(self.tokens, tuple):
- self.tokens = tuple(self.tokens)
-
- self.required = frozenset(required)
- self.enabled = frozenset(enabled_flags)
- self.disabled = frozenset(disabled_flags)
- self.missing_enabled = frozenset(missing_enabled)
- self.missing_disabled = frozenset(missing_disabled)
- self.conditional = None
-
- if conditional:
- self.conditional = self._conditionals_class()
- for k in "enabled", "disabled", "equal", "not_equal":
- setattr(self.conditional, k, frozenset(conditional.get(k, [])))
-
- return
-
- enabled_flags = set()
- disabled_flags = set()
- missing_enabled = set()
- missing_disabled = set()
- no_default = set()
-
- conditional = {}
- usedep_re = _get_usedep_re(self._eapi_attrs)
-
- for x in use:
- m = usedep_re.match(x)
- if m is None:
- raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
-
- operator = m.group("prefix") + m.group("suffix")
- flag = m.group("flag")
- default = m.group("default")
-
- if not operator:
- enabled_flags.add(flag)
- elif operator == "-":
- disabled_flags.add(flag)
- elif operator == "?":
- conditional.setdefault("enabled", set()).add(flag)
- elif operator == "=":
- conditional.setdefault("equal", set()).add(flag)
- elif operator == "!=":
- conditional.setdefault("not_equal", set()).add(flag)
- elif operator == "!?":
- conditional.setdefault("disabled", set()).add(flag)
- else:
- raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
-
- if default:
- if default == "(+)":
- if flag in missing_disabled or flag in no_default:
- raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
- missing_enabled.add(flag)
- else:
- if flag in missing_enabled or flag in no_default:
- raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
- missing_disabled.add(flag)
- else:
- if flag in missing_enabled or flag in missing_disabled:
+ __slots__ = (
+ "_eapi_attrs",
+ "conditional",
+ "missing_enabled",
+ "missing_disabled",
+ "disabled",
+ "enabled",
+ "tokens",
+ "required",
+ )
+
+ class _conditionals_class:
+ __slots__ = ("enabled", "disabled", "equal", "not_equal")
+
+ def items(self):
+ for k in self.__slots__:
+ v = getattr(self, k, None)
+ if v:
+ yield (k, v)
+
+ def values(self):
+ for k in self.__slots__:
+ v = getattr(self, k, None)
+ if v:
+ yield v
+
+ # used in InvalidAtom messages
+ _conditional_strings = {
+ "enabled": "%s?",
+ "disabled": "!%s?",
+ "equal": "%s=",
+ "not_equal": "!%s=",
+ }
+
+ def __init__(
+ self,
+ use,
+ eapi_attrs,
+ enabled_flags=None,
+ disabled_flags=None,
+ missing_enabled=None,
+ missing_disabled=None,
+ conditional=None,
+ required=None,
+ ):
+
+ self._eapi_attrs = eapi_attrs
+
+ if enabled_flags is not None:
+ # A shortcut for the classe's own methods.
+ self.tokens = use
+ if not isinstance(self.tokens, tuple):
+ self.tokens = tuple(self.tokens)
+
+ self.required = frozenset(required)
+ self.enabled = frozenset(enabled_flags)
+ self.disabled = frozenset(disabled_flags)
+ self.missing_enabled = frozenset(missing_enabled)
+ self.missing_disabled = frozenset(missing_disabled)
+ self.conditional = None
+
+ if conditional:
+ self.conditional = self._conditionals_class()
+ for k in "enabled", "disabled", "equal", "not_equal":
+ setattr(self.conditional, k, frozenset(conditional.get(k, [])))
+
+ return
+
+ enabled_flags = set()
+ disabled_flags = set()
+ missing_enabled = set()
+ missing_disabled = set()
+ no_default = set()
+
+ conditional = {}
+ usedep_re = _get_usedep_re(self._eapi_attrs)
+
+ for x in use:
+ m = usedep_re.match(x)
+ if m is None:
+ raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
+
+ operator = m.group("prefix") + m.group("suffix")
+ flag = m.group("flag")
+ default = m.group("default")
+
+ if not operator:
+ enabled_flags.add(flag)
+ elif operator == "-":
+ disabled_flags.add(flag)
+ elif operator == "?":
+ conditional.setdefault("enabled", set()).add(flag)
+ elif operator == "=":
+ conditional.setdefault("equal", set()).add(flag)
+ elif operator == "!=":
+ conditional.setdefault("not_equal", set()).add(flag)
+ elif operator == "!?":
+ conditional.setdefault("disabled", set()).add(flag)
+ else:
+ raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
+
+ if default:
+ if default == "(+)":
+ if flag in missing_disabled or flag in no_default:
+ raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
+ missing_enabled.add(flag)
+ else:
+ if flag in missing_enabled or flag in no_default:
+ raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
+ missing_disabled.add(flag)
+ else:
+ if flag in missing_enabled or flag in missing_disabled:
+ if flag != "multilib_abi_x86" and flag != "multilib_abi_amd64":
- raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
- no_default.add(flag)
-
- self.tokens = use
- if not isinstance(self.tokens, tuple):
- self.tokens = tuple(self.tokens)
-
- self.required = frozenset(no_default)
-
- self.enabled = frozenset(enabled_flags)
- self.disabled = frozenset(disabled_flags)
- self.missing_enabled = frozenset(missing_enabled)
- self.missing_disabled = frozenset(missing_disabled)
- self.conditional = None
-
- if conditional:
- self.conditional = self._conditionals_class()
- for k in "enabled", "disabled", "equal", "not_equal":
- setattr(self.conditional, k, frozenset(conditional.get(k, ())))
-
- def __bool__(self):
- return bool(self.tokens)
-
- def __str__(self):
- if not self.tokens:
- return ""
- return "[%s]" % (",".join(self.tokens),)
-
- def __repr__(self):
- return "portage.dep._use_dep(%s)" % repr(self.tokens)
-
- def evaluate_conditionals(self, use):
- """
- Create a new instance with conditionals evaluated.
-
- Conditional evaluation behavior:
-
- parent state conditional result
-
- x x? x
- -x x?
- x !x?
- -x !x? -x
-
- x x= x
- -x x= -x
- x !x= -x
- -x !x= x
-
- Conditional syntax examples:
-
- Compact Form Equivalent Expanded Form
-
- foo[bar?] bar? ( foo[bar] ) !bar? ( foo )
- foo[!bar?] bar? ( foo ) !bar? ( foo[-bar] )
- foo[bar=] bar? ( foo[bar] ) !bar? ( foo[-bar] )
- foo[!bar=] bar? ( foo[-bar] ) !bar? ( foo[bar] )
-
- """
- enabled_flags = set(self.enabled)
- disabled_flags = set(self.disabled)
-
- tokens = []
- usedep_re = _get_usedep_re(self._eapi_attrs)
-
- for x in self.tokens:
- m = usedep_re.match(x)
-
- operator = m.group("prefix") + m.group("suffix")
- flag = m.group("flag")
- default = m.group("default")
- if default is None:
- default = ""
-
- if operator == "?":
- if flag in use:
- enabled_flags.add(flag)
- tokens.append(flag+default)
- elif operator == "=":
- if flag in use:
- enabled_flags.add(flag)
- tokens.append(flag+default)
- else:
- disabled_flags.add(flag)
- tokens.append("-"+flag+default)
- elif operator == "!=":
- if flag in use:
- disabled_flags.add(flag)
- tokens.append("-"+flag+default)
- else:
- enabled_flags.add(flag)
- tokens.append(flag+default)
- elif operator == "!?":
- if flag not in use:
- disabled_flags.add(flag)
- tokens.append("-"+flag+default)
- else:
- tokens.append(x)
-
- return _use_dep(tokens, self._eapi_attrs, enabled_flags=enabled_flags, disabled_flags=disabled_flags,
- missing_enabled=self.missing_enabled, missing_disabled=self.missing_disabled, required=self.required)
-
- def violated_conditionals(self, other_use, is_valid_flag, parent_use=None):
- """
- Create a new instance with satisfied use deps removed.
- """
- if parent_use is None and self.conditional:
- raise InvalidAtom("violated_conditionals needs 'parent_use'" + \
- " parameter for conditional flags.")
-
- enabled_flags = set()
- disabled_flags = set()
-
- conditional = {}
- tokens = []
-
- all_defaults = self.missing_enabled | self.missing_disabled
-
- def validate_flag(flag):
- return is_valid_flag(flag) or flag in all_defaults
-
- usedep_re = _get_usedep_re(self._eapi_attrs)
-
- for x in self.tokens:
- m = usedep_re.match(x)
-
- operator = m.group("prefix") + m.group("suffix")
- flag = m.group("flag")
-
- if not validate_flag(flag):
- tokens.append(x)
- if not operator:
- enabled_flags.add(flag)
- elif operator == "-":
- disabled_flags.add(flag)
- elif operator == "?":
- conditional.setdefault("enabled", set()).add(flag)
- elif operator == "=":
- conditional.setdefault("equal", set()).add(flag)
- elif operator == "!=":
- conditional.setdefault("not_equal", set()).add(flag)
- elif operator == "!?":
- conditional.setdefault("disabled", set()).add(flag)
-
- continue
-
- if not operator:
- if flag not in other_use:
- if is_valid_flag(flag) or flag in self.missing_disabled:
- tokens.append(x)
- enabled_flags.add(flag)
- elif operator == "-":
- if flag not in other_use:
- if not is_valid_flag(flag):
- if flag in self.missing_enabled:
- tokens.append(x)
- disabled_flags.add(flag)
- else:
- tokens.append(x)
- disabled_flags.add(flag)
- elif operator == "?":
- if flag not in parent_use or flag in other_use:
- continue
-
- if is_valid_flag(flag) or flag in self.missing_disabled:
- tokens.append(x)
- conditional.setdefault("enabled", set()).add(flag)
- elif operator == "=":
- if flag in parent_use and flag not in other_use:
- if is_valid_flag(flag):
- tokens.append(x)
- conditional.setdefault("equal", set()).add(flag)
- else:
- if flag in self.missing_disabled:
- tokens.append(x)
- conditional.setdefault("equal", set()).add(flag)
- elif flag not in parent_use:
- if flag not in other_use:
- if not is_valid_flag(flag):
- if flag in self.missing_enabled:
- tokens.append(x)
- conditional.setdefault("equal", set()).add(flag)
- else:
- tokens.append(x)
- conditional.setdefault("equal", set()).add(flag)
- elif operator == "!=":
- if flag not in parent_use and flag not in other_use:
- if is_valid_flag(flag):
- tokens.append(x)
- conditional.setdefault("not_equal", set()).add(flag)
- else:
- if flag in self.missing_disabled:
- tokens.append(x)
- conditional.setdefault("not_equal", set()).add(flag)
- elif flag in parent_use:
- if flag not in other_use:
- if not is_valid_flag(flag):
- if flag in self.missing_enabled:
- tokens.append(x)
- conditional.setdefault("not_equal", set()).add(flag)
- else:
- tokens.append(x)
- conditional.setdefault("not_equal", set()).add(flag)
- elif operator == "!?":
- if flag not in parent_use:
- if flag not in other_use:
- if not is_valid_flag(flag) and flag in self.missing_enabled:
- tokens.append(x)
- conditional.setdefault("disabled", set()).add(flag)
- else:
- tokens.append(x)
- conditional.setdefault("disabled", set()).add(flag)
-
- return _use_dep(tokens, self._eapi_attrs, enabled_flags=enabled_flags, disabled_flags=disabled_flags,
- missing_enabled=self.missing_enabled, missing_disabled=self.missing_disabled, \
- conditional=conditional, required=self.required)
-
- def _eval_qa_conditionals(self, use_mask, use_force):
- """
- For repoman, evaluate all possible combinations within the constraints
- of the given use.force and use.mask settings. The result may seem
- ambiguous in the sense that the same flag can be in both the enabled
- and disabled sets, but this is useful within the context of how its
- intended to be used by repoman. It is assumed that the caller has
- already ensured that there is no intersection between the given
- use_mask and use_force sets when necessary.
- """
- enabled_flags = set(self.enabled)
- disabled_flags = set(self.disabled)
- missing_enabled = self.missing_enabled
- missing_disabled = self.missing_disabled
-
- tokens = []
- usedep_re = _get_usedep_re(self._eapi_attrs)
-
- for x in self.tokens:
- m = usedep_re.match(x)
-
- operator = m.group("prefix") + m.group("suffix")
- flag = m.group("flag")
- default = m.group("default")
- if default is None:
- default = ""
-
- if operator == "?":
- if flag not in use_mask:
- enabled_flags.add(flag)
- tokens.append(flag+default)
- elif operator == "=":
- if flag not in use_mask:
- enabled_flags.add(flag)
- tokens.append(flag+default)
- if flag not in use_force:
- disabled_flags.add(flag)
- tokens.append("-"+flag+default)
- elif operator == "!=":
- if flag not in use_force:
- enabled_flags.add(flag)
- tokens.append(flag+default)
- if flag not in use_mask:
- disabled_flags.add(flag)
- tokens.append("-"+flag+default)
- elif operator == "!?":
- if flag not in use_force:
- disabled_flags.add(flag)
- tokens.append("-"+flag+default)
- else:
- tokens.append(x)
-
- return _use_dep(tokens, self._eapi_attrs, enabled_flags=enabled_flags, disabled_flags=disabled_flags,
- missing_enabled=missing_enabled, missing_disabled=missing_disabled, required=self.required)
+ raise InvalidAtom(_("Invalid use dep: '%s'") % (x,))
+ no_default.add(flag)
+
+ self.tokens = use
+ if not isinstance(self.tokens, tuple):
+ self.tokens = tuple(self.tokens)
+
+ self.required = frozenset(no_default)
+
+ self.enabled = frozenset(enabled_flags)
+ self.disabled = frozenset(disabled_flags)
+ self.missing_enabled = frozenset(missing_enabled)
+ self.missing_disabled = frozenset(missing_disabled)
+ self.conditional = None
+
+ if conditional:
+ self.conditional = self._conditionals_class()
+ for k in "enabled", "disabled", "equal", "not_equal":
+ setattr(self.conditional, k, frozenset(conditional.get(k, ())))
+
+ def __bool__(self):
+ return bool(self.tokens)
+
+ def __str__(self):
+ if not self.tokens:
+ return ""
+ return "[%s]" % (",".join(self.tokens),)
+
+ def __repr__(self):
+ return "portage.dep._use_dep(%s)" % repr(self.tokens)
+
+ def evaluate_conditionals(self, use):
+ """
+ Create a new instance with conditionals evaluated.
+
+ Conditional evaluation behavior:
+
+ parent state conditional result
+
+ x x? x
+ -x x?
+ x !x?
+ -x !x? -x
+
+ x x= x
+ -x x= -x
+ x !x= -x
+ -x !x= x
+
+ Conditional syntax examples:
+
+ Compact Form Equivalent Expanded Form
+
+ foo[bar?] bar? ( foo[bar] ) !bar? ( foo )
+ foo[!bar?] bar? ( foo ) !bar? ( foo[-bar] )
+ foo[bar=] bar? ( foo[bar] ) !bar? ( foo[-bar] )
+ foo[!bar=] bar? ( foo[-bar] ) !bar? ( foo[bar] )
+
+ """
+ enabled_flags = set(self.enabled)
+ disabled_flags = set(self.disabled)
+
+ tokens = []
+ usedep_re = _get_usedep_re(self._eapi_attrs)
+
+ for x in self.tokens:
+ m = usedep_re.match(x)
+
+ operator = m.group("prefix") + m.group("suffix")
+ flag = m.group("flag")
+ default = m.group("default")
+ if default is None:
+ default = ""
+
+ if operator == "?":
+ if flag in use:
+ enabled_flags.add(flag)
+ tokens.append(flag + default)
+ elif operator == "=":
+ if flag in use:
+ enabled_flags.add(flag)
+ tokens.append(flag + default)
+ else:
+ disabled_flags.add(flag)
+ tokens.append("-" + flag + default)
+ elif operator == "!=":
+ if flag in use:
+ disabled_flags.add(flag)
+ tokens.append("-" + flag + default)
+ else:
+ enabled_flags.add(flag)
+ tokens.append(flag + default)
+ elif operator == "!?":
+ if flag not in use:
+ disabled_flags.add(flag)
+ tokens.append("-" + flag + default)
+ else:
+ tokens.append(x)
+
+ return _use_dep(
+ tokens,
+ self._eapi_attrs,
+ enabled_flags=enabled_flags,
+ disabled_flags=disabled_flags,
+ missing_enabled=self.missing_enabled,
+ missing_disabled=self.missing_disabled,
+ required=self.required,
+ )
+
+ def violated_conditionals(self, other_use, is_valid_flag, parent_use=None):
+ """
+ Create a new instance with satisfied use deps removed.
+ """
+ if parent_use is None and self.conditional:
+ raise InvalidAtom(
+ "violated_conditionals needs 'parent_use'"
+ + " parameter for conditional flags."
+ )
+
+ enabled_flags = set()
+ disabled_flags = set()
+
+ conditional = {}
+ tokens = []
+
+ all_defaults = self.missing_enabled | self.missing_disabled
+
+ def validate_flag(flag):
+ return is_valid_flag(flag) or flag in all_defaults
+
+ usedep_re = _get_usedep_re(self._eapi_attrs)
+
+ for x in self.tokens:
+ m = usedep_re.match(x)
+
+ operator = m.group("prefix") + m.group("suffix")
+ flag = m.group("flag")
+
+ if not validate_flag(flag):
+ tokens.append(x)
+ if not operator:
+ enabled_flags.add(flag)
+ elif operator == "-":
+ disabled_flags.add(flag)
+ elif operator == "?":
+ conditional.setdefault("enabled", set()).add(flag)
+ elif operator == "=":
+ conditional.setdefault("equal", set()).add(flag)
+ elif operator == "!=":
+ conditional.setdefault("not_equal", set()).add(flag)
+ elif operator == "!?":
+ conditional.setdefault("disabled", set()).add(flag)
+
+ continue
+
+ if not operator:
+ if flag not in other_use:
+ if is_valid_flag(flag) or flag in self.missing_disabled:
+ tokens.append(x)
+ enabled_flags.add(flag)
+ elif operator == "-":
+ if flag not in other_use:
+ if not is_valid_flag(flag):
+ if flag in self.missing_enabled:
+ tokens.append(x)
+ disabled_flags.add(flag)
+ else:
+ tokens.append(x)
+ disabled_flags.add(flag)
+ elif operator == "?":
+ if flag not in parent_use or flag in other_use:
+ continue
+
+ if is_valid_flag(flag) or flag in self.missing_disabled:
+ tokens.append(x)
+ conditional.setdefault("enabled", set()).add(flag)
+ elif operator == "=":
+ if flag in parent_use and flag not in other_use:
+ if is_valid_flag(flag):
+ tokens.append(x)
+ conditional.setdefault("equal", set()).add(flag)
+ else:
+ if flag in self.missing_disabled:
+ tokens.append(x)
+ conditional.setdefault("equal", set()).add(flag)
+ elif flag not in parent_use:
+ if flag not in other_use:
+ if not is_valid_flag(flag):
+ if flag in self.missing_enabled:
+ tokens.append(x)
+ conditional.setdefault("equal", set()).add(flag)
+ else:
+ tokens.append(x)
+ conditional.setdefault("equal", set()).add(flag)
+ elif operator == "!=":
+ if flag not in parent_use and flag not in other_use:
+ if is_valid_flag(flag):
+ tokens.append(x)
+ conditional.setdefault("not_equal", set()).add(flag)
+ else:
+ if flag in self.missing_disabled:
+ tokens.append(x)
+ conditional.setdefault("not_equal", set()).add(flag)
+ elif flag in parent_use:
+ if flag not in other_use:
+ if not is_valid_flag(flag):
+ if flag in self.missing_enabled:
+ tokens.append(x)
+ conditional.setdefault("not_equal", set()).add(flag)
+ else:
+ tokens.append(x)
+ conditional.setdefault("not_equal", set()).add(flag)
+ elif operator == "!?":
+ if flag not in parent_use:
+ if flag not in other_use:
+ if not is_valid_flag(flag) and flag in self.missing_enabled:
+ tokens.append(x)
+ conditional.setdefault("disabled", set()).add(flag)
+ else:
+ tokens.append(x)
+ conditional.setdefault("disabled", set()).add(flag)
+
+ return _use_dep(
+ tokens,
+ self._eapi_attrs,
+ enabled_flags=enabled_flags,
+ disabled_flags=disabled_flags,
+ missing_enabled=self.missing_enabled,
+ missing_disabled=self.missing_disabled,
+ conditional=conditional,
+ required=self.required,
+ )
+
+ def _eval_qa_conditionals(self, use_mask, use_force):
+ """
+ For repoman, evaluate all possible combinations within the constraints
+ of the given use.force and use.mask settings. The result may seem
+ ambiguous in the sense that the same flag can be in both the enabled
+ and disabled sets, but this is useful within the context of how its
+ intended to be used by repoman. It is assumed that the caller has
+ already ensured that there is no intersection between the given
+ use_mask and use_force sets when necessary.
+ """
+ enabled_flags = set(self.enabled)
+ disabled_flags = set(self.disabled)
+ missing_enabled = self.missing_enabled
+ missing_disabled = self.missing_disabled
+
+ tokens = []
+ usedep_re = _get_usedep_re(self._eapi_attrs)
+
+ for x in self.tokens:
+ m = usedep_re.match(x)
+
+ operator = m.group("prefix") + m.group("suffix")
+ flag = m.group("flag")
+ default = m.group("default")
+ if default is None:
+ default = ""
+
+ if operator == "?":
+ if flag not in use_mask:
+ enabled_flags.add(flag)
+ tokens.append(flag + default)
+ elif operator == "=":
+ if flag not in use_mask:
+ enabled_flags.add(flag)
+ tokens.append(flag + default)
+ if flag not in use_force:
+ disabled_flags.add(flag)
+ tokens.append("-" + flag + default)
+ elif operator == "!=":
+ if flag not in use_force:
+ enabled_flags.add(flag)
+ tokens.append(flag + default)
+ if flag not in use_mask:
+ disabled_flags.add(flag)
+ tokens.append("-" + flag + default)
+ elif operator == "!?":
+ if flag not in use_force:
+ disabled_flags.add(flag)
+ tokens.append("-" + flag + default)
+ else:
+ tokens.append(x)
+
+ return _use_dep(
+ tokens,
+ self._eapi_attrs,
+ enabled_flags=enabled_flags,
+ disabled_flags=disabled_flags,
+ missing_enabled=missing_enabled,
+ missing_disabled=missing_disabled,
+ required=self.required,
+ )
+
class Atom(str):
diff --cc lib/portage/dep/dep_check.py
index 90f0eefe4,9fccda08b..f75860978
--- a/lib/portage/dep/dep_check.py
+++ b/lib/portage/dep/dep_check.py
@@@ -21,894 -21,942 +21,1002 @@@ from portage.util.digraph import digrap
from portage.util.SlotObject import SlotObject
from portage.versions import vercmp
- def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/",
- trees=None, use_mask=None, use_force=None, **kwargs):
- """
- In order to solve bug #141118, recursively expand new-style virtuals so
- as to collapse one or more levels of indirection, generating an expanded
- search space. In dep_zapdeps, new-style virtuals will be assigned
- zero cost regardless of whether or not they are currently installed. Virtual
- blockers are supported but only when the virtual expands to a single
- atom because it wouldn't necessarily make sense to block all the components
- of a compound virtual. When more than one new-style virtual is matched,
- the matches are sorted from highest to lowest versions and the atom is
- expanded to || ( highest match ... lowest match ).
-
- The result is normalized in the same way as use_reduce, having a top-level
- conjuction, and no redundant nested lists.
- """
- newsplit = []
- mytrees = trees[myroot]
- portdb = mytrees["porttree"].dbapi
- pkg_use_enabled = mytrees.get("pkg_use_enabled")
- # Atoms are stored in the graph as (atom, id(atom)) tuples
- # since each atom is considered to be a unique entity. For
- # example, atoms that appear identical may behave differently
- # in USE matching, depending on their unevaluated form. Also,
- # specially generated virtual atoms may appear identical while
- # having different _orig_atom attributes.
- atom_graph = mytrees.get("atom_graph")
- parent = mytrees.get("parent")
- virt_parent = mytrees.get("virt_parent")
- graph_parent = None
- if parent is not None:
- if virt_parent is not None:
- graph_parent = virt_parent
- parent = virt_parent
- else:
- graph_parent = parent
- repoman = not mysettings.local_config
- if kwargs["use_binaries"]:
- portdb = trees[myroot]["bintree"].dbapi
- pprovideddict = mysettings.pprovideddict
- myuse = kwargs["myuse"]
- is_disjunction = mysplit and mysplit[0] == '||'
- for x in mysplit:
- if x == "||":
- newsplit.append(x)
- continue
- elif isinstance(x, list):
- assert x, 'Normalization error, empty conjunction found in %s' % (mysplit,)
- if is_disjunction:
- assert x[0] != '||', \
- 'Normalization error, nested disjunction found in %s' % (mysplit,)
- else:
- assert x[0] == '||', \
- 'Normalization error, nested conjunction found in %s' % (mysplit,)
- x_exp = _expand_new_virtuals(x, edebug, mydbapi,
- mysettings, myroot=myroot, trees=trees, use_mask=use_mask,
- use_force=use_force, **kwargs)
- if is_disjunction:
- if len(x_exp) == 1:
- x = x_exp[0]
- if isinstance(x, list):
- # Due to normalization, a conjunction must not be
- # nested directly in another conjunction, so this
- # must be a disjunction.
- assert x and x[0] == '||', \
- 'Normalization error, nested conjunction found in %s' % (x_exp,)
- newsplit.extend(x[1:])
- else:
- newsplit.append(x)
- else:
- newsplit.append(x_exp)
- else:
- newsplit.extend(x_exp)
- continue
-
- if not isinstance(x, Atom):
- raise ParseError(
- _("invalid token: '%s'") % x)
- if repoman:
- x = x._eval_qa_conditionals(use_mask, use_force)
-
- if 'force-multilib' in mysettings.features:
+ def _expand_new_virtuals(
+ mysplit,
+ edebug,
+ mydbapi,
+ mysettings,
+ myroot="/",
+ trees=None,
+ use_mask=None,
+ use_force=None,
+ **kwargs
+ ):
+ """
+ In order to solve bug #141118, recursively expand new-style virtuals so
+ as to collapse one or more levels of indirection, generating an expanded
+ search space. In dep_zapdeps, new-style virtuals will be assigned
+ zero cost regardless of whether or not they are currently installed. Virtual
+ blockers are supported but only when the virtual expands to a single
+ atom because it wouldn't necessarily make sense to block all the components
+ of a compound virtual. When more than one new-style virtual is matched,
+ the matches are sorted from highest to lowest versions and the atom is
+ expanded to || ( highest match ... lowest match ).
+
+ The result is normalized in the same way as use_reduce, having a top-level
+ conjuction, and no redundant nested lists.
+ """
+ newsplit = []
+ mytrees = trees[myroot]
+ portdb = mytrees["porttree"].dbapi
+ pkg_use_enabled = mytrees.get("pkg_use_enabled")
+ # Atoms are stored in the graph as (atom, id(atom)) tuples
+ # since each atom is considered to be a unique entity. For
+ # example, atoms that appear identical may behave differently
+ # in USE matching, depending on their unevaluated form. Also,
+ # specially generated virtual atoms may appear identical while
+ # having different _orig_atom attributes.
+ atom_graph = mytrees.get("atom_graph")
+ parent = mytrees.get("parent")
+ virt_parent = mytrees.get("virt_parent")
+ graph_parent = None
+ if parent is not None:
+ if virt_parent is not None:
+ graph_parent = virt_parent
+ parent = virt_parent
+ else:
+ graph_parent = parent
+ repoman = not mysettings.local_config
+ if kwargs["use_binaries"]:
+ portdb = trees[myroot]["bintree"].dbapi
+ pprovideddict = mysettings.pprovideddict
+ myuse = kwargs["myuse"]
+ is_disjunction = mysplit and mysplit[0] == "||"
+ for x in mysplit:
+ if x == "||":
+ newsplit.append(x)
+ continue
+ elif isinstance(x, list):
+ assert x, "Normalization error, empty conjunction found in %s" % (mysplit,)
+ if is_disjunction:
+ assert (
+ x[0] != "||"
+ ), "Normalization error, nested disjunction found in %s" % (mysplit,)
+ else:
+ assert (
+ x[0] == "||"
+ ), "Normalization error, nested conjunction found in %s" % (mysplit,)
+ x_exp = _expand_new_virtuals(
+ x,
+ edebug,
+ mydbapi,
+ mysettings,
+ myroot=myroot,
+ trees=trees,
+ use_mask=use_mask,
+ use_force=use_force,
+ **kwargs
+ )
+ if is_disjunction:
+ if len(x_exp) == 1:
+ x = x_exp[0]
+ if isinstance(x, list):
+ # Due to normalization, a conjunction must not be
+ # nested directly in another conjunction, so this
+ # must be a disjunction.
+ assert (
+ x and x[0] == "||"
+ ), "Normalization error, nested conjunction found in %s" % (
+ x_exp,
+ )
+ newsplit.extend(x[1:])
+ else:
+ newsplit.append(x)
+ else:
+ newsplit.append(x_exp)
+ else:
+ newsplit.extend(x_exp)
+ continue
+
+ if not isinstance(x, Atom):
+ raise ParseError(_("invalid token: '%s'") % x)
+
+ if repoman:
+ x = x._eval_qa_conditionals(use_mask, use_force)
+
++ if 'force-multilib' in mysettings.features:
+ if not repoman and x.cp not in mysettings.get("NO_AUTO_FLAG", "").split():
+ multilib_flags = []
+ for multilib_abis in mysettings.get("MULTILIB_ABIS", '').split():
+ multilib_flag = 'multilib_abi_' + multilib_abis
+ if x.unevaluated_atom.use is None or \
+ x.unevaluated_atom.use.conditional is None or \
+ multilib_flag not in x.unevaluated_atom.use.conditional.enabled:
+ multilib_flags.append(multilib_flag + '?')
+ if multilib_flags:
+ if x.unevaluated_atom.use is None:
+ use_tokens = []
+ else:
+ use_tokens = list(x.unevaluated_atom.use.tokens)
+ if 'abi_x86_64' in use_tokens:
+ use_tokens[use_tokens.index('abi_x86_64')] = 'multilib_abi_amd64'
+ if 'abi_x86_64(-)' in use_tokens:
+ use_tokens[use_tokens.index('abi_x86_64(-)')] = 'multilib_abi_amd64(-)'
+ if 'abi_x86_64(-)?' in use_tokens:
+ use_tokens[use_tokens.index('abi_x86_64(-)?')] = 'multilib_abi_amd64(-)?'
+ if 'abi_x86_32' in use_tokens:
+ use_tokens[use_tokens.index('abi_x86_32')] = 'multilib_abi_x86'
+ if 'abi_x86_32(-)' in use_tokens:
+ use_tokens[use_tokens.index('abi_x86_32(-)')] = 'multilib_abi_x86(-)'
+ if 'abi_x86_32(-)?' in use_tokens:
+ use_tokens[use_tokens.index('abi_x86_32(-)?')] = 'multilib_abi_x86(-)?'
+ use_tokens.extend(multilib_flags)
+ x = Atom(x.unevaluated_atom.without_use +
+ "[%s]" % (",".join(use_tokens)))
+ x = x.evaluate_conditionals(myuse)
+ if not repoman and x.cp in mysettings.get("NO_AUTO_FLAG", "").split():
+ if x.unevaluated_atom.use is None:
+ use_tokens = []
+ else:
+ use_tokens = list(x.unevaluated_atom.use.tokens)
+ if 'abi_x86_64' in use_tokens:
+ use_tokens.remove('abi_x86_64')
+ if 'abi_x86_64(-)' in use_tokens:
+ use_tokens.remove('abi_x86_64(-)')
+ if 'abi_x86_64(-)?' in use_tokens:
+ use_tokens.remove('abi_x86_64(-)?')
+ if 'abi_x86_32' in use_tokens:
+ use_tokens.remove('abi_x86_32')
+ if 'abi_x86_32(-)' in use_tokens:
+ use_tokens.remove('abi_x86_32(-)')
+ if 'abi_x86_32(-)?' in use_tokens:
+ use_tokens.remove('abi_x86_32(-)?')
+ if use_tokens:
+ x = Atom(x.unevaluated_atom.without_use +
+ "[%s]" % (",".join(use_tokens)))
+ else:
+ x = x.unevaluated_atom.without_use
+ x = x.evaluate_conditionals(myuse)
+ mykey = x.cp
+ if not mykey.startswith("virtual/"):
+ newsplit.append(x)
+ if atom_graph is not None:
+ atom_graph.add((x, id(x)), graph_parent)
+ continue
+
- if x.blocker:
- # Virtual blockers are no longer expanded here since
- # the un-expanded virtual atom is more useful for
- # maintaining a cache of blocker atoms.
- newsplit.append(x)
- if atom_graph is not None:
- atom_graph.add((x, id(x)), graph_parent)
- continue
-
- if repoman or not hasattr(portdb, 'match_pkgs') or \
- pkg_use_enabled is None:
- if portdb.cp_list(x.cp):
- newsplit.append(x)
- else:
- a = []
- myvartree = mytrees.get("vartree")
- if myvartree is not None:
- mysettings._populate_treeVirtuals_if_needed(myvartree)
- mychoices = mysettings.getvirtuals().get(mykey, [])
- for y in mychoices:
- a.append(Atom(x.replace(x.cp, y.cp, 1)))
- if not a:
- newsplit.append(x)
- elif is_disjunction:
- newsplit.extend(a)
- elif len(a) == 1:
- newsplit.append(a[0])
- else:
- newsplit.append(['||'] + a)
- continue
-
- pkgs = []
- # Ignore USE deps here, since otherwise we might not
- # get any matches. Choices with correct USE settings
- # will be preferred in dep_zapdeps().
- matches = portdb.match_pkgs(x.without_use)
- # Use descending order to prefer higher versions.
- matches.reverse()
- for pkg in matches:
- # only use new-style matches
- if pkg.cp.startswith("virtual/"):
- pkgs.append(pkg)
-
- mychoices = []
- if not pkgs and not portdb.cp_list(x.cp):
- myvartree = mytrees.get("vartree")
- if myvartree is not None:
- mysettings._populate_treeVirtuals_if_needed(myvartree)
- mychoices = mysettings.getvirtuals().get(mykey, [])
-
- if not (pkgs or mychoices):
- # This one couldn't be expanded as a new-style virtual. Old-style
- # virtuals have already been expanded by dep_virtual, so this one
- # is unavailable and dep_zapdeps will identify it as such. The
- # atom is not eliminated here since it may still represent a
- # dependency that needs to be satisfied.
- newsplit.append(x)
- if atom_graph is not None:
- atom_graph.add((x, id(x)), graph_parent)
- continue
-
- a = []
- for pkg in pkgs:
- virt_atom = '=' + pkg.cpv
- if x.unevaluated_atom.use:
- virt_atom += str(x.unevaluated_atom.use)
- virt_atom = Atom(virt_atom)
- if parent is None:
- if myuse is None:
- virt_atom = virt_atom.evaluate_conditionals(
- mysettings.get("PORTAGE_USE", "").split())
- else:
- virt_atom = virt_atom.evaluate_conditionals(myuse)
- else:
- virt_atom = virt_atom.evaluate_conditionals(
- pkg_use_enabled(parent))
- else:
- virt_atom = Atom(virt_atom)
-
- # Allow the depgraph to map this atom back to the
- # original, in order to avoid distortion in places
- # like display or conflict resolution code.
- virt_atom.__dict__['_orig_atom'] = x
-
- # According to GLEP 37, RDEPEND is the only dependency
- # type that is valid for new-style virtuals. Repoman
- # should enforce this.
- depstring = pkg._metadata['RDEPEND']
- pkg_kwargs = kwargs.copy()
- pkg_kwargs["myuse"] = pkg_use_enabled(pkg)
- if edebug:
- writemsg_level(_("Virtual Parent: %s\n") \
- % (pkg,), noiselevel=-1, level=logging.DEBUG)
- writemsg_level(_("Virtual Depstring: %s\n") \
- % (depstring,), noiselevel=-1, level=logging.DEBUG)
-
- # Set EAPI used for validation in dep_check() recursion.
- mytrees["virt_parent"] = pkg
-
- try:
- mycheck = dep_check(depstring, mydbapi, mysettings,
- myroot=myroot, trees=trees, **pkg_kwargs)
- finally:
- # Restore previous EAPI after recursion.
- if virt_parent is not None:
- mytrees["virt_parent"] = virt_parent
- else:
- del mytrees["virt_parent"]
-
- if not mycheck[0]:
- raise ParseError("%s: %s '%s'" % \
- (pkg, mycheck[1], depstring))
-
- # Replace the original atom "x" with "virt_atom" which refers
- # to the specific version of the virtual whose deps we're
- # expanding. The virt_atom._orig_atom attribute is used
- # by depgraph to map virt_atom back to the original atom.
- # We specifically exclude the original atom "x" from the
- # the expanded output here, since otherwise it could trigger
- # incorrect dep_zapdeps behavior (see bug #597752).
- mycheck[1].append(virt_atom)
- a.append(mycheck[1])
- if atom_graph is not None:
- virt_atom_node = (virt_atom, id(virt_atom))
- atom_graph.add(virt_atom_node, graph_parent)
- atom_graph.add(pkg, virt_atom_node)
- atom_graph.add((x, id(x)), graph_parent)
-
- if not a and mychoices:
- # Check for a virtual package.provided match.
- for y in mychoices:
- new_atom = Atom(x.replace(x.cp, y.cp, 1))
- if match_from_list(new_atom,
- pprovideddict.get(new_atom.cp, [])):
- a.append(new_atom)
- if atom_graph is not None:
- atom_graph.add((new_atom, id(new_atom)), graph_parent)
-
- if not a:
- newsplit.append(x)
- if atom_graph is not None:
- atom_graph.add((x, id(x)), graph_parent)
- elif is_disjunction:
- newsplit.extend(a)
- elif len(a) == 1:
- newsplit.extend(a[0])
- else:
- newsplit.append(['||'] + a)
-
- # For consistency with related functions like use_reduce, always
- # normalize the result to have a top-level conjunction.
- if is_disjunction:
- newsplit = [newsplit]
+ mykey = x.cp
+ if not mykey.startswith("virtual/"):
+ newsplit.append(x)
+ if atom_graph is not None:
+ atom_graph.add((x, id(x)), graph_parent)
+ continue
+
+ if x.blocker:
+ # Virtual blockers are no longer expanded here since
+ # the un-expanded virtual atom is more useful for
+ # maintaining a cache of blocker atoms.
+ newsplit.append(x)
+ if atom_graph is not None:
+ atom_graph.add((x, id(x)), graph_parent)
+ continue
+
+ if repoman or not hasattr(portdb, "match_pkgs") or pkg_use_enabled is None:
+ if portdb.cp_list(x.cp):
+ newsplit.append(x)
+ else:
+ a = []
+ myvartree = mytrees.get("vartree")
+ if myvartree is not None:
+ mysettings._populate_treeVirtuals_if_needed(myvartree)
+ mychoices = mysettings.getvirtuals().get(mykey, [])
+ for y in mychoices:
+ a.append(Atom(x.replace(x.cp, y.cp, 1)))
+ if not a:
+ newsplit.append(x)
+ elif is_disjunction:
+ newsplit.extend(a)
+ elif len(a) == 1:
+ newsplit.append(a[0])
+ else:
+ newsplit.append(["||"] + a)
+ continue
+
+ pkgs = []
+ # Ignore USE deps here, since otherwise we might not
+ # get any matches. Choices with correct USE settings
+ # will be preferred in dep_zapdeps().
+ matches = portdb.match_pkgs(x.without_use)
+ # Use descending order to prefer higher versions.
+ matches.reverse()
+ for pkg in matches:
+ # only use new-style matches
+ if pkg.cp.startswith("virtual/"):
+ pkgs.append(pkg)
+
+ mychoices = []
+ if not pkgs and not portdb.cp_list(x.cp):
+ myvartree = mytrees.get("vartree")
+ if myvartree is not None:
+ mysettings._populate_treeVirtuals_if_needed(myvartree)
+ mychoices = mysettings.getvirtuals().get(mykey, [])
+
+ if not (pkgs or mychoices):
+ # This one couldn't be expanded as a new-style virtual. Old-style
+ # virtuals have already been expanded by dep_virtual, so this one
+ # is unavailable and dep_zapdeps will identify it as such. The
+ # atom is not eliminated here since it may still represent a
+ # dependency that needs to be satisfied.
+ newsplit.append(x)
+ if atom_graph is not None:
+ atom_graph.add((x, id(x)), graph_parent)
+ continue
+
+ a = []
+ for pkg in pkgs:
+ virt_atom = "=" + pkg.cpv
+ if x.unevaluated_atom.use:
+ virt_atom += str(x.unevaluated_atom.use)
+ virt_atom = Atom(virt_atom)
+ if parent is None:
+ if myuse is None:
+ virt_atom = virt_atom.evaluate_conditionals(
+ mysettings.get("PORTAGE_USE", "").split()
+ )
+ else:
+ virt_atom = virt_atom.evaluate_conditionals(myuse)
+ else:
+ virt_atom = virt_atom.evaluate_conditionals(pkg_use_enabled(parent))
+ else:
+ virt_atom = Atom(virt_atom)
+
+ # Allow the depgraph to map this atom back to the
+ # original, in order to avoid distortion in places
+ # like display or conflict resolution code.
+ virt_atom.__dict__["_orig_atom"] = x
+
+ # According to GLEP 37, RDEPEND is the only dependency
+ # type that is valid for new-style virtuals. Repoman
+ # should enforce this.
+ depstring = pkg._metadata["RDEPEND"]
+ pkg_kwargs = kwargs.copy()
+ pkg_kwargs["myuse"] = pkg_use_enabled(pkg)
+ if edebug:
+ writemsg_level(
+ _("Virtual Parent: %s\n") % (pkg,),
+ noiselevel=-1,
+ level=logging.DEBUG,
+ )
+ writemsg_level(
+ _("Virtual Depstring: %s\n") % (depstring,),
+ noiselevel=-1,
+ level=logging.DEBUG,
+ )
+
+ # Set EAPI used for validation in dep_check() recursion.
+ mytrees["virt_parent"] = pkg
+
+ try:
+ mycheck = dep_check(
+ depstring,
+ mydbapi,
+ mysettings,
+ myroot=myroot,
+ trees=trees,
+ **pkg_kwargs
+ )
+ finally:
+ # Restore previous EAPI after recursion.
+ if virt_parent is not None:
+ mytrees["virt_parent"] = virt_parent
+ else:
+ del mytrees["virt_parent"]
+
+ if not mycheck[0]:
+ raise ParseError("%s: %s '%s'" % (pkg, mycheck[1], depstring))
+
+ # Replace the original atom "x" with "virt_atom" which refers
+ # to the specific version of the virtual whose deps we're
+ # expanding. The virt_atom._orig_atom attribute is used
+ # by depgraph to map virt_atom back to the original atom.
+ # We specifically exclude the original atom "x" from the
+ # the expanded output here, since otherwise it could trigger
+ # incorrect dep_zapdeps behavior (see bug #597752).
+ mycheck[1].append(virt_atom)
+ a.append(mycheck[1])
+ if atom_graph is not None:
+ virt_atom_node = (virt_atom, id(virt_atom))
+ atom_graph.add(virt_atom_node, graph_parent)
+ atom_graph.add(pkg, virt_atom_node)
+ atom_graph.add((x, id(x)), graph_parent)
+
+ if not a and mychoices:
+ # Check for a virtual package.provided match.
+ for y in mychoices:
+ new_atom = Atom(x.replace(x.cp, y.cp, 1))
+ if match_from_list(new_atom, pprovideddict.get(new_atom.cp, [])):
+ a.append(new_atom)
+ if atom_graph is not None:
+ atom_graph.add((new_atom, id(new_atom)), graph_parent)
+
+ if not a:
+ newsplit.append(x)
+ if atom_graph is not None:
+ atom_graph.add((x, id(x)), graph_parent)
+ elif is_disjunction:
+ newsplit.extend(a)
+ elif len(a) == 1:
+ newsplit.extend(a[0])
+ else:
+ newsplit.append(["||"] + a)
+
+ # For consistency with related functions like use_reduce, always
+ # normalize the result to have a top-level conjunction.
+ if is_disjunction:
+ newsplit = [newsplit]
+
+ return newsplit
- return newsplit
def dep_eval(deplist):
- if not deplist:
- return 1
- if deplist[0]=="||":
- #or list; we just need one "1"
- for x in deplist[1:]:
- if isinstance(x, list):
- if dep_eval(x)==1:
- return 1
- elif x==1:
- return 1
- #XXX: unless there's no available atoms in the list
- #in which case we need to assume that everything is
- #okay as some ebuilds are relying on an old bug.
- if len(deplist) == 1:
- return 1
- return 0
- for x in deplist:
- if isinstance(x, list):
- if dep_eval(x)==0:
- return 0
- elif x==0 or x==2:
- return 0
- return 1
+ if not deplist:
+ return 1
+ if deplist[0] == "||":
+ # or list; we just need one "1"
+ for x in deplist[1:]:
+ if isinstance(x, list):
+ if dep_eval(x) == 1:
+ return 1
+ elif x == 1:
+ return 1
+ # XXX: unless there's no available atoms in the list
+ # in which case we need to assume that everything is
+ # okay as some ebuilds are relying on an old bug.
+ if len(deplist) == 1:
+ return 1
+ return 0
+ for x in deplist:
+ if isinstance(x, list):
+ if dep_eval(x) == 0:
+ return 0
+ elif x == 0 or x == 2:
+ return 0
+ return 1
- class _dep_choice(SlotObject):
- __slots__ = ('atoms', 'slot_map', 'cp_map', 'all_available',
- 'all_installed_slots', 'new_slot_count', 'want_update', 'all_in_graph')
-
- def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None,
- minimize_slots=False):
- """
- Takes an unreduced and reduced deplist and removes satisfied dependencies.
- Returned deplist contains steps that must be taken to satisfy dependencies.
- """
- if trees is None:
- trees = portage.db
- writemsg("ZapDeps -- %s\n" % (use_binaries), 2)
- if not reduced or unreduced == ["||"] or dep_eval(reduced):
- return []
-
- if unreduced[0] != "||":
- unresolved = []
- for x, satisfied in zip(unreduced, reduced):
- if isinstance(x, list):
- unresolved += dep_zapdeps(x, satisfied, myroot,
- use_binaries=use_binaries, trees=trees,
- minimize_slots=minimize_slots)
- elif not satisfied:
- unresolved.append(x)
- return unresolved
-
- # We're at a ( || atom ... ) type level and need to make a choice
- deps = unreduced[1:]
- satisfieds = reduced[1:]
-
- # Our preference order is for an the first item that:
- # a) contains all unmasked packages with the same key as installed packages
- # b) contains all unmasked packages
- # c) contains masked installed packages
- # d) is the first item
-
- preferred_in_graph = []
- preferred_installed = preferred_in_graph
- preferred_any_slot = preferred_in_graph
- preferred_non_installed = []
- unsat_use_in_graph = []
- unsat_use_installed = []
- unsat_use_non_installed = []
- other_installed = []
- other_installed_some = []
- other_installed_any_slot = []
- other = []
-
- # unsat_use_* must come after preferred_non_installed
- # for correct ordering in cases like || ( foo[a] foo[b] ).
- choice_bins = (
- preferred_in_graph,
- preferred_non_installed,
- unsat_use_in_graph,
- unsat_use_installed,
- unsat_use_non_installed,
- other_installed,
- other_installed_some,
- other_installed_any_slot,
- other,
- )
-
- # Alias the trees we'll be checking availability against
- parent = trees[myroot].get("parent")
- virt_parent = trees[myroot].get("virt_parent")
- priority = trees[myroot].get("priority")
- graph_db = trees[myroot].get("graph_db")
- graph = trees[myroot].get("graph")
- pkg_use_enabled = trees[myroot].get("pkg_use_enabled")
- graph_interface = trees[myroot].get("graph_interface")
- downgrade_probe = trees[myroot].get("downgrade_probe")
- circular_dependency = trees[myroot].get("circular_dependency")
- vardb = None
- if "vartree" in trees[myroot]:
- vardb = trees[myroot]["vartree"].dbapi
- if use_binaries:
- mydbapi = trees[myroot]["bintree"].dbapi
- else:
- mydbapi = trees[myroot]["porttree"].dbapi
-
- try:
- mydbapi_match_pkgs = mydbapi.match_pkgs
- except AttributeError:
- def mydbapi_match_pkgs(atom):
- return [mydbapi._pkg_str(cpv, atom.repo)
- for cpv in mydbapi.match(atom)]
-
- # Sort the deps into installed, not installed but already
- # in the graph and other, not installed and not in the graph
- # and other, with values of [[required_atom], availablility]
- for x, satisfied in zip(deps, satisfieds):
- if isinstance(x, list):
- atoms = dep_zapdeps(x, satisfied, myroot,
- use_binaries=use_binaries, trees=trees,
- minimize_slots=minimize_slots)
- else:
- atoms = [x]
- if vardb is None:
- # When called by repoman, we can simply return the first choice
- # because dep_eval() handles preference selection.
- return atoms
-
- all_available = True
- all_use_satisfied = True
- all_use_unmasked = True
- conflict_downgrade = False
- installed_downgrade = False
- slot_atoms = collections.defaultdict(list)
- slot_map = {}
- cp_map = {}
- for atom in atoms:
- if atom.blocker:
- continue
-
- # It's not a downgrade if parent is replacing child.
- replacing = (parent and graph_interface and
- graph_interface.will_replace_child(parent, myroot, atom))
- # Ignore USE dependencies here since we don't want USE
- # settings to adversely affect || preference evaluation.
- avail_pkg = mydbapi_match_pkgs(atom.without_use)
- if not avail_pkg and replacing:
- avail_pkg = [replacing]
- if avail_pkg:
- avail_pkg = avail_pkg[-1] # highest (ascending order)
- avail_slot = Atom("%s:%s" % (atom.cp, avail_pkg.slot))
- if not avail_pkg:
- all_available = False
- all_use_satisfied = False
- break
-
- if not replacing and graph_db is not None and downgrade_probe is not None:
- slot_matches = graph_db.match_pkgs(avail_slot)
- if (len(slot_matches) > 1 and
- avail_pkg < slot_matches[-1] and
- not downgrade_probe(avail_pkg)):
- # If a downgrade is not desirable, then avoid a
- # choice that pulls in a lower version involved
- # in a slot conflict (bug #531656).
- conflict_downgrade = True
-
- if atom.use:
- avail_pkg_use = mydbapi_match_pkgs(atom)
- if not avail_pkg_use:
- all_use_satisfied = False
-
- if pkg_use_enabled is not None:
- # Check which USE flags cause the match to fail,
- # so we can prioritize choices that do not
- # require changes to use.mask or use.force
- # (see bug #515584).
- violated_atom = atom.violated_conditionals(
- pkg_use_enabled(avail_pkg),
- avail_pkg.iuse.is_valid_flag)
-
- # Note that violated_atom.use can be None here,
- # since evaluation can collapse conditional USE
- # deps that cause the match to fail due to
- # missing IUSE (match uses atom.unevaluated_atom
- # to detect such missing IUSE).
- if violated_atom.use is not None:
- for flag in violated_atom.use.enabled:
- if flag in avail_pkg.use.mask:
- all_use_unmasked = False
- break
- else:
- for flag in violated_atom.use.disabled:
- if flag in avail_pkg.use.force and \
- flag not in avail_pkg.use.mask:
- all_use_unmasked = False
- break
- else:
- # highest (ascending order)
- avail_pkg_use = avail_pkg_use[-1]
- if avail_pkg_use != avail_pkg:
- avail_pkg = avail_pkg_use
- avail_slot = Atom("%s:%s" % (atom.cp, avail_pkg.slot))
-
- if not replacing and downgrade_probe is not None and graph is not None:
- highest_in_slot = mydbapi_match_pkgs(avail_slot)
- highest_in_slot = (highest_in_slot[-1]
- if highest_in_slot else None)
- if (avail_pkg and highest_in_slot and
- avail_pkg < highest_in_slot and
- not downgrade_probe(avail_pkg) and
- (highest_in_slot.installed or
- highest_in_slot in graph)):
- installed_downgrade = True
-
- slot_map[avail_slot] = avail_pkg
- slot_atoms[avail_slot].append(atom)
- highest_cpv = cp_map.get(avail_pkg.cp)
- all_match_current = None
- all_match_previous = None
- if (highest_cpv is not None and
- highest_cpv.slot == avail_pkg.slot):
- # If possible, make the package selection internally
- # consistent by choosing a package that satisfies all
- # atoms which match a package in the same slot. Later on,
- # the package version chosen here is used in the
- # has_upgrade/has_downgrade logic to prefer choices with
- # upgrades, and a package choice that is not internally
- # consistent will lead the has_upgrade/has_downgrade logic
- # to produce invalid results (see bug 600346).
- all_match_current = all(a.match(avail_pkg)
- for a in slot_atoms[avail_slot])
- all_match_previous = all(a.match(highest_cpv)
- for a in slot_atoms[avail_slot])
- if all_match_previous and not all_match_current:
- continue
-
- current_higher = (highest_cpv is None or
- vercmp(avail_pkg.version, highest_cpv.version) > 0)
-
- if current_higher or (all_match_current and not all_match_previous):
- cp_map[avail_pkg.cp] = avail_pkg
-
- want_update = False
- if graph_interface is None or graph_interface.removal_action:
- new_slot_count = len(slot_map)
- else:
- new_slot_count = 0
- for slot_atom, avail_pkg in slot_map.items():
- if parent is not None and graph_interface.want_update_pkg(parent, avail_pkg):
- want_update = True
- if (not slot_atom.cp.startswith("virtual/")
- and not graph_db.match_pkgs(slot_atom)):
- new_slot_count += 1
-
- this_choice = _dep_choice(atoms=atoms, slot_map=slot_map,
- cp_map=cp_map, all_available=all_available,
- all_installed_slots=False,
- new_slot_count=new_slot_count,
- all_in_graph=False,
- want_update=want_update)
- if all_available:
- # The "all installed" criterion is not version or slot specific.
- # If any version of a package is already in the graph then we
- # assume that it is preferred over other possible packages choices.
- all_installed = True
- for atom in set(Atom(atom.cp) for atom in atoms \
- if not atom.blocker):
- # New-style virtuals have zero cost to install.
- if not vardb.match(atom) and not atom.startswith("virtual/"):
- all_installed = False
- break
- all_installed_slots = False
- if all_installed:
- all_installed_slots = True
- for slot_atom in slot_map:
- # New-style virtuals have zero cost to install.
- if not vardb.match(slot_atom) and \
- not slot_atom.startswith("virtual/"):
- all_installed_slots = False
- break
- this_choice.all_installed_slots = all_installed_slots
- if graph_db is None:
- if all_use_satisfied:
- if all_installed:
- if all_installed_slots:
- preferred_installed.append(this_choice)
- else:
- preferred_any_slot.append(this_choice)
- else:
- preferred_non_installed.append(this_choice)
- else:
- if not all_use_unmasked:
- other.append(this_choice)
- elif all_installed_slots:
- unsat_use_installed.append(this_choice)
- else:
- unsat_use_non_installed.append(this_choice)
- elif conflict_downgrade or installed_downgrade:
- other.append(this_choice)
- else:
- all_in_graph = True
- for atom in atoms:
- # New-style virtuals have zero cost to install.
- if atom.blocker or atom.cp.startswith("virtual/"):
- continue
- # We check if the matched package has actually been
- # added to the digraph, in order to distinguish between
- # those packages and installed packages that may need
- # to be uninstalled in order to resolve blockers.
- if not any(pkg in graph for pkg in
- graph_db.match_pkgs(atom)):
- all_in_graph = False
- break
- this_choice.all_in_graph = all_in_graph
-
- circular_atom = None
- if parent and parent.onlydeps:
- # Check if the atom would result in a direct circular
- # dependency and avoid that for --onlydeps arguments
- # since it can defeat the purpose of --onlydeps.
- # This check should only be used for --onlydeps
- # arguments, since it can interfere with circular
- # dependency backtracking choices, causing the test
- # case for bug 756961 to fail.
- cpv_slot_list = [parent]
- for atom in atoms:
- if atom.blocker:
- continue
- if vardb.match(atom):
- # If the atom is satisfied by an installed
- # version then it's not a circular dep.
- continue
- if atom.cp != parent.cp:
- continue
- if match_from_list(atom, cpv_slot_list):
- circular_atom = atom
- break
- if circular_atom is None and circular_dependency is not None:
- for circular_child in itertools.chain(
- circular_dependency.get(parent, []),
- circular_dependency.get(virt_parent, [])):
- for atom in atoms:
- if not atom.blocker and atom.match(circular_child):
- circular_atom = atom
- break
- if circular_atom is not None:
- break
-
- if circular_atom is not None:
- other.append(this_choice)
- else:
- if all_use_satisfied:
- if all_in_graph:
- preferred_in_graph.append(this_choice)
- elif all_installed:
- if all_installed_slots:
- preferred_installed.append(this_choice)
- else:
- preferred_any_slot.append(this_choice)
- else:
- preferred_non_installed.append(this_choice)
- else:
- if not all_use_unmasked:
- other.append(this_choice)
- elif all_in_graph:
- unsat_use_in_graph.append(this_choice)
- elif all_installed_slots:
- unsat_use_installed.append(this_choice)
- else:
- unsat_use_non_installed.append(this_choice)
- else:
- all_installed = True
- some_installed = False
- for atom in atoms:
- if not atom.blocker:
- if vardb.match(atom):
- some_installed = True
- else:
- all_installed = False
-
- if all_installed:
- this_choice.all_installed_slots = True
- other_installed.append(this_choice)
- elif some_installed:
- other_installed_some.append(this_choice)
-
- # Use Atom(atom.cp) for a somewhat "fuzzy" match, since
- # the whole atom may be too specific. For example, see
- # bug #522652, where using the whole atom leads to an
- # unsatisfiable choice.
- elif any(vardb.match(Atom(atom.cp)) for atom in atoms
- if not atom.blocker):
- other_installed_any_slot.append(this_choice)
- else:
- other.append(this_choice)
-
- # Prefer choices which contain upgrades to higher slots. This helps
- # for deps such as || ( foo:1 foo:2 ), where we want to prefer the
- # atom which matches the higher version rather than the atom furthest
- # to the left. Sorting is done separately for each of choice_bins, so
- # as not to interfere with the ordering of the bins. Because of the
- # bin separation, the main function of this code is to allow
- # --depclean to remove old slots (rather than to pull in new slots).
- for choices in choice_bins:
- if len(choices) < 2:
- continue
- if minimize_slots:
- # Prefer choices having fewer new slots. When used with DNF form,
- # this can eliminate unecessary packages that depclean would
- # ultimately eliminate (see bug 632026). Only use this behavior
- # when deemed necessary by the caller, since this will discard the
- # order specified in the ebuild, and the preferences specified
- # there can serve as a crucial sources of guidance (see bug 645002).
-
- # NOTE: Under some conditions, new_slot_count value may have some
- # variance from one calculation to the next because it depends on
- # the order that packages are added to the graph. This variance can
- # contribute to outcomes that appear to be random. Meanwhile,
- # the order specified in the ebuild is without variance, so it
- # does not have this problem.
- choices.sort(key=operator.attrgetter('new_slot_count'))
-
- for choice_1 in choices[1:]:
- cps = set(choice_1.cp_map)
- for choice_2 in choices:
- if choice_1 is choice_2:
- # choice_1 will not be promoted, so move on
- break
- if (
- # Prefer choices where all_installed_slots is True, except
- # in cases where we want to upgrade to a new slot as in
- # bug 706278. Don't compare new_slot_count here since that
- # would aggressively override the preference order defined
- # in the ebuild, breaking the test case for bug 645002.
- (choice_1.all_installed_slots and
- not choice_2.all_installed_slots and
- not choice_2.want_update)
- ):
- # promote choice_1 in front of choice_2
- choices.remove(choice_1)
- index_2 = choices.index(choice_2)
- choices.insert(index_2, choice_1)
- break
-
- intersecting_cps = cps.intersection(choice_2.cp_map)
- has_upgrade = False
- has_downgrade = False
- for cp in intersecting_cps:
- version_1 = choice_1.cp_map[cp]
- version_2 = choice_2.cp_map[cp]
- difference = vercmp(version_1.version, version_2.version)
- if difference != 0:
- if difference > 0:
- has_upgrade = True
- else:
- has_downgrade = True
-
- if (
- # Prefer upgrades.
- (has_upgrade and not has_downgrade)
-
- # Prefer choices where all packages have been pulled into
- # the graph, except for choices that eliminate upgrades.
- or (choice_1.all_in_graph and not choice_2.all_in_graph and
- not (has_downgrade and not has_upgrade))
- ):
- # promote choice_1 in front of choice_2
- choices.remove(choice_1)
- index_2 = choices.index(choice_2)
- choices.insert(index_2, choice_1)
- break
-
- for allow_masked in (False, True):
- for choices in choice_bins:
- for choice in choices:
- if choice.all_available or allow_masked:
- return choice.atoms
-
- assert False # This point should not be reachable
-
- def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None,
- use_cache=1, use_binaries=0, myroot=None, trees=None):
- """
- Takes a depend string, parses it, and selects atoms.
- The myroot parameter is unused (use mysettings['EROOT'] instead).
- """
- myroot = mysettings['EROOT']
- edebug = mysettings.get("PORTAGE_DEBUG", None) == "1"
- #check_config_instance(mysettings)
- if trees is None:
- trees = globals()["db"]
- if use=="yes":
- if myuse is None:
- #default behavior
- myusesplit = mysettings["PORTAGE_USE"].split()
- else:
- myusesplit = myuse
- # We've been given useflags to use.
- #print "USE FLAGS PASSED IN."
- #print myuse
- #if "bindist" in myusesplit:
- # print "BINDIST is set!"
- #else:
- # print "BINDIST NOT set."
- else:
- #we are being run by autouse(), don't consult USE vars yet.
- # WE ALSO CANNOT USE SETTINGS
- myusesplit=[]
-
- mymasks = set()
- useforce = set()
- if use == "all":
- # This is only for repoman, in order to constrain the use_reduce
- # matchall behavior to account for profile use.mask/force. The
- # ARCH/archlist code here may be redundant, since the profile
- # really should be handling ARCH masking/forcing itself.
- arch = mysettings.get("ARCH")
- mymasks.update(mysettings.usemask)
- mymasks.update(mysettings.archlist())
- if arch:
- mymasks.discard(arch)
- useforce.add(arch)
- useforce.update(mysettings.useforce)
- useforce.difference_update(mymasks)
-
- # eapi code borrowed from _expand_new_virtuals()
- mytrees = trees[myroot]
- parent = mytrees.get("parent")
- virt_parent = mytrees.get("virt_parent")
- current_parent = None
- eapi = None
- if parent is not None:
- if virt_parent is not None:
- current_parent = virt_parent
- else:
- current_parent = parent
-
- if current_parent is not None:
- # Don't pass the eapi argument to use_reduce() for installed packages
- # since previous validation will have already marked them as invalid
- # when necessary and now we're more interested in evaluating
- # dependencies so that things like --depclean work as well as possible
- # in spite of partial invalidity.
- if not current_parent.installed:
- eapi = current_parent.eapi
-
- if isinstance(depstring, list):
- mysplit = depstring
- else:
- try:
- mysplit = use_reduce(depstring, uselist=myusesplit,
- masklist=mymasks, matchall=(use=="all"), excludeall=useforce,
- opconvert=True, token_class=Atom, eapi=eapi)
- except InvalidDependString as e:
- return [0, "%s" % (e,)]
-
- if mysplit == []:
- #dependencies were reduced to nothing
- return [1,[]]
-
- # Recursively expand new-style virtuals so as to
- # collapse one or more levels of indirection.
- try:
- mysplit = _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings,
- use=use, mode=mode, myuse=myuse,
- use_force=useforce, use_mask=mymasks, use_cache=use_cache,
- use_binaries=use_binaries, myroot=myroot, trees=trees)
- except ParseError as e:
- return [0, "%s" % (e,)]
-
- dnf = False
- if mysettings.local_config: # if not repoman
- orig_split = mysplit
- mysplit = _overlap_dnf(mysplit)
- dnf = mysplit is not orig_split
-
- mysplit2 = dep_wordreduce(mysplit,
- mysettings, mydbapi, mode, use_cache=use_cache)
- if mysplit2 is None:
- return [0, _("Invalid token")]
-
- writemsg("\n\n\n", 1)
- writemsg("mysplit: %s\n" % (mysplit), 1)
- writemsg("mysplit2: %s\n" % (mysplit2), 1)
-
- selected_atoms = dep_zapdeps(mysplit, mysplit2, myroot,
- use_binaries=use_binaries, trees=trees, minimize_slots=dnf)
-
- return [1, selected_atoms]
+ class _dep_choice(SlotObject):
+ __slots__ = (
+ "atoms",
+ "slot_map",
+ "cp_map",
+ "all_available",
+ "all_installed_slots",
+ "new_slot_count",
+ "want_update",
+ "all_in_graph",
+ )
+
+
+ def dep_zapdeps(
+ unreduced, reduced, myroot, use_binaries=0, trees=None, minimize_slots=False
+ ):
+ """
+ Takes an unreduced and reduced deplist and removes satisfied dependencies.
+ Returned deplist contains steps that must be taken to satisfy dependencies.
+ """
+ if trees is None:
+ trees = portage.db
+ writemsg("ZapDeps -- %s\n" % (use_binaries), 2)
+ if not reduced or unreduced == ["||"] or dep_eval(reduced):
+ return []
+
+ if unreduced[0] != "||":
+ unresolved = []
+ for x, satisfied in zip(unreduced, reduced):
+ if isinstance(x, list):
+ unresolved += dep_zapdeps(
+ x,
+ satisfied,
+ myroot,
+ use_binaries=use_binaries,
+ trees=trees,
+ minimize_slots=minimize_slots,
+ )
+ elif not satisfied:
+ unresolved.append(x)
+ return unresolved
+
+ # We're at a ( || atom ... ) type level and need to make a choice
+ deps = unreduced[1:]
+ satisfieds = reduced[1:]
+
+ # Our preference order is for an the first item that:
+ # a) contains all unmasked packages with the same key as installed packages
+ # b) contains all unmasked packages
+ # c) contains masked installed packages
+ # d) is the first item
+
+ preferred_in_graph = []
+ preferred_installed = preferred_in_graph
+ preferred_any_slot = preferred_in_graph
+ preferred_non_installed = []
+ unsat_use_in_graph = []
+ unsat_use_installed = []
+ unsat_use_non_installed = []
+ other_installed = []
+ other_installed_some = []
+ other_installed_any_slot = []
+ other = []
+
+ # unsat_use_* must come after preferred_non_installed
+ # for correct ordering in cases like || ( foo[a] foo[b] ).
+ choice_bins = (
+ preferred_in_graph,
+ preferred_non_installed,
+ unsat_use_in_graph,
+ unsat_use_installed,
+ unsat_use_non_installed,
+ other_installed,
+ other_installed_some,
+ other_installed_any_slot,
+ other,
+ )
+
+ # Alias the trees we'll be checking availability against
+ parent = trees[myroot].get("parent")
+ virt_parent = trees[myroot].get("virt_parent")
+ priority = trees[myroot].get("priority")
+ graph_db = trees[myroot].get("graph_db")
+ graph = trees[myroot].get("graph")
+ pkg_use_enabled = trees[myroot].get("pkg_use_enabled")
+ graph_interface = trees[myroot].get("graph_interface")
+ downgrade_probe = trees[myroot].get("downgrade_probe")
+ circular_dependency = trees[myroot].get("circular_dependency")
+ vardb = None
+ if "vartree" in trees[myroot]:
+ vardb = trees[myroot]["vartree"].dbapi
+ if use_binaries:
+ mydbapi = trees[myroot]["bintree"].dbapi
+ else:
+ mydbapi = trees[myroot]["porttree"].dbapi
+
+ try:
+ mydbapi_match_pkgs = mydbapi.match_pkgs
+ except AttributeError:
+
+ def mydbapi_match_pkgs(atom):
+ return [mydbapi._pkg_str(cpv, atom.repo) for cpv in mydbapi.match(atom)]
+
+ # Sort the deps into installed, not installed but already
+ # in the graph and other, not installed and not in the graph
+ # and other, with values of [[required_atom], availablility]
+ for x, satisfied in zip(deps, satisfieds):
+ if isinstance(x, list):
+ atoms = dep_zapdeps(
+ x,
+ satisfied,
+ myroot,
+ use_binaries=use_binaries,
+ trees=trees,
+ minimize_slots=minimize_slots,
+ )
+ else:
+ atoms = [x]
+ if vardb is None:
+ # When called by repoman, we can simply return the first choice
+ # because dep_eval() handles preference selection.
+ return atoms
+
+ all_available = True
+ all_use_satisfied = True
+ all_use_unmasked = True
+ conflict_downgrade = False
+ installed_downgrade = False
+ slot_atoms = collections.defaultdict(list)
+ slot_map = {}
+ cp_map = {}
+ for atom in atoms:
+ if atom.blocker:
+ continue
+
+ # It's not a downgrade if parent is replacing child.
+ replacing = (
+ parent
+ and graph_interface
+ and graph_interface.will_replace_child(parent, myroot, atom)
+ )
+ # Ignore USE dependencies here since we don't want USE
+ # settings to adversely affect || preference evaluation.
+ avail_pkg = mydbapi_match_pkgs(atom.without_use)
+ if not avail_pkg and replacing:
+ avail_pkg = [replacing]
+ if avail_pkg:
+ avail_pkg = avail_pkg[-1] # highest (ascending order)
+ avail_slot = Atom("%s:%s" % (atom.cp, avail_pkg.slot))
+ if not avail_pkg:
+ all_available = False
+ all_use_satisfied = False
+ break
+
+ if not replacing and graph_db is not None and downgrade_probe is not None:
+ slot_matches = graph_db.match_pkgs(avail_slot)
+ if (
+ len(slot_matches) > 1
+ and avail_pkg < slot_matches[-1]
+ and not downgrade_probe(avail_pkg)
+ ):
+ # If a downgrade is not desirable, then avoid a
+ # choice that pulls in a lower version involved
+ # in a slot conflict (bug #531656).
+ conflict_downgrade = True
+
+ if atom.use:
+ avail_pkg_use = mydbapi_match_pkgs(atom)
+ if not avail_pkg_use:
+ all_use_satisfied = False
+
+ if pkg_use_enabled is not None:
+ # Check which USE flags cause the match to fail,
+ # so we can prioritize choices that do not
+ # require changes to use.mask or use.force
+ # (see bug #515584).
+ violated_atom = atom.violated_conditionals(
+ pkg_use_enabled(avail_pkg), avail_pkg.iuse.is_valid_flag
+ )
+
+ # Note that violated_atom.use can be None here,
+ # since evaluation can collapse conditional USE
+ # deps that cause the match to fail due to
+ # missing IUSE (match uses atom.unevaluated_atom
+ # to detect such missing IUSE).
+ if violated_atom.use is not None:
+ for flag in violated_atom.use.enabled:
+ if flag in avail_pkg.use.mask:
+ all_use_unmasked = False
+ break
+ else:
+ for flag in violated_atom.use.disabled:
+ if (
+ flag in avail_pkg.use.force
+ and flag not in avail_pkg.use.mask
+ ):
+ all_use_unmasked = False
+ break
+ else:
+ # highest (ascending order)
+ avail_pkg_use = avail_pkg_use[-1]
+ if avail_pkg_use != avail_pkg:
+ avail_pkg = avail_pkg_use
+ avail_slot = Atom("%s:%s" % (atom.cp, avail_pkg.slot))
+
+ if not replacing and downgrade_probe is not None and graph is not None:
+ highest_in_slot = mydbapi_match_pkgs(avail_slot)
+ highest_in_slot = highest_in_slot[-1] if highest_in_slot else None
+ if (
+ avail_pkg
+ and highest_in_slot
+ and avail_pkg < highest_in_slot
+ and not downgrade_probe(avail_pkg)
+ and (highest_in_slot.installed or highest_in_slot in graph)
+ ):
+ installed_downgrade = True
+
+ slot_map[avail_slot] = avail_pkg
+ slot_atoms[avail_slot].append(atom)
+ highest_cpv = cp_map.get(avail_pkg.cp)
+ all_match_current = None
+ all_match_previous = None
+ if highest_cpv is not None and highest_cpv.slot == avail_pkg.slot:
+ # If possible, make the package selection internally
+ # consistent by choosing a package that satisfies all
+ # atoms which match a package in the same slot. Later on,
+ # the package version chosen here is used in the
+ # has_upgrade/has_downgrade logic to prefer choices with
+ # upgrades, and a package choice that is not internally
+ # consistent will lead the has_upgrade/has_downgrade logic
+ # to produce invalid results (see bug 600346).
+ all_match_current = all(
+ a.match(avail_pkg) for a in slot_atoms[avail_slot]
+ )
+ all_match_previous = all(
+ a.match(highest_cpv) for a in slot_atoms[avail_slot]
+ )
+ if all_match_previous and not all_match_current:
+ continue
+
+ current_higher = (
+ highest_cpv is None
+ or vercmp(avail_pkg.version, highest_cpv.version) > 0
+ )
+
+ if current_higher or (all_match_current and not all_match_previous):
+ cp_map[avail_pkg.cp] = avail_pkg
+
+ want_update = False
+ if graph_interface is None or graph_interface.removal_action:
+ new_slot_count = len(slot_map)
+ else:
+ new_slot_count = 0
+ for slot_atom, avail_pkg in slot_map.items():
+ if parent is not None and graph_interface.want_update_pkg(
+ parent, avail_pkg
+ ):
+ want_update = True
+ if not slot_atom.cp.startswith("virtual/") and not graph_db.match_pkgs(
+ slot_atom
+ ):
+ new_slot_count += 1
+
+ this_choice = _dep_choice(
+ atoms=atoms,
+ slot_map=slot_map,
+ cp_map=cp_map,
+ all_available=all_available,
+ all_installed_slots=False,
+ new_slot_count=new_slot_count,
+ all_in_graph=False,
+ want_update=want_update,
+ )
+ if all_available:
+ # The "all installed" criterion is not version or slot specific.
+ # If any version of a package is already in the graph then we
+ # assume that it is preferred over other possible packages choices.
+ all_installed = True
+ for atom in set(Atom(atom.cp) for atom in atoms if not atom.blocker):
+ # New-style virtuals have zero cost to install.
+ if not vardb.match(atom) and not atom.startswith("virtual/"):
+ all_installed = False
+ break
+ all_installed_slots = False
+ if all_installed:
+ all_installed_slots = True
+ for slot_atom in slot_map:
+ # New-style virtuals have zero cost to install.
+ if not vardb.match(slot_atom) and not slot_atom.startswith(
+ "virtual/"
+ ):
+ all_installed_slots = False
+ break
+ this_choice.all_installed_slots = all_installed_slots
+ if graph_db is None:
+ if all_use_satisfied:
+ if all_installed:
+ if all_installed_slots:
+ preferred_installed.append(this_choice)
+ else:
+ preferred_any_slot.append(this_choice)
+ else:
+ preferred_non_installed.append(this_choice)
+ else:
+ if not all_use_unmasked:
+ other.append(this_choice)
+ elif all_installed_slots:
+ unsat_use_installed.append(this_choice)
+ else:
+ unsat_use_non_installed.append(this_choice)
+ elif conflict_downgrade or installed_downgrade:
+ other.append(this_choice)
+ else:
+ all_in_graph = True
+ for atom in atoms:
+ # New-style virtuals have zero cost to install.
+ if atom.blocker or atom.cp.startswith("virtual/"):
+ continue
+ # We check if the matched package has actually been
+ # added to the digraph, in order to distinguish between
+ # those packages and installed packages that may need
+ # to be uninstalled in order to resolve blockers.
+ if not any(pkg in graph for pkg in graph_db.match_pkgs(atom)):
+ all_in_graph = False
+ break
+ this_choice.all_in_graph = all_in_graph
+
+ circular_atom = None
+ if parent and parent.onlydeps:
+ # Check if the atom would result in a direct circular
+ # dependency and avoid that for --onlydeps arguments
+ # since it can defeat the purpose of --onlydeps.
+ # This check should only be used for --onlydeps
+ # arguments, since it can interfere with circular
+ # dependency backtracking choices, causing the test
+ # case for bug 756961 to fail.
+ cpv_slot_list = [parent]
+ for atom in atoms:
+ if atom.blocker:
+ continue
+ if vardb.match(atom):
+ # If the atom is satisfied by an installed
+ # version then it's not a circular dep.
+ continue
+ if atom.cp != parent.cp:
+ continue
+ if match_from_list(atom, cpv_slot_list):
+ circular_atom = atom
+ break
+ if circular_atom is None and circular_dependency is not None:
+ for circular_child in itertools.chain(
+ circular_dependency.get(parent, []),
+ circular_dependency.get(virt_parent, []),
+ ):
+ for atom in atoms:
+ if not atom.blocker and atom.match(circular_child):
+ circular_atom = atom
+ break
+ if circular_atom is not None:
+ break
+
+ if circular_atom is not None:
+ other.append(this_choice)
+ else:
+ if all_use_satisfied:
+ if all_in_graph:
+ preferred_in_graph.append(this_choice)
+ elif all_installed:
+ if all_installed_slots:
+ preferred_installed.append(this_choice)
+ else:
+ preferred_any_slot.append(this_choice)
+ else:
+ preferred_non_installed.append(this_choice)
+ else:
+ if not all_use_unmasked:
+ other.append(this_choice)
+ elif all_in_graph:
+ unsat_use_in_graph.append(this_choice)
+ elif all_installed_slots:
+ unsat_use_installed.append(this_choice)
+ else:
+ unsat_use_non_installed.append(this_choice)
+ else:
+ all_installed = True
+ some_installed = False
+ for atom in atoms:
+ if not atom.blocker:
+ if vardb.match(atom):
+ some_installed = True
+ else:
+ all_installed = False
+
+ if all_installed:
+ this_choice.all_installed_slots = True
+ other_installed.append(this_choice)
+ elif some_installed:
+ other_installed_some.append(this_choice)
+
+ # Use Atom(atom.cp) for a somewhat "fuzzy" match, since
+ # the whole atom may be too specific. For example, see
+ # bug #522652, where using the whole atom leads to an
+ # unsatisfiable choice.
+ elif any(vardb.match(Atom(atom.cp)) for atom in atoms if not atom.blocker):
+ other_installed_any_slot.append(this_choice)
+ else:
+ other.append(this_choice)
+
+ # Prefer choices which contain upgrades to higher slots. This helps
+ # for deps such as || ( foo:1 foo:2 ), where we want to prefer the
+ # atom which matches the higher version rather than the atom furthest
+ # to the left. Sorting is done separately for each of choice_bins, so
+ # as not to interfere with the ordering of the bins. Because of the
+ # bin separation, the main function of this code is to allow
+ # --depclean to remove old slots (rather than to pull in new slots).
+ for choices in choice_bins:
+ if len(choices) < 2:
+ continue
+
+ if minimize_slots:
+ # Prefer choices having fewer new slots. When used with DNF form,
+ # this can eliminate unecessary packages that depclean would
+ # ultimately eliminate (see bug 632026). Only use this behavior
+ # when deemed necessary by the caller, since this will discard the
+ # order specified in the ebuild, and the preferences specified
+ # there can serve as a crucial sources of guidance (see bug 645002).
+
+ # NOTE: Under some conditions, new_slot_count value may have some
+ # variance from one calculation to the next because it depends on
+ # the order that packages are added to the graph. This variance can
+ # contribute to outcomes that appear to be random. Meanwhile,
+ # the order specified in the ebuild is without variance, so it
+ # does not have this problem.
+ choices.sort(key=operator.attrgetter("new_slot_count"))
+
+ for choice_1 in choices[1:]:
+ cps = set(choice_1.cp_map)
+ for choice_2 in choices:
+ if choice_1 is choice_2:
+ # choice_1 will not be promoted, so move on
+ break
+ if (
+ choice_1.all_installed_slots
+ and not choice_2.all_installed_slots
+ and not choice_2.want_update
+ ):
+ # promote choice_1 in front of choice_2
+ choices.remove(choice_1)
+ index_2 = choices.index(choice_2)
+ choices.insert(index_2, choice_1)
+ break
+
+ intersecting_cps = cps.intersection(choice_2.cp_map)
+ has_upgrade = False
+ has_downgrade = False
+ for cp in intersecting_cps:
+ version_1 = choice_1.cp_map[cp]
+ version_2 = choice_2.cp_map[cp]
+ difference = vercmp(version_1.version, version_2.version)
+ if difference != 0:
+ if difference > 0:
+ has_upgrade = True
+ else:
+ has_downgrade = True
+
+ if (
+ # Prefer upgrades.
+ (has_upgrade and not has_downgrade)
+ # Prefer choices where all packages have been pulled into
+ # the graph, except for choices that eliminate upgrades.
+ or (
+ choice_1.all_in_graph
+ and not choice_2.all_in_graph
+ and not (has_downgrade and not has_upgrade)
+ )
+ ):
+ # promote choice_1 in front of choice_2
+ choices.remove(choice_1)
+ index_2 = choices.index(choice_2)
+ choices.insert(index_2, choice_1)
+ break
+
+ for allow_masked in (False, True):
+ for choices in choice_bins:
+ for choice in choices:
+ if choice.all_available or allow_masked:
+ return choice.atoms
+
+ assert False # This point should not be reachable
+
+
+ def dep_check(
+ depstring,
+ mydbapi,
+ mysettings,
+ use="yes",
+ mode=None,
+ myuse=None,
+ use_cache=1,
+ use_binaries=0,
+ myroot=None,
+ trees=None,
+ ):
+ """
+ Takes a depend string, parses it, and selects atoms.
+ The myroot parameter is unused (use mysettings['EROOT'] instead).
+ """
+ myroot = mysettings["EROOT"]
+ edebug = mysettings.get("PORTAGE_DEBUG", None) == "1"
+ # check_config_instance(mysettings)
+ if trees is None:
+ trees = globals()["db"]
+ if use == "yes":
+ if myuse is None:
+ # default behavior
+ myusesplit = mysettings["PORTAGE_USE"].split()
+ else:
+ myusesplit = myuse
+ # We've been given useflags to use.
+ # print "USE FLAGS PASSED IN."
+ # print myuse
+ # if "bindist" in myusesplit:
+ # print "BINDIST is set!"
+ # else:
+ # print "BINDIST NOT set."
+ else:
+ # we are being run by autouse(), don't consult USE vars yet.
+ # WE ALSO CANNOT USE SETTINGS
+ myusesplit = []
+
+ mymasks = set()
+ useforce = set()
+ if use == "all":
+ # This is only for repoman, in order to constrain the use_reduce
+ # matchall behavior to account for profile use.mask/force. The
+ # ARCH/archlist code here may be redundant, since the profile
+ # really should be handling ARCH masking/forcing itself.
+ arch = mysettings.get("ARCH")
+ mymasks.update(mysettings.usemask)
+ mymasks.update(mysettings.archlist())
+ if arch:
+ mymasks.discard(arch)
+ useforce.add(arch)
+ useforce.update(mysettings.useforce)
+ useforce.difference_update(mymasks)
+
+ # eapi code borrowed from _expand_new_virtuals()
+ mytrees = trees[myroot]
+ parent = mytrees.get("parent")
+ virt_parent = mytrees.get("virt_parent")
+ current_parent = None
+ eapi = None
+ if parent is not None:
+ if virt_parent is not None:
+ current_parent = virt_parent
+ else:
+ current_parent = parent
+
+ if current_parent is not None:
+ # Don't pass the eapi argument to use_reduce() for installed packages
+ # since previous validation will have already marked them as invalid
+ # when necessary and now we're more interested in evaluating
+ # dependencies so that things like --depclean work as well as possible
+ # in spite of partial invalidity.
+ if not current_parent.installed:
+ eapi = current_parent.eapi
+
+ if isinstance(depstring, list):
+ mysplit = depstring
+ else:
+ try:
+ mysplit = use_reduce(
+ depstring,
+ uselist=myusesplit,
+ masklist=mymasks,
+ matchall=(use == "all"),
+ excludeall=useforce,
+ opconvert=True,
+ token_class=Atom,
+ eapi=eapi,
+ )
+ except InvalidDependString as e:
+ return [0, "%s" % (e,)]
+
+ if mysplit == []:
+ # dependencies were reduced to nothing
+ return [1, []]
+
+ # Recursively expand new-style virtuals so as to
+ # collapse one or more levels of indirection.
+ try:
+ mysplit = _expand_new_virtuals(
+ mysplit,
+ edebug,
+ mydbapi,
+ mysettings,
+ use=use,
+ mode=mode,
+ myuse=myuse,
+ use_force=useforce,
+ use_mask=mymasks,
+ use_cache=use_cache,
+ use_binaries=use_binaries,
+ myroot=myroot,
+ trees=trees,
+ )
+ except ParseError as e:
+ return [0, "%s" % (e,)]
+
+ dnf = False
+ if mysettings.local_config: # if not repoman
+ orig_split = mysplit
+ mysplit = _overlap_dnf(mysplit)
+ dnf = mysplit is not orig_split
+
+ mysplit2 = dep_wordreduce(mysplit, mysettings, mydbapi, mode, use_cache=use_cache)
+ if mysplit2 is None:
+ return [0, _("Invalid token")]
+
+ writemsg("\n\n\n", 1)
+ writemsg("mysplit: %s\n" % (mysplit), 1)
+ writemsg("mysplit2: %s\n" % (mysplit2), 1)
+
+ selected_atoms = dep_zapdeps(
+ mysplit,
+ mysplit2,
+ myroot,
+ use_binaries=use_binaries,
+ trees=trees,
+ minimize_slots=dnf,
+ )
+
+ return [1, selected_atoms]
def _overlap_dnf(dep_struct):
diff --cc lib/portage/package/ebuild/config.py
index 0fe68ad38,b4d6862a3..198c6238e
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@@ -70,2896 -111,3307 +111,3321 @@@ from portage.package.ebuild._config.unp
_feature_flags_cache = {}
+
def _get_feature_flags(eapi_attrs):
- cache_key = (eapi_attrs.feature_flag_test,)
- flags = _feature_flags_cache.get(cache_key)
- if flags is not None:
- return flags
+ cache_key = (eapi_attrs.feature_flag_test,)
+ flags = _feature_flags_cache.get(cache_key)
+ if flags is not None:
+ return flags
+
+ flags = []
+ if eapi_attrs.feature_flag_test:
+ flags.append("test")
- flags = []
- if eapi_attrs.feature_flag_test:
- flags.append("test")
+ flags = frozenset(flags)
+ _feature_flags_cache[cache_key] = flags
+ return flags
- flags = frozenset(flags)
- _feature_flags_cache[cache_key] = flags
- return flags
def autouse(myvartree, use_cache=1, mysettings=None):
- warnings.warn("portage.autouse() is deprecated",
- DeprecationWarning, stacklevel=2)
- return ""
+ warnings.warn("portage.autouse() is deprecated", DeprecationWarning, stacklevel=2)
+ return ""
+
def check_config_instance(test):
- if not isinstance(test, config):
- raise TypeError("Invalid type for config object: %s (should be %s)" % (test.__class__, config))
+ if not isinstance(test, config):
+ raise TypeError(
+ "Invalid type for config object: %s (should be %s)"
+ % (test.__class__, config)
+ )
+
def best_from_dict(key, top_dict, key_order, EmptyOnError=1, FullCopy=1, AllowEmpty=1):
- for x in key_order:
- if x in top_dict and key in top_dict[x]:
- if FullCopy:
- return copy.deepcopy(top_dict[x][key])
- return top_dict[x][key]
- if EmptyOnError:
- return ""
- raise KeyError("Key not found in list; '%s'" % key)
+ for x in key_order:
+ if x in top_dict and key in top_dict[x]:
+ if FullCopy:
+ return copy.deepcopy(top_dict[x][key])
+ return top_dict[x][key]
+ if EmptyOnError:
+ return ""
+ raise KeyError("Key not found in list; '%s'" % key)
+
def _lazy_iuse_regex(iuse_implicit):
- """
- The PORTAGE_IUSE value is lazily evaluated since re.escape() is slow
- and the value is only used when an ebuild phase needs to be executed
- (it's used only to generate QA notices).
- """
- # Escape anything except ".*" which is supposed to pass through from
- # _get_implicit_iuse().
- regex = sorted(re.escape(x) for x in iuse_implicit)
- regex = "^(%s)$" % "|".join(regex)
- regex = regex.replace("\\.\\*", ".*")
- return regex
+ """
+ The PORTAGE_IUSE value is lazily evaluated since re.escape() is slow
+ and the value is only used when an ebuild phase needs to be executed
+ (it's used only to generate QA notices).
+ """
+ # Escape anything except ".*" which is supposed to pass through from
+ # _get_implicit_iuse().
+ regex = sorted(re.escape(x) for x in iuse_implicit)
+ regex = "^(%s)$" % "|".join(regex)
+ regex = regex.replace("\\.\\*", ".*")
+ return regex
+
class _iuse_implicit_match_cache:
+ def __init__(self, settings):
+ self._iuse_implicit_re = re.compile(
+ "^(%s)$" % "|".join(settings._get_implicit_iuse())
+ )
+ self._cache = {}
+
+ def __call__(self, flag):
+ """
+ Returns True if the flag is matched, False otherwise.
+ """
+ try:
+ return self._cache[flag]
+ except KeyError:
+ m = self._iuse_implicit_re.match(flag) is not None
+ self._cache[flag] = m
+ return m
- def __init__(self, settings):
- self._iuse_implicit_re = re.compile("^(%s)$" % \
- "|".join(settings._get_implicit_iuse()))
- self._cache = {}
-
- def __call__(self, flag):
- """
- Returns True if the flag is matched, False otherwise.
- """
- try:
- return self._cache[flag]
- except KeyError:
- m = self._iuse_implicit_re.match(flag) is not None
- self._cache[flag] = m
- return m
class config:
- """
- This class encompasses the main portage configuration. Data is pulled from
- ROOT/PORTDIR/profiles/, from ROOT/etc/make.profile incrementally through all
- parent profiles as well as from ROOT/PORTAGE_CONFIGROOT/* for user specified
- overrides.
-
- Generally if you need data like USE flags, FEATURES, environment variables,
- virtuals ...etc you look in here.
- """
-
- _constant_keys = frozenset(['PORTAGE_BIN_PATH', 'PORTAGE_GID',
- 'PORTAGE_PYM_PATH', 'PORTAGE_PYTHONPATH'])
-
- _deprecated_keys = {'PORTAGE_LOGDIR': 'PORT_LOGDIR',
- 'PORTAGE_LOGDIR_CLEAN': 'PORT_LOGDIR_CLEAN',
- 'SIGNED_OFF_BY': 'DCO_SIGNED_OFF_BY'}
-
- _setcpv_aux_keys = ('BDEPEND', 'DEFINED_PHASES', 'DEPEND', 'EAPI', 'IDEPEND',
- 'INHERITED', 'IUSE', 'REQUIRED_USE', 'KEYWORDS', 'LICENSE', 'PDEPEND',
- 'PROPERTIES', 'RDEPEND', 'SLOT',
- 'repository', 'RESTRICT', 'LICENSE',)
-
- _module_aliases = {
- "cache.metadata_overlay.database" : "portage.cache.flat_hash.mtime_md5_database",
- "portage.cache.metadata_overlay.database" : "portage.cache.flat_hash.mtime_md5_database",
- }
-
- _case_insensitive_vars = special_env_vars.case_insensitive_vars
- _default_globals = special_env_vars.default_globals
- _env_blacklist = special_env_vars.env_blacklist
- _environ_filter = special_env_vars.environ_filter
- _environ_whitelist = special_env_vars.environ_whitelist
- _environ_whitelist_re = special_env_vars.environ_whitelist_re
- _global_only_vars = special_env_vars.global_only_vars
-
- def __init__(self, clone=None, mycpv=None, config_profile_path=None,
- config_incrementals=None, config_root=None, target_root=None,
- sysroot=None, eprefix=None, local_config=True, env=None,
- _unmatched_removal=False, repositories=None):
- """
- @param clone: If provided, init will use deepcopy to copy by value the instance.
- @type clone: Instance of config class.
- @param mycpv: CPV to load up (see setcpv), this is the same as calling init with mycpv=None
- and then calling instance.setcpv(mycpv).
- @type mycpv: String
- @param config_profile_path: Configurable path to the profile (usually PROFILE_PATH from portage.const)
- @type config_profile_path: String
- @param config_incrementals: List of incremental variables
- (defaults to portage.const.INCREMENTALS)
- @type config_incrementals: List
- @param config_root: path to read local config from (defaults to "/", see PORTAGE_CONFIGROOT)
- @type config_root: String
- @param target_root: the target root, which typically corresponds to the
- value of the $ROOT env variable (default is /)
- @type target_root: String
- @param sysroot: the sysroot to build against, which typically corresponds
- to the value of the $SYSROOT env variable (default is /)
- @type sysroot: String
- @param eprefix: set the EPREFIX variable (default is portage.const.EPREFIX)
- @type eprefix: String
- @param local_config: Enables loading of local config (/etc/portage); used most by repoman to
- ignore local config (keywording and unmasking)
- @type local_config: Boolean
- @param env: The calling environment which is used to override settings.
- Defaults to os.environ if unspecified.
- @type env: dict
- @param _unmatched_removal: Enabled by repoman when the
- --unmatched-removal option is given.
- @type _unmatched_removal: Boolean
- @param repositories: Configuration of repositories.
- Defaults to portage.repository.config.load_repository_config().
- @type repositories: Instance of portage.repository.config.RepoConfigLoader class.
- """
-
- # This is important when config is reloaded after emerge --sync.
- _eapi_cache.clear()
-
- # When initializing the global portage.settings instance, avoid
- # raising exceptions whenever possible since exceptions thrown
- # from 'import portage' or 'import portage.exceptions' statements
- # can practically render the api unusable for api consumers.
- tolerant = hasattr(portage, '_initializing_globals')
- self._tolerant = tolerant
- self._unmatched_removal = _unmatched_removal
-
- self.locked = 0
- self.mycpv = None
- self._setcpv_args_hash = None
- self.puse = ""
- self._penv = []
- self.modifiedkeys = []
- self.uvlist = []
- self._accept_chost_re = None
- self._accept_properties = None
- self._accept_restrict = None
- self._features_overrides = []
- self._make_defaults = None
- self._parent_stable = None
- self._soname_provided = None
-
- # _unknown_features records unknown features that
- # have triggered warning messages, and ensures that
- # the same warning isn't shown twice.
- self._unknown_features = set()
-
- self.local_config = local_config
-
- if clone:
- # For immutable attributes, use shallow copy for
- # speed and memory conservation.
- self._tolerant = clone._tolerant
- self._unmatched_removal = clone._unmatched_removal
- self.categories = clone.categories
- self.depcachedir = clone.depcachedir
- self.incrementals = clone.incrementals
- self.module_priority = clone.module_priority
- self.profile_path = clone.profile_path
- self.profiles = clone.profiles
- self.packages = clone.packages
- self.repositories = clone.repositories
- self.unpack_dependencies = clone.unpack_dependencies
- self._default_features_use = clone._default_features_use
- self._iuse_effective = clone._iuse_effective
- self._iuse_implicit_match = clone._iuse_implicit_match
- self._non_user_variables = clone._non_user_variables
- self._env_d_blacklist = clone._env_d_blacklist
- self._pbashrc = clone._pbashrc
- self._repo_make_defaults = clone._repo_make_defaults
- self.usemask = clone.usemask
- self.useforce = clone.useforce
- self.puse = clone.puse
- self.user_profile_dir = clone.user_profile_dir
- self.local_config = clone.local_config
- self.make_defaults_use = clone.make_defaults_use
- self.mycpv = clone.mycpv
- self._setcpv_args_hash = clone._setcpv_args_hash
- self._soname_provided = clone._soname_provided
- self._profile_bashrc = clone._profile_bashrc
-
- # immutable attributes (internal policy ensures lack of mutation)
- self._locations_manager = clone._locations_manager
- self._use_manager = clone._use_manager
- # force instantiation of lazy immutable objects when cloning, so
- # that they're not instantiated more than once
- self._keywords_manager_obj = clone._keywords_manager
- self._mask_manager_obj = clone._mask_manager
-
- # shared mutable attributes
- self._unknown_features = clone._unknown_features
-
- self.modules = copy.deepcopy(clone.modules)
- self._penv = copy.deepcopy(clone._penv)
-
- self.configdict = copy.deepcopy(clone.configdict)
- self.configlist = [
- self.configdict['env.d'],
- self.configdict['repo'],
- self.configdict['features'],
- self.configdict['pkginternal'],
- self.configdict['globals'],
- self.configdict['defaults'],
- self.configdict['conf'],
- self.configdict['pkg'],
- self.configdict['env'],
- ]
- self.lookuplist = self.configlist[:]
- self.lookuplist.reverse()
- self._use_expand_dict = copy.deepcopy(clone._use_expand_dict)
- self.backupenv = self.configdict["backupenv"]
- self.prevmaskdict = copy.deepcopy(clone.prevmaskdict)
- self.pprovideddict = copy.deepcopy(clone.pprovideddict)
- self.features = features_set(self)
- self.features._features = copy.deepcopy(clone.features._features)
- self._features_overrides = copy.deepcopy(clone._features_overrides)
-
- #Strictly speaking _license_manager is not immutable. Users need to ensure that
- #extract_global_changes() is called right after __init__ (if at all).
- #It also has the mutable member _undef_lic_groups. It is used to track
- #undefined license groups, to not display an error message for the same
- #group again and again. Because of this, it's useful to share it between
- #all LicenseManager instances.
- self._license_manager = clone._license_manager
-
- # force instantiation of lazy objects when cloning, so
- # that they're not instantiated more than once
- self._virtuals_manager_obj = copy.deepcopy(clone._virtuals_manager)
-
- self._accept_properties = copy.deepcopy(clone._accept_properties)
- self._ppropertiesdict = copy.deepcopy(clone._ppropertiesdict)
- self._accept_restrict = copy.deepcopy(clone._accept_restrict)
- self._paccept_restrict = copy.deepcopy(clone._paccept_restrict)
- self._penvdict = copy.deepcopy(clone._penvdict)
- self._pbashrcdict = copy.deepcopy(clone._pbashrcdict)
- self._expand_map = copy.deepcopy(clone._expand_map)
-
- else:
- # lazily instantiated objects
- self._keywords_manager_obj = None
- self._mask_manager_obj = None
- self._virtuals_manager_obj = None
-
- locations_manager = LocationsManager(config_root=config_root,
- config_profile_path=config_profile_path, eprefix=eprefix,
- local_config=local_config, target_root=target_root,
- sysroot=sysroot)
- self._locations_manager = locations_manager
-
- eprefix = locations_manager.eprefix
- config_root = locations_manager.config_root
- sysroot = locations_manager.sysroot
- esysroot = locations_manager.esysroot
- broot = locations_manager.broot
- abs_user_config = locations_manager.abs_user_config
- make_conf_paths = [
- os.path.join(config_root, 'etc', 'make.conf'),
- os.path.join(config_root, MAKE_CONF_FILE)
- ]
- try:
- if os.path.samefile(*make_conf_paths):
- make_conf_paths.pop()
- except OSError:
- pass
-
- make_conf_count = 0
- make_conf = {}
- for x in make_conf_paths:
- mygcfg = getconfig(x,
- tolerant=tolerant, allow_sourcing=True,
- expand=make_conf, recursive=True)
- if mygcfg is not None:
- make_conf.update(mygcfg)
- make_conf_count += 1
-
- if make_conf_count == 2:
- writemsg("!!! %s\n" %
- _("Found 2 make.conf files, using both '%s' and '%s'") %
- tuple(make_conf_paths), noiselevel=-1)
-
- # __* variables set in make.conf are local and are not be propagated.
- make_conf = {k: v for k, v in make_conf.items() if not k.startswith("__")}
-
- # Allow ROOT setting to come from make.conf if it's not overridden
- # by the constructor argument (from the calling environment).
- locations_manager.set_root_override(make_conf.get("ROOT"))
- target_root = locations_manager.target_root
- eroot = locations_manager.eroot
- self.global_config_path = locations_manager.global_config_path
-
- # The expand_map is used for variable substitution
- # in getconfig() calls, and the getconfig() calls
- # update expand_map with the value of each variable
- # assignment that occurs. Variable substitution occurs
- # in the following order, which corresponds to the
- # order of appearance in self.lookuplist:
- #
- # * env.d
- # * make.globals
- # * make.defaults
- # * make.conf
- #
- # Notably absent is "env", since we want to avoid any
- # interaction with the calling environment that might
- # lead to unexpected results.
-
- env_d = getconfig(os.path.join(eroot, "etc", "profile.env"),
- tolerant=tolerant, expand=False) or {}
- expand_map = env_d.copy()
- self._expand_map = expand_map
-
- # Allow make.globals and make.conf to set paths relative to vars like ${EPREFIX}.
- expand_map["BROOT"] = broot
- expand_map["EPREFIX"] = eprefix
- expand_map["EROOT"] = eroot
- expand_map["ESYSROOT"] = esysroot
- expand_map["PORTAGE_CONFIGROOT"] = config_root
- expand_map["ROOT"] = target_root
- expand_map["SYSROOT"] = sysroot
-
- if portage._not_installed:
- make_globals_path = os.path.join(PORTAGE_BASE_PATH, "cnf", "make.globals")
- else:
- make_globals_path = os.path.join(self.global_config_path, "make.globals")
- old_make_globals = os.path.join(config_root, "etc", "make.globals")
- if os.path.isfile(old_make_globals) and \
- not os.path.samefile(make_globals_path, old_make_globals):
- # Don't warn if they refer to the same path, since
- # that can be used for backward compatibility with
- # old software.
- writemsg("!!! %s\n" %
- _("Found obsolete make.globals file: "
- "'%s', (using '%s' instead)") %
- (old_make_globals, make_globals_path),
- noiselevel=-1)
-
- make_globals = getconfig(make_globals_path,
- tolerant=tolerant, expand=expand_map)
- if make_globals is None:
- make_globals = {}
-
- for k, v in self._default_globals.items():
- make_globals.setdefault(k, v)
-
- if config_incrementals is None:
- self.incrementals = INCREMENTALS
- else:
- self.incrementals = config_incrementals
- if not isinstance(self.incrementals, frozenset):
- self.incrementals = frozenset(self.incrementals)
-
- self.module_priority = ("user", "default")
- self.modules = {}
- modules_file = os.path.join(config_root, MODULES_FILE_PATH)
- modules_loader = KeyValuePairFileLoader(modules_file, None, None)
- modules_dict, modules_errors = modules_loader.load()
- self.modules["user"] = modules_dict
- if self.modules["user"] is None:
- self.modules["user"] = {}
- user_auxdbmodule = \
- self.modules["user"].get("portdbapi.auxdbmodule")
- if user_auxdbmodule is not None and \
- user_auxdbmodule in self._module_aliases:
- warnings.warn("'%s' is deprecated: %s" %
- (user_auxdbmodule, modules_file))
-
- self.modules["default"] = {
- "portdbapi.auxdbmodule": "portage.cache.flat_hash.mtime_md5_database",
- }
-
- self.configlist=[]
-
- # back up our incremental variables:
- self.configdict={}
- self._use_expand_dict = {}
- # configlist will contain: [ env.d, globals, features, defaults, conf, pkg, backupenv, env ]
- self.configlist.append({})
- self.configdict["env.d"] = self.configlist[-1]
-
- self.configlist.append({})
- self.configdict["repo"] = self.configlist[-1]
-
- self.configlist.append({})
- self.configdict["features"] = self.configlist[-1]
-
- self.configlist.append({})
- self.configdict["pkginternal"] = self.configlist[-1]
-
- # env_d will be None if profile.env doesn't exist.
- if env_d:
- self.configdict["env.d"].update(env_d)
-
- # backupenv is used for calculating incremental variables.
- if env is None:
- env = os.environ
-
- # Avoid potential UnicodeDecodeError exceptions later.
- env_unicode = dict((_unicode_decode(k), _unicode_decode(v))
- for k, v in env.items())
-
- self.backupenv = env_unicode
-
- if env_d:
- # Remove duplicate values so they don't override updated
- # profile.env values later (profile.env is reloaded in each
- # call to self.regenerate).
- for k, v in env_d.items():
- try:
- if self.backupenv[k] == v:
- del self.backupenv[k]
- except KeyError:
- pass
- del k, v
-
- self.configdict["env"] = LazyItemsDict(self.backupenv)
-
- self.configlist.append(make_globals)
- self.configdict["globals"]=self.configlist[-1]
-
- self.make_defaults_use = []
-
- #Loading Repositories
- self["PORTAGE_CONFIGROOT"] = config_root
- self["ROOT"] = target_root
- self["SYSROOT"] = sysroot
- self["EPREFIX"] = eprefix
- self["EROOT"] = eroot
- self["ESYSROOT"] = esysroot
- self["BROOT"] = broot
- known_repos = []
- portdir = ""
- portdir_overlay = ""
- portdir_sync = None
- for confs in [make_globals, make_conf, self.configdict["env"]]:
- v = confs.get("PORTDIR")
- if v is not None:
- portdir = v
- known_repos.append(v)
- v = confs.get("PORTDIR_OVERLAY")
- if v is not None:
- portdir_overlay = v
- known_repos.extend(shlex_split(v))
- v = confs.get("SYNC")
- if v is not None:
- portdir_sync = v
- if 'PORTAGE_RSYNC_EXTRA_OPTS' in confs:
- self['PORTAGE_RSYNC_EXTRA_OPTS'] = confs['PORTAGE_RSYNC_EXTRA_OPTS']
-
- self["PORTDIR"] = portdir
- self["PORTDIR_OVERLAY"] = portdir_overlay
- if portdir_sync:
- self["SYNC"] = portdir_sync
- self.lookuplist = [self.configdict["env"]]
- if repositories is None:
- self.repositories = load_repository_config(self)
- else:
- self.repositories = repositories
-
- known_repos.extend(repo.location for repo in self.repositories)
- known_repos = frozenset(known_repos)
-
- self['PORTAGE_REPOSITORIES'] = self.repositories.config_string()
- self.backup_changes('PORTAGE_REPOSITORIES')
-
- #filling PORTDIR and PORTDIR_OVERLAY variable for compatibility
- main_repo = self.repositories.mainRepo()
- if main_repo is not None:
- self["PORTDIR"] = main_repo.location
- self.backup_changes("PORTDIR")
- expand_map["PORTDIR"] = self["PORTDIR"]
-
- # repoman controls PORTDIR_OVERLAY via the environment, so no
- # special cases are needed here.
- portdir_overlay = list(self.repositories.repoLocationList())
- if portdir_overlay and portdir_overlay[0] == self["PORTDIR"]:
- portdir_overlay = portdir_overlay[1:]
-
- new_ov = []
- if portdir_overlay:
- for ov in portdir_overlay:
- ov = normalize_path(ov)
- if isdir_raise_eaccess(ov) or portage._sync_mode:
- new_ov.append(portage._shell_quote(ov))
- else:
- writemsg(_("!!! Invalid PORTDIR_OVERLAY"
- " (not a dir): '%s'\n") % ov, noiselevel=-1)
-
- self["PORTDIR_OVERLAY"] = " ".join(new_ov)
- self.backup_changes("PORTDIR_OVERLAY")
- expand_map["PORTDIR_OVERLAY"] = self["PORTDIR_OVERLAY"]
-
- locations_manager.set_port_dirs(self["PORTDIR"], self["PORTDIR_OVERLAY"])
- locations_manager.load_profiles(self.repositories, known_repos)
-
- profiles_complex = locations_manager.profiles_complex
- self.profiles = locations_manager.profiles
- self.profile_path = locations_manager.profile_path
- self.user_profile_dir = locations_manager.user_profile_dir
-
- try:
- packages_list = [grabfile_package(
- os.path.join(x.location, "packages"),
- verify_eapi=True, eapi=x.eapi, eapi_default=None,
- allow_repo=allow_profile_repo_deps(x),
- allow_build_id=x.allow_build_id)
- for x in profiles_complex]
- except EnvironmentError as e:
- _raise_exc(e)
-
- self.packages = tuple(stack_lists(packages_list, incremental=1))
-
- # revmaskdict
- self.prevmaskdict={}
- for x in self.packages:
- # Negative atoms are filtered by the above stack_lists() call.
- if not isinstance(x, Atom):
- x = Atom(x.lstrip('*'))
- self.prevmaskdict.setdefault(x.cp, []).append(x)
-
- self.unpack_dependencies = load_unpack_dependencies_configuration(self.repositories)
-
- mygcfg = {}
- if profiles_complex:
- mygcfg_dlists = []
- for x in profiles_complex:
- # Prevent accidents triggered by USE="${USE} ..." settings
- # at the top of make.defaults which caused parent profile
- # USE to override parent profile package.use settings.
- # It would be nice to guard USE_EXPAND variables like
- # this too, but unfortunately USE_EXPAND is not known
- # until after make.defaults has been evaluated, so that
- # will require some form of make.defaults preprocessing.
- expand_map.pop("USE", None)
- mygcfg_dlists.append(
- getconfig(os.path.join(x.location, "make.defaults"),
- tolerant=tolerant, expand=expand_map,
- recursive=x.portage1_directories))
- self._make_defaults = mygcfg_dlists
- mygcfg = stack_dicts(mygcfg_dlists,
- incrementals=self.incrementals)
- if mygcfg is None:
- mygcfg = {}
- self.configlist.append(mygcfg)
- self.configdict["defaults"]=self.configlist[-1]
-
- mygcfg = {}
- for x in make_conf_paths:
- mygcfg.update(getconfig(x,
- tolerant=tolerant, allow_sourcing=True,
- expand=expand_map, recursive=True) or {})
-
- # __* variables set in make.conf are local and are not be propagated.
- mygcfg = {k: v for k, v in mygcfg.items() if not k.startswith("__")}
-
- # Don't allow the user to override certain variables in make.conf
- profile_only_variables = self.configdict["defaults"].get(
- "PROFILE_ONLY_VARIABLES", "").split()
- profile_only_variables = stack_lists([profile_only_variables])
- non_user_variables = set()
- non_user_variables.update(profile_only_variables)
- non_user_variables.update(self._env_blacklist)
- non_user_variables.update(self._global_only_vars)
- non_user_variables = frozenset(non_user_variables)
- self._non_user_variables = non_user_variables
-
- self._env_d_blacklist = frozenset(chain(
- profile_only_variables,
- self._env_blacklist,
- ))
- env_d = self.configdict["env.d"]
- for k in self._env_d_blacklist:
- env_d.pop(k, None)
-
- for k in profile_only_variables:
- mygcfg.pop(k, None)
-
- self.configlist.append(mygcfg)
- self.configdict["conf"]=self.configlist[-1]
-
- self.configlist.append(LazyItemsDict())
- self.configdict["pkg"]=self.configlist[-1]
-
- self.configdict["backupenv"] = self.backupenv
-
- # Don't allow the user to override certain variables in the env
- for k in profile_only_variables:
- self.backupenv.pop(k, None)
-
- self.configlist.append(self.configdict["env"])
-
- # make lookuplist for loading package.*
- self.lookuplist=self.configlist[:]
- self.lookuplist.reverse()
-
- # Blacklist vars that could interfere with portage internals.
- for blacklisted in self._env_blacklist:
- for cfg in self.lookuplist:
- cfg.pop(blacklisted, None)
- self.backupenv.pop(blacklisted, None)
- del blacklisted, cfg
-
- self["PORTAGE_CONFIGROOT"] = config_root
- self.backup_changes("PORTAGE_CONFIGROOT")
- self["ROOT"] = target_root
- self.backup_changes("ROOT")
- self["SYSROOT"] = sysroot
- self.backup_changes("SYSROOT")
- self["EPREFIX"] = eprefix
- self.backup_changes("EPREFIX")
- self["EROOT"] = eroot
- self.backup_changes("EROOT")
- self["ESYSROOT"] = esysroot
- self.backup_changes("ESYSROOT")
- self["BROOT"] = broot
- self.backup_changes("BROOT")
-
- # The prefix of the running portage instance is used in the
- # ebuild environment to implement the --host-root option for
- # best_version and has_version.
- self["PORTAGE_OVERRIDE_EPREFIX"] = portage.const.EPREFIX
- self.backup_changes("PORTAGE_OVERRIDE_EPREFIX")
-
- self._ppropertiesdict = portage.dep.ExtendedAtomDict(dict)
- self._paccept_restrict = portage.dep.ExtendedAtomDict(dict)
- self._penvdict = portage.dep.ExtendedAtomDict(dict)
- self._pbashrcdict = {}
- self._pbashrc = ()
-
- self._repo_make_defaults = {}
- for repo in self.repositories.repos_with_profiles():
- d = getconfig(os.path.join(repo.location, "profiles", "make.defaults"),
- tolerant=tolerant, expand=self.configdict["globals"].copy(), recursive=repo.portage1_profiles) or {}
- if d:
- for k in chain(self._env_blacklist,
- profile_only_variables, self._global_only_vars):
- d.pop(k, None)
- self._repo_make_defaults[repo.name] = d
-
- #Read all USE related files from profiles and optionally from user config.
- self._use_manager = UseManager(self.repositories, profiles_complex,
- abs_user_config, self._isStable, user_config=local_config)
- #Initialize all USE related variables we track ourselves.
- self.usemask = self._use_manager.getUseMask()
- self.useforce = self._use_manager.getUseForce()
- self.configdict["conf"]["USE"] = \
- self._use_manager.extract_global_USE_changes( \
- self.configdict["conf"].get("USE", ""))
-
- #Read license_groups and optionally license_groups and package.license from user config
- self._license_manager = LicenseManager(locations_manager.profile_locations, \
- abs_user_config, user_config=local_config)
- #Extract '*/*' entries from package.license
- self.configdict["conf"]["ACCEPT_LICENSE"] = \
- self._license_manager.extract_global_changes( \
- self.configdict["conf"].get("ACCEPT_LICENSE", ""))
-
- # profile.bashrc
- self._profile_bashrc = tuple(os.path.isfile(os.path.join(profile.location, 'profile.bashrc'))
- for profile in profiles_complex)
-
- if local_config:
- #package.properties
- propdict = grabdict_package(os.path.join(
- abs_user_config, "package.properties"), recursive=1, allow_wildcard=True, \
- allow_repo=True, verify_eapi=False,
- allow_build_id=True)
- v = propdict.pop("*/*", None)
- if v is not None:
- if "ACCEPT_PROPERTIES" in self.configdict["conf"]:
- self.configdict["conf"]["ACCEPT_PROPERTIES"] += " " + " ".join(v)
- else:
- self.configdict["conf"]["ACCEPT_PROPERTIES"] = " ".join(v)
- for k, v in propdict.items():
- self._ppropertiesdict.setdefault(k.cp, {})[k] = v
-
- # package.accept_restrict
- d = grabdict_package(os.path.join(
- abs_user_config, "package.accept_restrict"),
- recursive=True, allow_wildcard=True,
- allow_repo=True, verify_eapi=False,
- allow_build_id=True)
- v = d.pop("*/*", None)
- if v is not None:
- if "ACCEPT_RESTRICT" in self.configdict["conf"]:
- self.configdict["conf"]["ACCEPT_RESTRICT"] += " " + " ".join(v)
- else:
- self.configdict["conf"]["ACCEPT_RESTRICT"] = " ".join(v)
- for k, v in d.items():
- self._paccept_restrict.setdefault(k.cp, {})[k] = v
-
- #package.env
- penvdict = grabdict_package(os.path.join(
- abs_user_config, "package.env"), recursive=1, allow_wildcard=True, \
- allow_repo=True, verify_eapi=False,
- allow_build_id=True)
- v = penvdict.pop("*/*", None)
- if v is not None:
- global_wildcard_conf = {}
- self._grab_pkg_env(v, global_wildcard_conf)
- incrementals = self.incrementals
- conf_configdict = self.configdict["conf"]
- for k, v in global_wildcard_conf.items():
- if k in incrementals:
- if k in conf_configdict:
- conf_configdict[k] = \
- conf_configdict[k] + " " + v
- else:
- conf_configdict[k] = v
- else:
- conf_configdict[k] = v
- expand_map[k] = v
-
- for k, v in penvdict.items():
- self._penvdict.setdefault(k.cp, {})[k] = v
-
- # package.bashrc
- for profile in profiles_complex:
- if not 'profile-bashrcs' in profile.profile_formats:
- continue
- self._pbashrcdict[profile] = \
- portage.dep.ExtendedAtomDict(dict)
- bashrc = grabdict_package(os.path.join(profile.location,
- "package.bashrc"), recursive=1, allow_wildcard=True,
- allow_repo=allow_profile_repo_deps(profile),
- verify_eapi=True,
- eapi=profile.eapi, eapi_default=None,
- allow_build_id=profile.allow_build_id)
- if not bashrc:
- continue
-
- for k, v in bashrc.items():
- envfiles = [os.path.join(profile.location,
- "bashrc",
- envname) for envname in v]
- self._pbashrcdict[profile].setdefault(k.cp, {})\
- .setdefault(k, []).extend(envfiles)
-
- #getting categories from an external file now
- self.categories = [grabfile(os.path.join(x, "categories")) \
- for x in locations_manager.profile_and_user_locations]
- category_re = dbapi._category_re
- # categories used to be a tuple, but now we use a frozenset
- # for hashed category validation in pordbapi.cp_list()
- self.categories = frozenset(
- x for x in stack_lists(self.categories, incremental=1)
- if category_re.match(x) is not None)
-
- archlist = [grabfile(os.path.join(x, "arch.list")) \
- for x in locations_manager.profile_and_user_locations]
- archlist = sorted(stack_lists(archlist, incremental=1))
- self.configdict["conf"]["PORTAGE_ARCHLIST"] = " ".join(archlist)
-
- pkgprovidedlines = []
- for x in profiles_complex:
- provpath = os.path.join(x.location, "package.provided")
- if os.path.exists(provpath):
- if _get_eapi_attrs(x.eapi).allows_package_provided:
- pkgprovidedlines.append(grabfile(provpath,
- recursive=x.portage1_directories))
- else:
- # TODO: bail out?
- writemsg((_("!!! package.provided not allowed in EAPI %s: ")
- %x.eapi)+x.location+"\n",
- noiselevel=-1)
-
- pkgprovidedlines = stack_lists(pkgprovidedlines, incremental=1)
- has_invalid_data = False
- for x in range(len(pkgprovidedlines)-1, -1, -1):
- myline = pkgprovidedlines[x]
- if not isvalidatom("=" + myline):
- writemsg(_("Invalid package name in package.provided: %s\n") % \
- myline, noiselevel=-1)
- has_invalid_data = True
- del pkgprovidedlines[x]
- continue
- cpvr = catpkgsplit(pkgprovidedlines[x])
- if not cpvr or cpvr[0] == "null":
- writemsg(_("Invalid package name in package.provided: ")+pkgprovidedlines[x]+"\n",
- noiselevel=-1)
- has_invalid_data = True
- del pkgprovidedlines[x]
- continue
- if has_invalid_data:
- writemsg(_("See portage(5) for correct package.provided usage.\n"),
- noiselevel=-1)
- self.pprovideddict = {}
- for x in pkgprovidedlines:
- x_split = catpkgsplit(x)
- if x_split is None:
- continue
- mycatpkg = cpv_getkey(x)
- if mycatpkg in self.pprovideddict:
- self.pprovideddict[mycatpkg].append(x)
- else:
- self.pprovideddict[mycatpkg]=[x]
-
- # reasonable defaults; this is important as without USE_ORDER,
- # USE will always be "" (nothing set)!
- if "USE_ORDER" not in self:
- self["USE_ORDER"] = "env:pkg:conf:defaults:pkginternal:features:repo:env.d"
- self.backup_changes("USE_ORDER")
-
- if "CBUILD" not in self and "CHOST" in self:
- self["CBUILD"] = self["CHOST"]
- self.backup_changes("CBUILD")
-
- if "USERLAND" not in self:
- # Set default USERLAND so that our test cases can assume that
- # it's always set. This allows isolated-functions.sh to avoid
- # calling uname -s when sourced.
- system = platform.system()
- if system is not None and \
- (system.endswith("BSD") or system == "DragonFly"):
- self["USERLAND"] = "BSD"
- else:
- self["USERLAND"] = "GNU"
- self.backup_changes("USERLAND")
-
- default_inst_ids = {
- "PORTAGE_INST_GID": "0",
- "PORTAGE_INST_UID": "0",
- }
-
- eroot_or_parent = first_existing(eroot)
- unprivileged = False
- try:
- eroot_st = os.stat(eroot_or_parent)
- except OSError:
- pass
- else:
-
- if portage.data._unprivileged_mode(
- eroot_or_parent, eroot_st):
- unprivileged = True
-
- default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
- default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
-
- if "PORTAGE_USERNAME" not in self:
- try:
- pwd_struct = pwd.getpwuid(eroot_st.st_uid)
- except KeyError:
- pass
- else:
- self["PORTAGE_USERNAME"] = pwd_struct.pw_name
- self.backup_changes("PORTAGE_USERNAME")
-
- if "PORTAGE_GRPNAME" not in self:
- try:
- grp_struct = grp.getgrgid(eroot_st.st_gid)
- except KeyError:
- pass
- else:
- self["PORTAGE_GRPNAME"] = grp_struct.gr_name
- self.backup_changes("PORTAGE_GRPNAME")
-
- for var, default_val in default_inst_ids.items():
- try:
- self[var] = str(int(self.get(var, default_val)))
- except ValueError:
- writemsg(_("!!! %s='%s' is not a valid integer. "
- "Falling back to %s.\n") % (var, self[var], default_val),
- noiselevel=-1)
- self[var] = default_val
- self.backup_changes(var)
-
- self.depcachedir = self.get("PORTAGE_DEPCACHEDIR")
- if self.depcachedir is None:
- self.depcachedir = os.path.join(os.sep,
- portage.const.EPREFIX, DEPCACHE_PATH.lstrip(os.sep))
- if unprivileged and target_root != os.sep:
- # In unprivileged mode, automatically make
- # depcachedir relative to target_root if the
- # default depcachedir is not writable.
- if not os.access(first_existing(self.depcachedir),
- os.W_OK):
- self.depcachedir = os.path.join(eroot,
- DEPCACHE_PATH.lstrip(os.sep))
-
- self["PORTAGE_DEPCACHEDIR"] = self.depcachedir
- self.backup_changes("PORTAGE_DEPCACHEDIR")
-
- if portage._internal_caller:
- self["PORTAGE_INTERNAL_CALLER"] = "1"
- self.backup_changes("PORTAGE_INTERNAL_CALLER")
-
- # initialize self.features
- self.regenerate()
- feature_use = []
- if "test" in self.features:
- feature_use.append("test")
- self.configdict["features"]["USE"] = self._default_features_use = " ".join(feature_use)
- if feature_use:
- # Regenerate USE so that the initial "test" flag state is
- # correct for evaluation of !test? conditionals in RESTRICT.
- self.regenerate()
+ """
+ This class encompasses the main portage configuration. Data is pulled from
+ ROOT/PORTDIR/profiles/, from ROOT/etc/make.profile incrementally through all
+ parent profiles as well as from ROOT/PORTAGE_CONFIGROOT/* for user specified
+ overrides.
+
+ Generally if you need data like USE flags, FEATURES, environment variables,
+ virtuals ...etc you look in here.
+ """
+
+ _constant_keys = frozenset(
+ ["PORTAGE_BIN_PATH", "PORTAGE_GID", "PORTAGE_PYM_PATH", "PORTAGE_PYTHONPATH"]
+ )
+
+ _deprecated_keys = {
+ "PORTAGE_LOGDIR": "PORT_LOGDIR",
+ "PORTAGE_LOGDIR_CLEAN": "PORT_LOGDIR_CLEAN",
+ "SIGNED_OFF_BY": "DCO_SIGNED_OFF_BY",
+ }
+
+ _setcpv_aux_keys = (
+ "BDEPEND",
+ "DEFINED_PHASES",
+ "DEPEND",
+ "EAPI",
+ "IDEPEND",
+ "INHERITED",
+ "IUSE",
+ "REQUIRED_USE",
+ "KEYWORDS",
+ "LICENSE",
+ "PDEPEND",
+ "PROPERTIES",
+ "RDEPEND",
+ "SLOT",
+ "repository",
+ "RESTRICT",
+ "LICENSE",
+ )
+
+ _module_aliases = {
+ "cache.metadata_overlay.database": "portage.cache.flat_hash.mtime_md5_database",
+ "portage.cache.metadata_overlay.database": "portage.cache.flat_hash.mtime_md5_database",
+ }
+
+ _case_insensitive_vars = special_env_vars.case_insensitive_vars
+ _default_globals = special_env_vars.default_globals
+ _env_blacklist = special_env_vars.env_blacklist
+ _environ_filter = special_env_vars.environ_filter
+ _environ_whitelist = special_env_vars.environ_whitelist
+ _environ_whitelist_re = special_env_vars.environ_whitelist_re
+ _global_only_vars = special_env_vars.global_only_vars
+
+ def __init__(
+ self,
+ clone=None,
+ mycpv=None,
+ config_profile_path=None,
+ config_incrementals=None,
+ config_root=None,
+ target_root=None,
+ sysroot=None,
+ eprefix=None,
+ local_config=True,
+ env=None,
+ _unmatched_removal=False,
+ repositories=None,
+ ):
+ """
+ @param clone: If provided, init will use deepcopy to copy by value the instance.
+ @type clone: Instance of config class.
+ @param mycpv: CPV to load up (see setcpv), this is the same as calling init with mycpv=None
+ and then calling instance.setcpv(mycpv).
+ @type mycpv: String
+ @param config_profile_path: Configurable path to the profile (usually PROFILE_PATH from portage.const)
+ @type config_profile_path: String
+ @param config_incrementals: List of incremental variables
+ (defaults to portage.const.INCREMENTALS)
+ @type config_incrementals: List
+ @param config_root: path to read local config from (defaults to "/", see PORTAGE_CONFIGROOT)
+ @type config_root: String
+ @param target_root: the target root, which typically corresponds to the
+ value of the $ROOT env variable (default is /)
+ @type target_root: String
+ @param sysroot: the sysroot to build against, which typically corresponds
+ to the value of the $SYSROOT env variable (default is /)
+ @type sysroot: String
+ @param eprefix: set the EPREFIX variable (default is portage.const.EPREFIX)
+ @type eprefix: String
+ @param local_config: Enables loading of local config (/etc/portage); used most by repoman to
+ ignore local config (keywording and unmasking)
+ @type local_config: Boolean
+ @param env: The calling environment which is used to override settings.
+ Defaults to os.environ if unspecified.
+ @type env: dict
+ @param _unmatched_removal: Enabled by repoman when the
+ --unmatched-removal option is given.
+ @type _unmatched_removal: Boolean
+ @param repositories: Configuration of repositories.
+ Defaults to portage.repository.config.load_repository_config().
+ @type repositories: Instance of portage.repository.config.RepoConfigLoader class.
+ """
+
+ # This is important when config is reloaded after emerge --sync.
+ _eapi_cache.clear()
+
+ # When initializing the global portage.settings instance, avoid
+ # raising exceptions whenever possible since exceptions thrown
+ # from 'import portage' or 'import portage.exceptions' statements
+ # can practically render the api unusable for api consumers.
+ tolerant = hasattr(portage, "_initializing_globals")
+ self._tolerant = tolerant
+ self._unmatched_removal = _unmatched_removal
+
+ self.locked = 0
+ self.mycpv = None
+ self._setcpv_args_hash = None
+ self.puse = ""
+ self._penv = []
+ self.modifiedkeys = []
+ self.uvlist = []
+ self._accept_chost_re = None
+ self._accept_properties = None
+ self._accept_restrict = None
+ self._features_overrides = []
+ self._make_defaults = None
+ self._parent_stable = None
+ self._soname_provided = None
+
+ # _unknown_features records unknown features that
+ # have triggered warning messages, and ensures that
+ # the same warning isn't shown twice.
+ self._unknown_features = set()
+
+ self.local_config = local_config
+
+ if clone:
+ # For immutable attributes, use shallow copy for
+ # speed and memory conservation.
+ self._tolerant = clone._tolerant
+ self._unmatched_removal = clone._unmatched_removal
+ self.categories = clone.categories
+ self.depcachedir = clone.depcachedir
+ self.incrementals = clone.incrementals
+ self.module_priority = clone.module_priority
+ self.profile_path = clone.profile_path
+ self.profiles = clone.profiles
+ self.packages = clone.packages
+ self.repositories = clone.repositories
+ self.unpack_dependencies = clone.unpack_dependencies
+ self._default_features_use = clone._default_features_use
+ self._iuse_effective = clone._iuse_effective
+ self._iuse_implicit_match = clone._iuse_implicit_match
+ self._non_user_variables = clone._non_user_variables
+ self._env_d_blacklist = clone._env_d_blacklist
+ self._pbashrc = clone._pbashrc
+ self._repo_make_defaults = clone._repo_make_defaults
+ self.usemask = clone.usemask
+ self.useforce = clone.useforce
+ self.puse = clone.puse
+ self.user_profile_dir = clone.user_profile_dir
+ self.local_config = clone.local_config
+ self.make_defaults_use = clone.make_defaults_use
+ self.mycpv = clone.mycpv
+ self._setcpv_args_hash = clone._setcpv_args_hash
+ self._soname_provided = clone._soname_provided
+ self._profile_bashrc = clone._profile_bashrc
+
+ # immutable attributes (internal policy ensures lack of mutation)
+ self._locations_manager = clone._locations_manager
+ self._use_manager = clone._use_manager
+ # force instantiation of lazy immutable objects when cloning, so
+ # that they're not instantiated more than once
+ self._keywords_manager_obj = clone._keywords_manager
+ self._mask_manager_obj = clone._mask_manager
+
+ # shared mutable attributes
+ self._unknown_features = clone._unknown_features
+
+ self.modules = copy.deepcopy(clone.modules)
+ self._penv = copy.deepcopy(clone._penv)
+
+ self.configdict = copy.deepcopy(clone.configdict)
+ self.configlist = [
+ self.configdict["env.d"],
+ self.configdict["repo"],
+ self.configdict["features"],
+ self.configdict["pkginternal"],
+ self.configdict["globals"],
+ self.configdict["defaults"],
+ self.configdict["conf"],
+ self.configdict["pkg"],
+ self.configdict["env"],
+ ]
+ self.lookuplist = self.configlist[:]
+ self.lookuplist.reverse()
+ self._use_expand_dict = copy.deepcopy(clone._use_expand_dict)
+ self.backupenv = self.configdict["backupenv"]
+ self.prevmaskdict = copy.deepcopy(clone.prevmaskdict)
+ self.pprovideddict = copy.deepcopy(clone.pprovideddict)
+ self.features = features_set(self)
+ self.features._features = copy.deepcopy(clone.features._features)
+ self._features_overrides = copy.deepcopy(clone._features_overrides)
+
+ # Strictly speaking _license_manager is not immutable. Users need to ensure that
+ # extract_global_changes() is called right after __init__ (if at all).
+ # It also has the mutable member _undef_lic_groups. It is used to track
+ # undefined license groups, to not display an error message for the same
+ # group again and again. Because of this, it's useful to share it between
+ # all LicenseManager instances.
+ self._license_manager = clone._license_manager
+
+ # force instantiation of lazy objects when cloning, so
+ # that they're not instantiated more than once
+ self._virtuals_manager_obj = copy.deepcopy(clone._virtuals_manager)
+
+ self._accept_properties = copy.deepcopy(clone._accept_properties)
+ self._ppropertiesdict = copy.deepcopy(clone._ppropertiesdict)
+ self._accept_restrict = copy.deepcopy(clone._accept_restrict)
+ self._paccept_restrict = copy.deepcopy(clone._paccept_restrict)
+ self._penvdict = copy.deepcopy(clone._penvdict)
+ self._pbashrcdict = copy.deepcopy(clone._pbashrcdict)
+ self._expand_map = copy.deepcopy(clone._expand_map)
+
+ else:
+ # lazily instantiated objects
+ self._keywords_manager_obj = None
+ self._mask_manager_obj = None
+ self._virtuals_manager_obj = None
+
+ locations_manager = LocationsManager(
+ config_root=config_root,
+ config_profile_path=config_profile_path,
+ eprefix=eprefix,
+ local_config=local_config,
+ target_root=target_root,
+ sysroot=sysroot,
+ )
+ self._locations_manager = locations_manager
+
+ eprefix = locations_manager.eprefix
+ config_root = locations_manager.config_root
+ sysroot = locations_manager.sysroot
+ esysroot = locations_manager.esysroot
+ broot = locations_manager.broot
+ abs_user_config = locations_manager.abs_user_config
+ make_conf_paths = [
+ os.path.join(config_root, "etc", "make.conf"),
+ os.path.join(config_root, MAKE_CONF_FILE),
+ ]
+ try:
+ if os.path.samefile(*make_conf_paths):
+ make_conf_paths.pop()
+ except OSError:
+ pass
+
+ make_conf_count = 0
+ make_conf = {}
+ for x in make_conf_paths:
+ mygcfg = getconfig(
+ x,
+ tolerant=tolerant,
+ allow_sourcing=True,
+ expand=make_conf,
+ recursive=True,
+ )
+ if mygcfg is not None:
+ make_conf.update(mygcfg)
+ make_conf_count += 1
+
+ if make_conf_count == 2:
+ writemsg(
+ "!!! %s\n"
+ % _("Found 2 make.conf files, using both '%s' and '%s'")
+ % tuple(make_conf_paths),
+ noiselevel=-1,
+ )
+
+ # __* variables set in make.conf are local and are not be propagated.
+ make_conf = {k: v for k, v in make_conf.items() if not k.startswith("__")}
+
+ # Allow ROOT setting to come from make.conf if it's not overridden
+ # by the constructor argument (from the calling environment).
+ locations_manager.set_root_override(make_conf.get("ROOT"))
+ target_root = locations_manager.target_root
+ eroot = locations_manager.eroot
+ self.global_config_path = locations_manager.global_config_path
+
+ # The expand_map is used for variable substitution
+ # in getconfig() calls, and the getconfig() calls
+ # update expand_map with the value of each variable
+ # assignment that occurs. Variable substitution occurs
+ # in the following order, which corresponds to the
+ # order of appearance in self.lookuplist:
+ #
+ # * env.d
+ # * make.globals
+ # * make.defaults
+ # * make.conf
+ #
+ # Notably absent is "env", since we want to avoid any
+ # interaction with the calling environment that might
+ # lead to unexpected results.
+
+ env_d = (
+ getconfig(
+ os.path.join(eroot, "etc", "profile.env"),
+ tolerant=tolerant,
+ expand=False,
+ )
+ or {}
+ )
+ expand_map = env_d.copy()
+ self._expand_map = expand_map
+
+ # Allow make.globals and make.conf to set paths relative to vars like ${EPREFIX}.
+ expand_map["BROOT"] = broot
+ expand_map["EPREFIX"] = eprefix
+ expand_map["EROOT"] = eroot
+ expand_map["ESYSROOT"] = esysroot
+ expand_map["PORTAGE_CONFIGROOT"] = config_root
+ expand_map["ROOT"] = target_root
+ expand_map["SYSROOT"] = sysroot
+
+ if portage._not_installed:
+ make_globals_path = os.path.join(
+ PORTAGE_BASE_PATH, "cnf", "make.globals"
+ )
+ else:
+ make_globals_path = os.path.join(
+ self.global_config_path, "make.globals"
+ )
+ old_make_globals = os.path.join(config_root, "etc", "make.globals")
+ if os.path.isfile(old_make_globals) and not os.path.samefile(
+ make_globals_path, old_make_globals
+ ):
+ # Don't warn if they refer to the same path, since
+ # that can be used for backward compatibility with
+ # old software.
+ writemsg(
+ "!!! %s\n"
+ % _(
+ "Found obsolete make.globals file: "
+ "'%s', (using '%s' instead)"
+ )
+ % (old_make_globals, make_globals_path),
+ noiselevel=-1,
+ )
+
+ make_globals = getconfig(
+ make_globals_path, tolerant=tolerant, expand=expand_map
+ )
+ if make_globals is None:
+ make_globals = {}
+
+ for k, v in self._default_globals.items():
+ make_globals.setdefault(k, v)
+
+ if config_incrementals is None:
+ self.incrementals = INCREMENTALS
+ else:
+ self.incrementals = config_incrementals
+ if not isinstance(self.incrementals, frozenset):
+ self.incrementals = frozenset(self.incrementals)
+
+ self.module_priority = ("user", "default")
+ self.modules = {}
+ modules_file = os.path.join(config_root, MODULES_FILE_PATH)
+ modules_loader = KeyValuePairFileLoader(modules_file, None, None)
+ modules_dict, modules_errors = modules_loader.load()
+ self.modules["user"] = modules_dict
+ if self.modules["user"] is None:
+ self.modules["user"] = {}
+ user_auxdbmodule = self.modules["user"].get("portdbapi.auxdbmodule")
+ if (
+ user_auxdbmodule is not None
+ and user_auxdbmodule in self._module_aliases
+ ):
+ warnings.warn(
+ "'%s' is deprecated: %s" % (user_auxdbmodule, modules_file)
+ )
+
+ self.modules["default"] = {
+ "portdbapi.auxdbmodule": "portage.cache.flat_hash.mtime_md5_database",
+ }
+
+ self.configlist = []
+
+ # back up our incremental variables:
+ self.configdict = {}
+ self._use_expand_dict = {}
+ # configlist will contain: [ env.d, globals, features, defaults, conf, pkg, backupenv, env ]
+ self.configlist.append({})
+ self.configdict["env.d"] = self.configlist[-1]
+
+ self.configlist.append({})
+ self.configdict["repo"] = self.configlist[-1]
+
+ self.configlist.append({})
+ self.configdict["features"] = self.configlist[-1]
+
+ self.configlist.append({})
+ self.configdict["pkginternal"] = self.configlist[-1]
+
+ # env_d will be None if profile.env doesn't exist.
+ if env_d:
+ self.configdict["env.d"].update(env_d)
+
+ # backupenv is used for calculating incremental variables.
+ if env is None:
+ env = os.environ
+
+ # Avoid potential UnicodeDecodeError exceptions later.
+ env_unicode = dict(
+ (_unicode_decode(k), _unicode_decode(v)) for k, v in env.items()
+ )
+
+ self.backupenv = env_unicode
+
+ if env_d:
+ # Remove duplicate values so they don't override updated
+ # profile.env values later (profile.env is reloaded in each
+ # call to self.regenerate).
+ for k, v in env_d.items():
+ try:
+ if self.backupenv[k] == v:
+ del self.backupenv[k]
+ except KeyError:
+ pass
+ del k, v
+
+ self.configdict["env"] = LazyItemsDict(self.backupenv)
+
+ self.configlist.append(make_globals)
+ self.configdict["globals"] = self.configlist[-1]
+
+ self.make_defaults_use = []
+
+ # Loading Repositories
+ self["PORTAGE_CONFIGROOT"] = config_root
+ self["ROOT"] = target_root
+ self["SYSROOT"] = sysroot
+ self["EPREFIX"] = eprefix
+ self["EROOT"] = eroot
+ self["ESYSROOT"] = esysroot
+ self["BROOT"] = broot
+ known_repos = []
+ portdir = ""
+ portdir_overlay = ""
+ portdir_sync = None
+ for confs in [make_globals, make_conf, self.configdict["env"]]:
+ v = confs.get("PORTDIR")
+ if v is not None:
+ portdir = v
+ known_repos.append(v)
+ v = confs.get("PORTDIR_OVERLAY")
+ if v is not None:
+ portdir_overlay = v
+ known_repos.extend(shlex_split(v))
+ v = confs.get("SYNC")
+ if v is not None:
+ portdir_sync = v
+ if "PORTAGE_RSYNC_EXTRA_OPTS" in confs:
+ self["PORTAGE_RSYNC_EXTRA_OPTS"] = confs["PORTAGE_RSYNC_EXTRA_OPTS"]
+
+ self["PORTDIR"] = portdir
+ self["PORTDIR_OVERLAY"] = portdir_overlay
+ if portdir_sync:
+ self["SYNC"] = portdir_sync
+ self.lookuplist = [self.configdict["env"]]
+ if repositories is None:
+ self.repositories = load_repository_config(self)
+ else:
+ self.repositories = repositories
+
+ known_repos.extend(repo.location for repo in self.repositories)
+ known_repos = frozenset(known_repos)
+
+ self["PORTAGE_REPOSITORIES"] = self.repositories.config_string()
+ self.backup_changes("PORTAGE_REPOSITORIES")
+
+ # filling PORTDIR and PORTDIR_OVERLAY variable for compatibility
+ main_repo = self.repositories.mainRepo()
+ if main_repo is not None:
+ self["PORTDIR"] = main_repo.location
+ self.backup_changes("PORTDIR")
+ expand_map["PORTDIR"] = self["PORTDIR"]
+
+ # repoman controls PORTDIR_OVERLAY via the environment, so no
+ # special cases are needed here.
+ portdir_overlay = list(self.repositories.repoLocationList())
+ if portdir_overlay and portdir_overlay[0] == self["PORTDIR"]:
+ portdir_overlay = portdir_overlay[1:]
+
+ new_ov = []
+ if portdir_overlay:
+ for ov in portdir_overlay:
+ ov = normalize_path(ov)
+ if isdir_raise_eaccess(ov) or portage._sync_mode:
+ new_ov.append(portage._shell_quote(ov))
+ else:
+ writemsg(
+ _("!!! Invalid PORTDIR_OVERLAY" " (not a dir): '%s'\n")
+ % ov,
+ noiselevel=-1,
+ )
+
+ self["PORTDIR_OVERLAY"] = " ".join(new_ov)
+ self.backup_changes("PORTDIR_OVERLAY")
+ expand_map["PORTDIR_OVERLAY"] = self["PORTDIR_OVERLAY"]
+
+ locations_manager.set_port_dirs(self["PORTDIR"], self["PORTDIR_OVERLAY"])
+ locations_manager.load_profiles(self.repositories, known_repos)
+
+ profiles_complex = locations_manager.profiles_complex
+ self.profiles = locations_manager.profiles
+ self.profile_path = locations_manager.profile_path
+ self.user_profile_dir = locations_manager.user_profile_dir
+
+ try:
+ packages_list = [
+ grabfile_package(
+ os.path.join(x.location, "packages"),
+ verify_eapi=True,
+ eapi=x.eapi,
+ eapi_default=None,
+ allow_repo=allow_profile_repo_deps(x),
+ allow_build_id=x.allow_build_id,
+ )
+ for x in profiles_complex
+ ]
+ except EnvironmentError as e:
+ _raise_exc(e)
+
+ self.packages = tuple(stack_lists(packages_list, incremental=1))
+
+ # revmaskdict
+ self.prevmaskdict = {}
+ for x in self.packages:
+ # Negative atoms are filtered by the above stack_lists() call.
+ if not isinstance(x, Atom):
+ x = Atom(x.lstrip("*"))
+ self.prevmaskdict.setdefault(x.cp, []).append(x)
+
+ self.unpack_dependencies = load_unpack_dependencies_configuration(
+ self.repositories
+ )
+
+ mygcfg = {}
+ if profiles_complex:
+ mygcfg_dlists = []
+ for x in profiles_complex:
+ # Prevent accidents triggered by USE="${USE} ..." settings
+ # at the top of make.defaults which caused parent profile
+ # USE to override parent profile package.use settings.
+ # It would be nice to guard USE_EXPAND variables like
+ # this too, but unfortunately USE_EXPAND is not known
+ # until after make.defaults has been evaluated, so that
+ # will require some form of make.defaults preprocessing.
+ expand_map.pop("USE", None)
+ mygcfg_dlists.append(
+ getconfig(
+ os.path.join(x.location, "make.defaults"),
+ tolerant=tolerant,
+ expand=expand_map,
+ recursive=x.portage1_directories,
+ )
+ )
+ self._make_defaults = mygcfg_dlists
+ mygcfg = stack_dicts(mygcfg_dlists, incrementals=self.incrementals)
+ if mygcfg is None:
+ mygcfg = {}
+ self.configlist.append(mygcfg)
+ self.configdict["defaults"] = self.configlist[-1]
+
+ mygcfg = {}
+ for x in make_conf_paths:
+ mygcfg.update(
+ getconfig(
+ x,
+ tolerant=tolerant,
+ allow_sourcing=True,
+ expand=expand_map,
+ recursive=True,
+ )
+ or {}
+ )
+
+ # __* variables set in make.conf are local and are not be propagated.
+ mygcfg = {k: v for k, v in mygcfg.items() if not k.startswith("__")}
+
+ # Don't allow the user to override certain variables in make.conf
+ profile_only_variables = (
+ self.configdict["defaults"].get("PROFILE_ONLY_VARIABLES", "").split()
+ )
+ profile_only_variables = stack_lists([profile_only_variables])
+ non_user_variables = set()
+ non_user_variables.update(profile_only_variables)
+ non_user_variables.update(self._env_blacklist)
+ non_user_variables.update(self._global_only_vars)
+ non_user_variables = frozenset(non_user_variables)
+ self._non_user_variables = non_user_variables
+
+ self._env_d_blacklist = frozenset(
+ chain(
+ profile_only_variables,
+ self._env_blacklist,
+ )
+ )
+ env_d = self.configdict["env.d"]
+ for k in self._env_d_blacklist:
+ env_d.pop(k, None)
+
+ for k in profile_only_variables:
+ mygcfg.pop(k, None)
+
+ self.configlist.append(mygcfg)
+ self.configdict["conf"] = self.configlist[-1]
+
+ self.configlist.append(LazyItemsDict())
+ self.configdict["pkg"] = self.configlist[-1]
+
+ self.configdict["backupenv"] = self.backupenv
+
+ # Don't allow the user to override certain variables in the env
+ for k in profile_only_variables:
+ self.backupenv.pop(k, None)
+
+ self.configlist.append(self.configdict["env"])
+
+ # make lookuplist for loading package.*
+ self.lookuplist = self.configlist[:]
+ self.lookuplist.reverse()
+
+ # Blacklist vars that could interfere with portage internals.
+ for blacklisted in self._env_blacklist:
+ for cfg in self.lookuplist:
+ cfg.pop(blacklisted, None)
+ self.backupenv.pop(blacklisted, None)
+ del blacklisted, cfg
+
+ self["PORTAGE_CONFIGROOT"] = config_root
+ self.backup_changes("PORTAGE_CONFIGROOT")
+ self["ROOT"] = target_root
+ self.backup_changes("ROOT")
+ self["SYSROOT"] = sysroot
+ self.backup_changes("SYSROOT")
+ self["EPREFIX"] = eprefix
+ self.backup_changes("EPREFIX")
+ self["EROOT"] = eroot
+ self.backup_changes("EROOT")
+ self["ESYSROOT"] = esysroot
+ self.backup_changes("ESYSROOT")
+ self["BROOT"] = broot
+ self.backup_changes("BROOT")
+
+ # The prefix of the running portage instance is used in the
+ # ebuild environment to implement the --host-root option for
+ # best_version and has_version.
+ self["PORTAGE_OVERRIDE_EPREFIX"] = portage.const.EPREFIX
+ self.backup_changes("PORTAGE_OVERRIDE_EPREFIX")
+
+ self._ppropertiesdict = portage.dep.ExtendedAtomDict(dict)
+ self._paccept_restrict = portage.dep.ExtendedAtomDict(dict)
+ self._penvdict = portage.dep.ExtendedAtomDict(dict)
+ self._pbashrcdict = {}
+ self._pbashrc = ()
+
+ self._repo_make_defaults = {}
+ for repo in self.repositories.repos_with_profiles():
+ d = (
+ getconfig(
+ os.path.join(repo.location, "profiles", "make.defaults"),
+ tolerant=tolerant,
+ expand=self.configdict["globals"].copy(),
+ recursive=repo.portage1_profiles,
+ )
+ or {}
+ )
+ if d:
+ for k in chain(
+ self._env_blacklist,
+ profile_only_variables,
+ self._global_only_vars,
+ ):
+ d.pop(k, None)
+ self._repo_make_defaults[repo.name] = d
+
+ # Read all USE related files from profiles and optionally from user config.
+ self._use_manager = UseManager(
+ self.repositories,
+ profiles_complex,
+ abs_user_config,
+ self._isStable,
+ user_config=local_config,
+ )
+ # Initialize all USE related variables we track ourselves.
+ self.usemask = self._use_manager.getUseMask()
+ self.useforce = self._use_manager.getUseForce()
+ self.configdict["conf"][
+ "USE"
+ ] = self._use_manager.extract_global_USE_changes(
+ self.configdict["conf"].get("USE", "")
+ )
+
+ # Read license_groups and optionally license_groups and package.license from user config
+ self._license_manager = LicenseManager(
+ locations_manager.profile_locations,
+ abs_user_config,
+ user_config=local_config,
+ )
+ # Extract '*/*' entries from package.license
+ self.configdict["conf"][
+ "ACCEPT_LICENSE"
+ ] = self._license_manager.extract_global_changes(
+ self.configdict["conf"].get("ACCEPT_LICENSE", "")
+ )
+
+ # profile.bashrc
+ self._profile_bashrc = tuple(
+ os.path.isfile(os.path.join(profile.location, "profile.bashrc"))
+ for profile in profiles_complex
+ )
+
+ if local_config:
+ # package.properties
+ propdict = grabdict_package(
+ os.path.join(abs_user_config, "package.properties"),
+ recursive=1,
+ allow_wildcard=True,
+ allow_repo=True,
+ verify_eapi=False,
+ allow_build_id=True,
+ )
+ v = propdict.pop("*/*", None)
+ if v is not None:
+ if "ACCEPT_PROPERTIES" in self.configdict["conf"]:
+ self.configdict["conf"]["ACCEPT_PROPERTIES"] += " " + " ".join(
+ v
+ )
+ else:
+ self.configdict["conf"]["ACCEPT_PROPERTIES"] = " ".join(v)
+ for k, v in propdict.items():
+ self._ppropertiesdict.setdefault(k.cp, {})[k] = v
+
+ # package.accept_restrict
+ d = grabdict_package(
+ os.path.join(abs_user_config, "package.accept_restrict"),
+ recursive=True,
+ allow_wildcard=True,
+ allow_repo=True,
+ verify_eapi=False,
+ allow_build_id=True,
+ )
+ v = d.pop("*/*", None)
+ if v is not None:
+ if "ACCEPT_RESTRICT" in self.configdict["conf"]:
+ self.configdict["conf"]["ACCEPT_RESTRICT"] += " " + " ".join(v)
+ else:
+ self.configdict["conf"]["ACCEPT_RESTRICT"] = " ".join(v)
+ for k, v in d.items():
+ self._paccept_restrict.setdefault(k.cp, {})[k] = v
+
+ # package.env
+ penvdict = grabdict_package(
+ os.path.join(abs_user_config, "package.env"),
+ recursive=1,
+ allow_wildcard=True,
+ allow_repo=True,
+ verify_eapi=False,
+ allow_build_id=True,
+ )
+ v = penvdict.pop("*/*", None)
+ if v is not None:
+ global_wildcard_conf = {}
+ self._grab_pkg_env(v, global_wildcard_conf)
+ incrementals = self.incrementals
+ conf_configdict = self.configdict["conf"]
+ for k, v in global_wildcard_conf.items():
+ if k in incrementals:
+ if k in conf_configdict:
+ conf_configdict[k] = conf_configdict[k] + " " + v
+ else:
+ conf_configdict[k] = v
+ else:
+ conf_configdict[k] = v
+ expand_map[k] = v
+
+ for k, v in penvdict.items():
+ self._penvdict.setdefault(k.cp, {})[k] = v
+
+ # package.bashrc
+ for profile in profiles_complex:
+ if not "profile-bashrcs" in profile.profile_formats:
+ continue
+ self._pbashrcdict[profile] = portage.dep.ExtendedAtomDict(dict)
+ bashrc = grabdict_package(
+ os.path.join(profile.location, "package.bashrc"),
+ recursive=1,
+ allow_wildcard=True,
+ allow_repo=allow_profile_repo_deps(profile),
+ verify_eapi=True,
+ eapi=profile.eapi,
+ eapi_default=None,
+ allow_build_id=profile.allow_build_id,
+ )
+ if not bashrc:
+ continue
+
+ for k, v in bashrc.items():
+ envfiles = [
+ os.path.join(profile.location, "bashrc", envname)
+ for envname in v
+ ]
+ self._pbashrcdict[profile].setdefault(k.cp, {}).setdefault(
+ k, []
+ ).extend(envfiles)
+
+ # getting categories from an external file now
+ self.categories = [
+ grabfile(os.path.join(x, "categories"))
+ for x in locations_manager.profile_and_user_locations
+ ]
+ category_re = dbapi._category_re
+ # categories used to be a tuple, but now we use a frozenset
+ # for hashed category validation in pordbapi.cp_list()
+ self.categories = frozenset(
+ x
+ for x in stack_lists(self.categories, incremental=1)
+ if category_re.match(x) is not None
+ )
+
+ archlist = [
+ grabfile(os.path.join(x, "arch.list"))
+ for x in locations_manager.profile_and_user_locations
+ ]
+ archlist = sorted(stack_lists(archlist, incremental=1))
+ self.configdict["conf"]["PORTAGE_ARCHLIST"] = " ".join(archlist)
+
+ pkgprovidedlines = []
+ for x in profiles_complex:
+ provpath = os.path.join(x.location, "package.provided")
+ if os.path.exists(provpath):
+ if _get_eapi_attrs(x.eapi).allows_package_provided:
+ pkgprovidedlines.append(
+ grabfile(provpath, recursive=x.portage1_directories)
+ )
+ else:
+ # TODO: bail out?
+ writemsg(
+ (
+ _("!!! package.provided not allowed in EAPI %s: ")
+ % x.eapi
+ )
+ + x.location
+ + "\n",
+ noiselevel=-1,
+ )
+
+ pkgprovidedlines = stack_lists(pkgprovidedlines, incremental=1)
+ has_invalid_data = False
+ for x in range(len(pkgprovidedlines) - 1, -1, -1):
+ myline = pkgprovidedlines[x]
+ if not isvalidatom("=" + myline):
+ writemsg(
+ _("Invalid package name in package.provided: %s\n") % myline,
+ noiselevel=-1,
+ )
+ has_invalid_data = True
+ del pkgprovidedlines[x]
+ continue
+ cpvr = catpkgsplit(pkgprovidedlines[x])
+ if not cpvr or cpvr[0] == "null":
+ writemsg(
+ _("Invalid package name in package.provided: ")
+ + pkgprovidedlines[x]
+ + "\n",
+ noiselevel=-1,
+ )
+ has_invalid_data = True
+ del pkgprovidedlines[x]
+ continue
+ if has_invalid_data:
+ writemsg(
+ _("See portage(5) for correct package.provided usage.\n"),
+ noiselevel=-1,
+ )
+ self.pprovideddict = {}
+ for x in pkgprovidedlines:
+ x_split = catpkgsplit(x)
+ if x_split is None:
+ continue
+ mycatpkg = cpv_getkey(x)
+ if mycatpkg in self.pprovideddict:
+ self.pprovideddict[mycatpkg].append(x)
+ else:
+ self.pprovideddict[mycatpkg] = [x]
+
+ # reasonable defaults; this is important as without USE_ORDER,
+ # USE will always be "" (nothing set)!
+ if "USE_ORDER" not in self:
+ self[
+ "USE_ORDER"
+ ] = "env:pkg:conf:defaults:pkginternal:features:repo:env.d"
+ self.backup_changes("USE_ORDER")
+
+ if "CBUILD" not in self and "CHOST" in self:
+ self["CBUILD"] = self["CHOST"]
+ self.backup_changes("CBUILD")
+
+ if "USERLAND" not in self:
+ # Set default USERLAND so that our test cases can assume that
+ # it's always set. This allows isolated-functions.sh to avoid
+ # calling uname -s when sourced.
+ system = platform.system()
+ if system is not None and (
+ system.endswith("BSD") or system == "DragonFly"
+ ):
+ self["USERLAND"] = "BSD"
+ else:
+ self["USERLAND"] = "GNU"
+ self.backup_changes("USERLAND")
+
+ default_inst_ids = {
+ "PORTAGE_INST_GID": "0",
+ "PORTAGE_INST_UID": "0",
+ }
+
+ eroot_or_parent = first_existing(eroot)
+ unprivileged = False
+ try:
+ eroot_st = os.stat(eroot_or_parent)
+ except OSError:
+ pass
+ else:
+
+ if portage.data._unprivileged_mode(eroot_or_parent, eroot_st):
+ unprivileged = True
+
+ default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
+ default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
+
+ if "PORTAGE_USERNAME" not in self:
+ try:
+ pwd_struct = pwd.getpwuid(eroot_st.st_uid)
+ except KeyError:
+ pass
+ else:
+ self["PORTAGE_USERNAME"] = pwd_struct.pw_name
+ self.backup_changes("PORTAGE_USERNAME")
+
+ if "PORTAGE_GRPNAME" not in self:
+ try:
+ grp_struct = grp.getgrgid(eroot_st.st_gid)
+ except KeyError:
+ pass
+ else:
+ self["PORTAGE_GRPNAME"] = grp_struct.gr_name
+ self.backup_changes("PORTAGE_GRPNAME")
+
+ for var, default_val in default_inst_ids.items():
+ try:
+ self[var] = str(int(self.get(var, default_val)))
+ except ValueError:
+ writemsg(
+ _(
+ "!!! %s='%s' is not a valid integer. "
+ "Falling back to %s.\n"
+ )
+ % (var, self[var], default_val),
+ noiselevel=-1,
+ )
+ self[var] = default_val
+ self.backup_changes(var)
+
+ self.depcachedir = self.get("PORTAGE_DEPCACHEDIR")
+ if self.depcachedir is None:
+ self.depcachedir = os.path.join(
+ os.sep, portage.const.EPREFIX, DEPCACHE_PATH.lstrip(os.sep)
+ )
+ if unprivileged and target_root != os.sep:
+ # In unprivileged mode, automatically make
+ # depcachedir relative to target_root if the
+ # default depcachedir is not writable.
+ if not os.access(first_existing(self.depcachedir), os.W_OK):
+ self.depcachedir = os.path.join(
+ eroot, DEPCACHE_PATH.lstrip(os.sep)
+ )
+
+ self["PORTAGE_DEPCACHEDIR"] = self.depcachedir
+ self.backup_changes("PORTAGE_DEPCACHEDIR")
+
+ if portage._internal_caller:
+ self["PORTAGE_INTERNAL_CALLER"] = "1"
+ self.backup_changes("PORTAGE_INTERNAL_CALLER")
+
+ # initialize self.features
+ self.regenerate()
+ feature_use = []
+ if "test" in self.features:
+ feature_use.append("test")
+ self.configdict["features"]["USE"] = self._default_features_use = " ".join(
+ feature_use
+ )
+ if feature_use:
+ # Regenerate USE so that the initial "test" flag state is
+ # correct for evaluation of !test? conditionals in RESTRICT.
+ self.regenerate()
+ if 'force-multilib' in self.features:
+ #add multilib_abi internally to list of USE_EXPANDed vars
+ self["USE_EXPAND"] = "MULTILIB_ABI" + " " + self.get("USE_EXPAND", "")
+ self.backup_changes("USE_EXPAND")
+ default_abi = self.configdict["defaults"].get('DEFAULT_ABI', '').strip()
+ if default_abi:
+ self.configdict["defaults"]["USE"] = self.configdict["defaults"].get("USE", "") + " multilib_abi_" + default_abi
- if unprivileged:
- self.features.add('unprivileged')
-
- if bsd_chflags:
- self.features.add('chflags')
-
- self._init_iuse()
-
- self._validate_commands()
-
- for k in self._case_insensitive_vars:
- if k in self:
- self[k] = self[k].lower()
- self.backup_changes(k)
-
- # The first constructed config object initializes these modules,
- # and subsequent calls to the _init() functions have no effect.
- portage.output._init(config_root=self['PORTAGE_CONFIGROOT'])
- portage.data._init(self)
-
- if mycpv:
- self.setcpv(mycpv)
-
- def _init_iuse(self):
- self._iuse_effective = self._calc_iuse_effective()
- self._iuse_implicit_match = _iuse_implicit_match_cache(self)
-
- @property
- def mygcfg(self):
- warnings.warn("portage.config.mygcfg is deprecated", stacklevel=3)
- return {}
-
- def _validate_commands(self):
- for k in special_env_vars.validate_commands:
- v = self.get(k)
- if v is not None:
- valid, v_split = validate_cmd_var(v)
-
- if not valid:
- if v_split:
- writemsg_level(_("%s setting is invalid: '%s'\n") % \
- (k, v), level=logging.ERROR, noiselevel=-1)
-
- # before deleting the invalid setting, backup
- # the default value if available
- v = self.configdict['globals'].get(k)
- if v is not None:
- default_valid, v_split = validate_cmd_var(v)
- if not default_valid:
- if v_split:
- writemsg_level(
- _("%s setting from make.globals" + \
- " is invalid: '%s'\n") % \
- (k, v), level=logging.ERROR, noiselevel=-1)
- # make.globals seems corrupt, so try for
- # a hardcoded default instead
- v = self._default_globals.get(k)
-
- # delete all settings for this key,
- # including the invalid one
- del self[k]
- self.backupenv.pop(k, None)
- if v:
- # restore validated default
- self.configdict['globals'][k] = v
-
- def _init_dirs(self):
- """
- Create a few directories that are critical to portage operation
- """
- if not os.access(self["EROOT"], os.W_OK):
- return
-
- # gid, mode, mask, preserve_perms
- dir_mode_map = {
- "tmp" : ( -1, 0o1777, 0, True),
- "var/tmp" : ( -1, 0o1777, 0, True),
- PRIVATE_PATH : (portage_gid, 0o2750, 0o2, False),
- CACHE_PATH : (portage_gid, 0o755, 0o2, False)
- }
-
- for mypath, (gid, mode, modemask, preserve_perms) \
- in dir_mode_map.items():
- mydir = os.path.join(self["EROOT"], mypath)
- if preserve_perms and os.path.isdir(mydir):
- # Only adjust permissions on some directories if
- # they don't exist yet. This gives freedom to the
- # user to adjust permissions to suit their taste.
- continue
- try:
- ensure_dirs(mydir, gid=gid, mode=mode, mask=modemask)
- except PortageException as e:
- writemsg(_("!!! Directory initialization failed: '%s'\n") % mydir,
- noiselevel=-1)
- writemsg("!!! %s\n" % str(e),
- noiselevel=-1)
-
- @property
- def _keywords_manager(self):
- if self._keywords_manager_obj is None:
- self._keywords_manager_obj = KeywordsManager(
- self._locations_manager.profiles_complex,
- self._locations_manager.abs_user_config,
- self.local_config,
- global_accept_keywords=self.configdict["defaults"].get("ACCEPT_KEYWORDS", ""))
- return self._keywords_manager_obj
-
- @property
- def _mask_manager(self):
- if self._mask_manager_obj is None:
- self._mask_manager_obj = MaskManager(self.repositories,
- self._locations_manager.profiles_complex,
- self._locations_manager.abs_user_config,
- user_config=self.local_config,
- strict_umatched_removal=self._unmatched_removal)
- return self._mask_manager_obj
-
- @property
- def _virtuals_manager(self):
- if self._virtuals_manager_obj is None:
- self._virtuals_manager_obj = VirtualsManager(self.profiles)
- return self._virtuals_manager_obj
-
- @property
- def pkeywordsdict(self):
- result = self._keywords_manager.pkeywordsdict.copy()
- for k, v in result.items():
- result[k] = v.copy()
- return result
-
- @property
- def pmaskdict(self):
- return self._mask_manager._pmaskdict.copy()
-
- @property
- def punmaskdict(self):
- return self._mask_manager._punmaskdict.copy()
-
- @property
- def soname_provided(self):
- if self._soname_provided is None:
- d = stack_dictlist((grabdict(
- os.path.join(x, "soname.provided"), recursive=True)
- for x in self.profiles), incremental=True)
- self._soname_provided = frozenset(SonameAtom(cat, soname)
- for cat, sonames in d.items() for soname in sonames)
- return self._soname_provided
-
- def expandLicenseTokens(self, tokens):
- """ Take a token from ACCEPT_LICENSE or package.license and expand it
- if it's a group token (indicated by @) or just return it if it's not a
- group. If a group is negated then negate all group elements."""
- return self._license_manager.expandLicenseTokens(tokens)
-
- def validate(self):
- """Validate miscellaneous settings and display warnings if necessary.
- (This code was previously in the global scope of portage.py)"""
-
- groups = self.get("ACCEPT_KEYWORDS", "").split()
- archlist = self.archlist()
- if not archlist:
- writemsg(_("--- 'profiles/arch.list' is empty or "
- "not available. Empty ebuild repository?\n"), noiselevel=1)
- else:
- for group in groups:
- if group not in archlist and \
- not (group.startswith("-") and group[1:] in archlist) and \
- group not in ("*", "~*", "**"):
- writemsg(_("!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
- noiselevel=-1)
-
- profile_broken = False
-
- # getmaskingstatus requires ARCH for ACCEPT_KEYWORDS support
- arch = self.get('ARCH')
- if not self.profile_path or not arch:
- profile_broken = True
- else:
- # If any one of these files exists, then
- # the profile is considered valid.
- for x in ("make.defaults", "parent",
- "packages", "use.force", "use.mask"):
- if exists_raise_eaccess(os.path.join(self.profile_path, x)):
- break
- else:
- profile_broken = True
-
- if profile_broken and not portage._sync_mode:
- abs_profile_path = None
- for x in (PROFILE_PATH, 'etc/make.profile'):
- x = os.path.join(self["PORTAGE_CONFIGROOT"], x)
- try:
- os.lstat(x)
- except OSError:
- pass
- else:
- abs_profile_path = x
- break
-
- if abs_profile_path is None:
- abs_profile_path = os.path.join(self["PORTAGE_CONFIGROOT"],
- PROFILE_PATH)
-
- writemsg(_("\n\n!!! %s is not a symlink and will probably prevent most merges.\n") % abs_profile_path,
- noiselevel=-1)
- writemsg(_("!!! It should point into a profile within %s/profiles/\n") % self["PORTDIR"])
- writemsg(_("!!! (You can safely ignore this message when syncing. It's harmless.)\n\n\n"))
-
- abs_user_virtuals = os.path.join(self["PORTAGE_CONFIGROOT"],
- USER_VIRTUALS_FILE)
- if os.path.exists(abs_user_virtuals):
- writemsg("\n!!! /etc/portage/virtuals is deprecated in favor of\n")
- writemsg("!!! /etc/portage/profile/virtuals. Please move it to\n")
- writemsg("!!! this new location.\n\n")
-
- if not sandbox_capable and \
- ("sandbox" in self.features or "usersandbox" in self.features):
- if self.profile_path is not None and \
- os.path.realpath(self.profile_path) == \
- os.path.realpath(os.path.join(
- self["PORTAGE_CONFIGROOT"], PROFILE_PATH)):
- # Don't show this warning when running repoman and the
- # sandbox feature came from a profile that doesn't belong
- # to the user.
- writemsg(colorize("BAD", _("!!! Problem with sandbox"
- " binary. Disabling...\n\n")), noiselevel=-1)
-
- if "fakeroot" in self.features and \
- not fakeroot_capable:
- writemsg(_("!!! FEATURES=fakeroot is enabled, but the "
- "fakeroot binary is not installed.\n"), noiselevel=-1)
-
- if "webrsync-gpg" in self.features:
- writemsg(_("!!! FEATURES=webrsync-gpg is deprecated, see the make.conf(5) man page.\n"),
- noiselevel=-1)
-
- if os.getuid() == 0 and not hasattr(os, "setgroups"):
- warning_shown = False
-
- if "userpriv" in self.features:
- writemsg(_("!!! FEATURES=userpriv is enabled, but "
- "os.setgroups is not available.\n"), noiselevel=-1)
- warning_shown = True
-
- if "userfetch" in self.features:
- writemsg(_("!!! FEATURES=userfetch is enabled, but "
- "os.setgroups is not available.\n"), noiselevel=-1)
- warning_shown = True
-
- if warning_shown and platform.python_implementation() == 'PyPy':
- writemsg(_("!!! See https://bugs.pypy.org/issue833 for details.\n"),
- noiselevel=-1)
-
- binpkg_compression = self.get("BINPKG_COMPRESS")
- if binpkg_compression:
- try:
- compression = _compressors[binpkg_compression]
- except KeyError as e:
- writemsg("!!! BINPKG_COMPRESS contains invalid or "
- "unsupported compression method: %s" % e.args[0],
- noiselevel=-1)
- else:
- try:
- compression_binary = shlex_split(
- portage.util.varexpand(compression["compress"],
- mydict=self))[0]
- except IndexError as e:
- writemsg("!!! BINPKG_COMPRESS contains invalid or "
- "unsupported compression method: %s" % e.args[0],
- noiselevel=-1)
- else:
- if portage.process.find_binary(
- compression_binary) is None:
- missing_package = compression["package"]
- writemsg("!!! BINPKG_COMPRESS unsupported %s. "
- "Missing package: %s" %
- (binpkg_compression, missing_package),
- noiselevel=-1)
-
- def load_best_module(self,property_string):
- best_mod = best_from_dict(property_string,self.modules,self.module_priority)
- mod = None
- try:
- mod = load_mod(best_mod)
- except ImportError:
- if best_mod in self._module_aliases:
- mod = load_mod(self._module_aliases[best_mod])
- elif not best_mod.startswith("cache."):
- raise
- else:
- best_mod = "portage." + best_mod
- try:
- mod = load_mod(best_mod)
- except ImportError:
- raise
- return mod
-
- def lock(self):
- self.locked = 1
-
- def unlock(self):
- self.locked = 0
-
- def modifying(self):
- if self.locked:
- raise Exception(_("Configuration is locked."))
-
- def backup_changes(self,key=None):
- self.modifying()
- if key and key in self.configdict["env"]:
- self.backupenv[key] = copy.deepcopy(self.configdict["env"][key])
- else:
- raise KeyError(_("No such key defined in environment: %s") % key)
-
- def reset(self, keeping_pkg=0, use_cache=None):
- """
- Restore environment from self.backupenv, call self.regenerate()
- @param keeping_pkg: Should we keep the setcpv() data or delete it.
- @type keeping_pkg: Boolean
- @rype: None
- """
-
- if use_cache is not None:
- warnings.warn("The use_cache parameter for config.reset() is deprecated and without effect.",
- DeprecationWarning, stacklevel=2)
-
- self.modifying()
- self.configdict["env"].clear()
- self.configdict["env"].update(self.backupenv)
-
- self.modifiedkeys = []
- if not keeping_pkg:
- self.mycpv = None
- self._setcpv_args_hash = None
- self.puse = ""
- del self._penv[:]
- self.configdict["pkg"].clear()
- self.configdict["pkginternal"].clear()
- self.configdict["features"]["USE"] = self._default_features_use
- self.configdict["repo"].clear()
- self.configdict["defaults"]["USE"] = \
- " ".join(self.make_defaults_use)
- self.usemask = self._use_manager.getUseMask()
- self.useforce = self._use_manager.getUseForce()
- self.regenerate()
-
- class _lazy_vars:
-
- __slots__ = ('built_use', 'settings', 'values')
-
- def __init__(self, built_use, settings):
- self.built_use = built_use
- self.settings = settings
- self.values = None
-
- def __getitem__(self, k):
- if self.values is None:
- self.values = self._init_values()
- return self.values[k]
-
- def _init_values(self):
- values = {}
- settings = self.settings
- use = self.built_use
- if use is None:
- use = frozenset(settings['PORTAGE_USE'].split())
-
- values['ACCEPT_LICENSE'] = settings._license_manager.get_prunned_accept_license( \
- settings.mycpv, use, settings.get('LICENSE', ''), settings.get('SLOT'), settings.get('PORTAGE_REPO_NAME'))
- values['PORTAGE_PROPERTIES'] = self._flatten('PROPERTIES', use, settings)
- values['PORTAGE_RESTRICT'] = self._flatten('RESTRICT', use, settings)
- return values
-
- def _flatten(self, var, use, settings):
- try:
- restrict = set(use_reduce(settings.get(var, ''), uselist=use, flat=True))
- except InvalidDependString:
- restrict = set()
- return ' '.join(sorted(restrict))
-
- class _lazy_use_expand:
- """
- Lazily evaluate USE_EXPAND variables since they are only needed when
- an ebuild shell is spawned. Variables values are made consistent with
- the previously calculated USE settings.
- """
-
- def __init__(self, settings, unfiltered_use,
- use, usemask, iuse_effective,
- use_expand_split, use_expand_dict):
- self._settings = settings
- self._unfiltered_use = unfiltered_use
- self._use = use
- self._usemask = usemask
- self._iuse_effective = iuse_effective
- self._use_expand_split = use_expand_split
- self._use_expand_dict = use_expand_dict
-
- def __getitem__(self, key):
- prefix = key.lower() + '_'
- prefix_len = len(prefix)
- expand_flags = set( x[prefix_len:] for x in self._use \
- if x[:prefix_len] == prefix )
- var_split = self._use_expand_dict.get(key, '').split()
- # Preserve the order of var_split because it can matter for things
- # like LINGUAS.
- var_split = [ x for x in var_split if x in expand_flags ]
- var_split.extend(expand_flags.difference(var_split))
- has_wildcard = '*' in expand_flags
- if has_wildcard:
- var_split = [ x for x in var_split if x != "*" ]
- has_iuse = set()
- for x in self._iuse_effective:
- if x[:prefix_len] == prefix:
- has_iuse.add(x[prefix_len:])
- if has_wildcard:
- # * means to enable everything in IUSE that's not masked
- if has_iuse:
- usemask = self._usemask
- for suffix in has_iuse:
- x = prefix + suffix
- if x not in usemask:
- if suffix not in expand_flags:
- var_split.append(suffix)
- else:
- # If there is a wildcard and no matching flags in IUSE then
- # LINGUAS should be unset so that all .mo files are
- # installed.
- var_split = []
- # Make the flags unique and filter them according to IUSE.
- # Also, continue to preserve order for things like LINGUAS
- # and filter any duplicates that variable may contain.
- filtered_var_split = []
- remaining = has_iuse.intersection(var_split)
- for x in var_split:
- if x in remaining:
- remaining.remove(x)
- filtered_var_split.append(x)
- var_split = filtered_var_split
-
- return ' '.join(var_split)
-
- def _setcpv_recursion_gate(f):
- """
- Raise AssertionError for recursive setcpv calls.
- """
- def wrapper(self, *args, **kwargs):
- if hasattr(self, '_setcpv_active'):
- raise AssertionError('setcpv recursion detected')
- self._setcpv_active = True
- try:
- return f(self, *args, **kwargs)
- finally:
- del self._setcpv_active
- return wrapper
-
- @_setcpv_recursion_gate
- def setcpv(self, mycpv, use_cache=None, mydb=None):
- """
- Load a particular CPV into the config, this lets us see the
- Default USE flags for a particular ebuild as well as the USE
- flags from package.use.
-
- @param mycpv: A cpv to load
- @type mycpv: string
- @param mydb: a dbapi instance that supports aux_get with the IUSE key.
- @type mydb: dbapi or derivative.
- @rtype: None
- """
-
- if use_cache is not None:
- warnings.warn("The use_cache parameter for config.setcpv() is deprecated and without effect.",
- DeprecationWarning, stacklevel=2)
-
- self.modifying()
-
- pkg = None
- built_use = None
- explicit_iuse = None
- if not isinstance(mycpv, str):
- pkg = mycpv
- mycpv = pkg.cpv
- mydb = pkg._metadata
- explicit_iuse = pkg.iuse.all
- args_hash = (mycpv, id(pkg))
- if pkg.built:
- built_use = pkg.use.enabled
- else:
- args_hash = (mycpv, id(mydb))
-
- if args_hash == self._setcpv_args_hash:
- return
- self._setcpv_args_hash = args_hash
-
- has_changed = False
- self.mycpv = mycpv
- cat, pf = catsplit(mycpv)
- cp = cpv_getkey(mycpv)
- cpv_slot = self.mycpv
- pkginternaluse = ""
- pkginternaluse_list = []
- feature_use = []
- iuse = ""
- pkg_configdict = self.configdict["pkg"]
- previous_iuse = pkg_configdict.get("IUSE")
- previous_iuse_effective = pkg_configdict.get("IUSE_EFFECTIVE")
- previous_features = pkg_configdict.get("FEATURES")
- previous_penv = self._penv
-
- aux_keys = self._setcpv_aux_keys
-
- # Discard any existing metadata and package.env settings from
- # the previous package instance.
- pkg_configdict.clear()
-
- pkg_configdict["CATEGORY"] = cat
- pkg_configdict["PF"] = pf
- repository = None
- eapi = None
- if mydb:
- if not hasattr(mydb, "aux_get"):
- for k in aux_keys:
- if k in mydb:
- # Make these lazy, since __getitem__ triggers
- # evaluation of USE conditionals which can't
- # occur until PORTAGE_USE is calculated below.
- pkg_configdict.addLazySingleton(k,
- mydb.__getitem__, k)
- else:
- # When calling dbapi.aux_get(), grab USE for built/installed
- # packages since we want to save it PORTAGE_BUILT_USE for
- # evaluating conditional USE deps in atoms passed via IPC to
- # helpers like has_version and best_version.
- aux_keys = set(aux_keys)
- if hasattr(mydb, '_aux_cache_keys'):
- aux_keys = aux_keys.intersection(mydb._aux_cache_keys)
- aux_keys.add('USE')
- aux_keys = list(aux_keys)
- for k, v in zip(aux_keys, mydb.aux_get(self.mycpv, aux_keys)):
- pkg_configdict[k] = v
- built_use = frozenset(pkg_configdict.pop('USE').split())
- if not built_use:
- # Empty USE means this dbapi instance does not contain
- # built packages.
- built_use = None
- eapi = pkg_configdict['EAPI']
-
- repository = pkg_configdict.pop("repository", None)
- if repository is not None:
- pkg_configdict["PORTAGE_REPO_NAME"] = repository
- iuse = pkg_configdict["IUSE"]
- if pkg is None:
- self.mycpv = _pkg_str(self.mycpv, metadata=pkg_configdict,
- settings=self)
- cpv_slot = self.mycpv
- else:
- cpv_slot = pkg
- for x in iuse.split():
- if x.startswith("+"):
- pkginternaluse_list.append(x[1:])
- elif x.startswith("-"):
- pkginternaluse_list.append(x)
- pkginternaluse = " ".join(pkginternaluse_list)
-
- eapi_attrs = _get_eapi_attrs(eapi)
-
- if pkginternaluse != self.configdict["pkginternal"].get("USE", ""):
- self.configdict["pkginternal"]["USE"] = pkginternaluse
- has_changed = True
-
- repo_env = []
- if repository and repository != Package.UNKNOWN_REPO:
- repos = []
- try:
- repos.extend(repo.name for repo in
- self.repositories[repository].masters)
- except KeyError:
- pass
- repos.append(repository)
- for repo in repos:
- d = self._repo_make_defaults.get(repo)
- if d is None:
- d = {}
- else:
- # make a copy, since we might modify it with
- # package.use settings
- d = d.copy()
- cpdict = self._use_manager._repo_puse_dict.get(repo, {}).get(cp)
- if cpdict:
- repo_puse = ordered_by_atom_specificity(cpdict, cpv_slot)
- if repo_puse:
- for x in repo_puse:
- d["USE"] = d.get("USE", "") + " " + " ".join(x)
- if d:
- repo_env.append(d)
-
- if repo_env or self.configdict["repo"]:
- self.configdict["repo"].clear()
- self.configdict["repo"].update(stack_dicts(repo_env,
- incrementals=self.incrementals))
- has_changed = True
-
- defaults = []
- for i, pkgprofileuse_dict in enumerate(self._use_manager._pkgprofileuse):
- if self.make_defaults_use[i]:
- defaults.append(self.make_defaults_use[i])
- cpdict = pkgprofileuse_dict.get(cp)
- if cpdict:
- pkg_defaults = ordered_by_atom_specificity(cpdict, cpv_slot)
- if pkg_defaults:
- defaults.extend(pkg_defaults)
- defaults = " ".join(defaults)
++
+ if unprivileged:
+ self.features.add("unprivileged")
+
+ if bsd_chflags:
+ self.features.add("chflags")
+
+ self._init_iuse()
+
+ self._validate_commands()
+
+ for k in self._case_insensitive_vars:
+ if k in self:
+ self[k] = self[k].lower()
+ self.backup_changes(k)
+
+ # The first constructed config object initializes these modules,
+ # and subsequent calls to the _init() functions have no effect.
+ portage.output._init(config_root=self["PORTAGE_CONFIGROOT"])
+ portage.data._init(self)
+
+ if mycpv:
+ self.setcpv(mycpv)
+
+ def _init_iuse(self):
+ self._iuse_effective = self._calc_iuse_effective()
+ self._iuse_implicit_match = _iuse_implicit_match_cache(self)
+
+ @property
+ def mygcfg(self):
+ warnings.warn("portage.config.mygcfg is deprecated", stacklevel=3)
+ return {}
+
+ def _validate_commands(self):
+ for k in special_env_vars.validate_commands:
+ v = self.get(k)
+ if v is not None:
+ valid, v_split = validate_cmd_var(v)
+
+ if not valid:
+ if v_split:
+ writemsg_level(
+ _("%s setting is invalid: '%s'\n") % (k, v),
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+
+ # before deleting the invalid setting, backup
+ # the default value if available
+ v = self.configdict["globals"].get(k)
+ if v is not None:
+ default_valid, v_split = validate_cmd_var(v)
+ if not default_valid:
+ if v_split:
+ writemsg_level(
+ _(
+ "%s setting from make.globals"
+ + " is invalid: '%s'\n"
+ )
+ % (k, v),
+ level=logging.ERROR,
+ noiselevel=-1,
+ )
+ # make.globals seems corrupt, so try for
+ # a hardcoded default instead
+ v = self._default_globals.get(k)
+
+ # delete all settings for this key,
+ # including the invalid one
+ del self[k]
+ self.backupenv.pop(k, None)
+ if v:
+ # restore validated default
+ self.configdict["globals"][k] = v
+
+ def _init_dirs(self):
+ """
+ Create a few directories that are critical to portage operation
+ """
+ if not os.access(self["EROOT"], os.W_OK):
+ return
+
+ # gid, mode, mask, preserve_perms
+ dir_mode_map = {
+ "tmp": (-1, 0o1777, 0, True),
+ "var/tmp": (-1, 0o1777, 0, True),
+ PRIVATE_PATH: (portage_gid, 0o2750, 0o2, False),
+ CACHE_PATH: (portage_gid, 0o755, 0o2, False),
+ }
+
+ for mypath, (gid, mode, modemask, preserve_perms) in dir_mode_map.items():
+ mydir = os.path.join(self["EROOT"], mypath)
+ if preserve_perms and os.path.isdir(mydir):
+ # Only adjust permissions on some directories if
+ # they don't exist yet. This gives freedom to the
+ # user to adjust permissions to suit their taste.
+ continue
+ try:
+ ensure_dirs(mydir, gid=gid, mode=mode, mask=modemask)
+ except PortageException as e:
+ writemsg(
+ _("!!! Directory initialization failed: '%s'\n") % mydir,
+ noiselevel=-1,
+ )
+ writemsg("!!! %s\n" % str(e), noiselevel=-1)
+
+ @property
+ def _keywords_manager(self):
+ if self._keywords_manager_obj is None:
+ self._keywords_manager_obj = KeywordsManager(
+ self._locations_manager.profiles_complex,
+ self._locations_manager.abs_user_config,
+ self.local_config,
+ global_accept_keywords=self.configdict["defaults"].get(
+ "ACCEPT_KEYWORDS", ""
+ ),
+ )
+ return self._keywords_manager_obj
+
+ @property
+ def _mask_manager(self):
+ if self._mask_manager_obj is None:
+ self._mask_manager_obj = MaskManager(
+ self.repositories,
+ self._locations_manager.profiles_complex,
+ self._locations_manager.abs_user_config,
+ user_config=self.local_config,
+ strict_umatched_removal=self._unmatched_removal,
+ )
+ return self._mask_manager_obj
+
+ @property
+ def _virtuals_manager(self):
+ if self._virtuals_manager_obj is None:
+ self._virtuals_manager_obj = VirtualsManager(self.profiles)
+ return self._virtuals_manager_obj
+
+ @property
+ def pkeywordsdict(self):
+ result = self._keywords_manager.pkeywordsdict.copy()
+ for k, v in result.items():
+ result[k] = v.copy()
+ return result
+
+ @property
+ def pmaskdict(self):
+ return self._mask_manager._pmaskdict.copy()
+
+ @property
+ def punmaskdict(self):
+ return self._mask_manager._punmaskdict.copy()
+
+ @property
+ def soname_provided(self):
+ if self._soname_provided is None:
+ d = stack_dictlist(
+ (
+ grabdict(os.path.join(x, "soname.provided"), recursive=True)
+ for x in self.profiles
+ ),
+ incremental=True,
+ )
+ self._soname_provided = frozenset(
+ SonameAtom(cat, soname)
+ for cat, sonames in d.items()
+ for soname in sonames
+ )
+ return self._soname_provided
+
+ def expandLicenseTokens(self, tokens):
+ """Take a token from ACCEPT_LICENSE or package.license and expand it
+ if it's a group token (indicated by @) or just return it if it's not a
+ group. If a group is negated then negate all group elements."""
+ return self._license_manager.expandLicenseTokens(tokens)
+
+ def validate(self):
+ """Validate miscellaneous settings and display warnings if necessary.
+ (This code was previously in the global scope of portage.py)"""
+
+ groups = self.get("ACCEPT_KEYWORDS", "").split()
+ archlist = self.archlist()
+ if not archlist:
+ writemsg(
+ _(
+ "--- 'profiles/arch.list' is empty or "
+ "not available. Empty ebuild repository?\n"
+ ),
+ noiselevel=1,
+ )
+ else:
+ for group in groups:
+ if (
+ group not in archlist
+ and not (group.startswith("-") and group[1:] in archlist)
+ and group not in ("*", "~*", "**")
+ ):
+ writemsg(
+ _("!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
+ noiselevel=-1,
+ )
+
+ profile_broken = False
+
+ # getmaskingstatus requires ARCH for ACCEPT_KEYWORDS support
+ arch = self.get("ARCH")
+ if not self.profile_path or not arch:
+ profile_broken = True
+ else:
+ # If any one of these files exists, then
+ # the profile is considered valid.
+ for x in ("make.defaults", "parent", "packages", "use.force", "use.mask"):
+ if exists_raise_eaccess(os.path.join(self.profile_path, x)):
+ break
+ else:
+ profile_broken = True
+
+ if profile_broken and not portage._sync_mode:
+ abs_profile_path = None
+ for x in (PROFILE_PATH, "etc/make.profile"):
+ x = os.path.join(self["PORTAGE_CONFIGROOT"], x)
+ try:
+ os.lstat(x)
+ except OSError:
+ pass
+ else:
+ abs_profile_path = x
+ break
+
+ if abs_profile_path is None:
+ abs_profile_path = os.path.join(
+ self["PORTAGE_CONFIGROOT"], PROFILE_PATH
+ )
+
+ writemsg(
+ _(
+ "\n\n!!! %s is not a symlink and will probably prevent most merges.\n"
+ )
+ % abs_profile_path,
+ noiselevel=-1,
+ )
+ writemsg(
+ _("!!! It should point into a profile within %s/profiles/\n")
+ % self["PORTDIR"]
+ )
+ writemsg(
+ _(
+ "!!! (You can safely ignore this message when syncing. It's harmless.)\n\n\n"
+ )
+ )
+
+ abs_user_virtuals = os.path.join(self["PORTAGE_CONFIGROOT"], USER_VIRTUALS_FILE)
+ if os.path.exists(abs_user_virtuals):
+ writemsg("\n!!! /etc/portage/virtuals is deprecated in favor of\n")
+ writemsg("!!! /etc/portage/profile/virtuals. Please move it to\n")
+ writemsg("!!! this new location.\n\n")
+
+ if not sandbox_capable and (
+ "sandbox" in self.features or "usersandbox" in self.features
+ ):
+ if self.profile_path is not None and os.path.realpath(
+ self.profile_path
+ ) == os.path.realpath(
+ os.path.join(self["PORTAGE_CONFIGROOT"], PROFILE_PATH)
+ ):
+ # Don't show this warning when running repoman and the
+ # sandbox feature came from a profile that doesn't belong
+ # to the user.
+ writemsg(
+ colorize(
+ "BAD", _("!!! Problem with sandbox" " binary. Disabling...\n\n")
+ ),
+ noiselevel=-1,
+ )
+
+ if "fakeroot" in self.features and not fakeroot_capable:
+ writemsg(
+ _(
+ "!!! FEATURES=fakeroot is enabled, but the "
+ "fakeroot binary is not installed.\n"
+ ),
+ noiselevel=-1,
+ )
+
+ if "webrsync-gpg" in self.features:
+ writemsg(
+ _(
+ "!!! FEATURES=webrsync-gpg is deprecated, see the make.conf(5) man page.\n"
+ ),
+ noiselevel=-1,
+ )
+
+ if os.getuid() == 0 and not hasattr(os, "setgroups"):
+ warning_shown = False
+
+ if "userpriv" in self.features:
+ writemsg(
+ _(
+ "!!! FEATURES=userpriv is enabled, but "
+ "os.setgroups is not available.\n"
+ ),
+ noiselevel=-1,
+ )
+ warning_shown = True
+
+ if "userfetch" in self.features:
+ writemsg(
+ _(
+ "!!! FEATURES=userfetch is enabled, but "
+ "os.setgroups is not available.\n"
+ ),
+ noiselevel=-1,
+ )
+ warning_shown = True
+
+ if warning_shown and platform.python_implementation() == "PyPy":
+ writemsg(
+ _("!!! See https://bugs.pypy.org/issue833 for details.\n"),
+ noiselevel=-1,
+ )
+
+ binpkg_compression = self.get("BINPKG_COMPRESS")
+ if binpkg_compression:
+ try:
+ compression = _compressors[binpkg_compression]
+ except KeyError as e:
+ writemsg(
+ "!!! BINPKG_COMPRESS contains invalid or "
+ "unsupported compression method: %s" % e.args[0],
+ noiselevel=-1,
+ )
+ else:
+ try:
+ compression_binary = shlex_split(
+ portage.util.varexpand(compression["compress"], mydict=self)
+ )[0]
+ except IndexError as e:
+ writemsg(
+ "!!! BINPKG_COMPRESS contains invalid or "
+ "unsupported compression method: %s" % e.args[0],
+ noiselevel=-1,
+ )
+ else:
+ if portage.process.find_binary(compression_binary) is None:
+ missing_package = compression["package"]
+ writemsg(
+ "!!! BINPKG_COMPRESS unsupported %s. "
+ "Missing package: %s"
+ % (binpkg_compression, missing_package),
+ noiselevel=-1,
+ )
+
+ def load_best_module(self, property_string):
+ best_mod = best_from_dict(property_string, self.modules, self.module_priority)
+ mod = None
+ try:
+ mod = load_mod(best_mod)
+ except ImportError:
+ if best_mod in self._module_aliases:
+ mod = load_mod(self._module_aliases[best_mod])
+ elif not best_mod.startswith("cache."):
+ raise
+ else:
+ best_mod = "portage." + best_mod
+ try:
+ mod = load_mod(best_mod)
+ except ImportError:
+ raise
+ return mod
+
+ def lock(self):
+ self.locked = 1
+
+ def unlock(self):
+ self.locked = 0
+
+ def modifying(self):
+ if self.locked:
+ raise Exception(_("Configuration is locked."))
+
+ def backup_changes(self, key=None):
+ self.modifying()
+ if key and key in self.configdict["env"]:
+ self.backupenv[key] = copy.deepcopy(self.configdict["env"][key])
+ else:
+ raise KeyError(_("No such key defined in environment: %s") % key)
+
+ def reset(self, keeping_pkg=0, use_cache=None):
+ """
+ Restore environment from self.backupenv, call self.regenerate()
+ @param keeping_pkg: Should we keep the setcpv() data or delete it.
+ @type keeping_pkg: Boolean
+ @rype: None
+ """
+
+ if use_cache is not None:
+ warnings.warn(
+ "The use_cache parameter for config.reset() is deprecated and without effect.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+
+ self.modifying()
+ self.configdict["env"].clear()
+ self.configdict["env"].update(self.backupenv)
+
+ self.modifiedkeys = []
+ if not keeping_pkg:
+ self.mycpv = None
+ self._setcpv_args_hash = None
+ self.puse = ""
+ del self._penv[:]
+ self.configdict["pkg"].clear()
+ self.configdict["pkginternal"].clear()
+ self.configdict["features"]["USE"] = self._default_features_use
+ self.configdict["repo"].clear()
+ self.configdict["defaults"]["USE"] = " ".join(self.make_defaults_use)
+ self.usemask = self._use_manager.getUseMask()
+ self.useforce = self._use_manager.getUseForce()
+ self.regenerate()
+
+ class _lazy_vars:
+
+ __slots__ = ("built_use", "settings", "values")
+
+ def __init__(self, built_use, settings):
+ self.built_use = built_use
+ self.settings = settings
+ self.values = None
+
+ def __getitem__(self, k):
+ if self.values is None:
+ self.values = self._init_values()
+ return self.values[k]
+
+ def _init_values(self):
+ values = {}
+ settings = self.settings
+ use = self.built_use
+ if use is None:
+ use = frozenset(settings["PORTAGE_USE"].split())
+
+ values[
+ "ACCEPT_LICENSE"
+ ] = settings._license_manager.get_prunned_accept_license(
+ settings.mycpv,
+ use,
+ settings.get("LICENSE", ""),
+ settings.get("SLOT"),
+ settings.get("PORTAGE_REPO_NAME"),
+ )
+ values["PORTAGE_PROPERTIES"] = self._flatten("PROPERTIES", use, settings)
+ values["PORTAGE_RESTRICT"] = self._flatten("RESTRICT", use, settings)
+ return values
+
+ def _flatten(self, var, use, settings):
+ try:
+ restrict = set(
+ use_reduce(settings.get(var, ""), uselist=use, flat=True)
+ )
+ except InvalidDependString:
+ restrict = set()
+ return " ".join(sorted(restrict))
+
+ class _lazy_use_expand:
+ """
+ Lazily evaluate USE_EXPAND variables since they are only needed when
+ an ebuild shell is spawned. Variables values are made consistent with
+ the previously calculated USE settings.
+ """
+
+ def __init__(
+ self,
+ settings,
+ unfiltered_use,
+ use,
+ usemask,
+ iuse_effective,
+ use_expand_split,
+ use_expand_dict,
+ ):
+ self._settings = settings
+ self._unfiltered_use = unfiltered_use
+ self._use = use
+ self._usemask = usemask
+ self._iuse_effective = iuse_effective
+ self._use_expand_split = use_expand_split
+ self._use_expand_dict = use_expand_dict
+
+ def __getitem__(self, key):
+ prefix = key.lower() + "_"
+ prefix_len = len(prefix)
+ expand_flags = set(
+ x[prefix_len:] for x in self._use if x[:prefix_len] == prefix
+ )
+ var_split = self._use_expand_dict.get(key, "").split()
+ # Preserve the order of var_split because it can matter for things
+ # like LINGUAS.
+ var_split = [x for x in var_split if x in expand_flags]
+ var_split.extend(expand_flags.difference(var_split))
+ has_wildcard = "*" in expand_flags
+ if has_wildcard:
+ var_split = [x for x in var_split if x != "*"]
+ has_iuse = set()
+ for x in self._iuse_effective:
+ if x[:prefix_len] == prefix:
+ has_iuse.add(x[prefix_len:])
+ if has_wildcard:
+ # * means to enable everything in IUSE that's not masked
+ if has_iuse:
+ usemask = self._usemask
+ for suffix in has_iuse:
+ x = prefix + suffix
+ if x not in usemask:
+ if suffix not in expand_flags:
+ var_split.append(suffix)
+ else:
+ # If there is a wildcard and no matching flags in IUSE then
+ # LINGUAS should be unset so that all .mo files are
+ # installed.
+ var_split = []
+ # Make the flags unique and filter them according to IUSE.
+ # Also, continue to preserve order for things like LINGUAS
+ # and filter any duplicates that variable may contain.
+ filtered_var_split = []
+ remaining = has_iuse.intersection(var_split)
+ for x in var_split:
+ if x in remaining:
+ remaining.remove(x)
+ filtered_var_split.append(x)
+ var_split = filtered_var_split
+
+ return " ".join(var_split)
+
+ def _setcpv_recursion_gate(f):
+ """
+ Raise AssertionError for recursive setcpv calls.
+ """
+
+ def wrapper(self, *args, **kwargs):
+ if hasattr(self, "_setcpv_active"):
+ raise AssertionError("setcpv recursion detected")
+ self._setcpv_active = True
+ try:
+ return f(self, *args, **kwargs)
+ finally:
+ del self._setcpv_active
+
+ return wrapper
+
+ @_setcpv_recursion_gate
+ def setcpv(self, mycpv, use_cache=None, mydb=None):
+ """
+ Load a particular CPV into the config, this lets us see the
+ Default USE flags for a particular ebuild as well as the USE
+ flags from package.use.
+
+ @param mycpv: A cpv to load
+ @type mycpv: string
+ @param mydb: a dbapi instance that supports aux_get with the IUSE key.
+ @type mydb: dbapi or derivative.
+ @rtype: None
+ """
+
+ if use_cache is not None:
+ warnings.warn(
+ "The use_cache parameter for config.setcpv() is deprecated and without effect.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+
+ self.modifying()
+
+ pkg = None
+ built_use = None
+ explicit_iuse = None
+ if not isinstance(mycpv, str):
+ pkg = mycpv
+ mycpv = pkg.cpv
+ mydb = pkg._metadata
+ explicit_iuse = pkg.iuse.all
+ args_hash = (mycpv, id(pkg))
+ if pkg.built:
+ built_use = pkg.use.enabled
+ else:
+ args_hash = (mycpv, id(mydb))
+
+ if args_hash == self._setcpv_args_hash:
+ return
+ self._setcpv_args_hash = args_hash
+
+ has_changed = False
+ self.mycpv = mycpv
+ cat, pf = catsplit(mycpv)
+ cp = cpv_getkey(mycpv)
+ cpv_slot = self.mycpv
+ pkginternaluse = ""
+ pkginternaluse_list = []
+ feature_use = []
+ iuse = ""
+ pkg_configdict = self.configdict["pkg"]
+ previous_iuse = pkg_configdict.get("IUSE")
+ previous_iuse_effective = pkg_configdict.get("IUSE_EFFECTIVE")
+ previous_features = pkg_configdict.get("FEATURES")
+ previous_penv = self._penv
+
+ aux_keys = self._setcpv_aux_keys
+
+ # Discard any existing metadata and package.env settings from
+ # the previous package instance.
+ pkg_configdict.clear()
+
+ pkg_configdict["CATEGORY"] = cat
+ pkg_configdict["PF"] = pf
+ repository = None
+ eapi = None
+ if mydb:
+ if not hasattr(mydb, "aux_get"):
+ for k in aux_keys:
+ if k in mydb:
+ # Make these lazy, since __getitem__ triggers
+ # evaluation of USE conditionals which can't
+ # occur until PORTAGE_USE is calculated below.
+ pkg_configdict.addLazySingleton(k, mydb.__getitem__, k)
+ else:
+ # When calling dbapi.aux_get(), grab USE for built/installed
+ # packages since we want to save it PORTAGE_BUILT_USE for
+ # evaluating conditional USE deps in atoms passed via IPC to
+ # helpers like has_version and best_version.
+ aux_keys = set(aux_keys)
+ if hasattr(mydb, "_aux_cache_keys"):
+ aux_keys = aux_keys.intersection(mydb._aux_cache_keys)
+ aux_keys.add("USE")
+ aux_keys = list(aux_keys)
+ for k, v in zip(aux_keys, mydb.aux_get(self.mycpv, aux_keys)):
+ pkg_configdict[k] = v
+ built_use = frozenset(pkg_configdict.pop("USE").split())
+ if not built_use:
+ # Empty USE means this dbapi instance does not contain
+ # built packages.
+ built_use = None
+ eapi = pkg_configdict["EAPI"]
+
+ repository = pkg_configdict.pop("repository", None)
+ if repository is not None:
+ pkg_configdict["PORTAGE_REPO_NAME"] = repository
+ iuse = pkg_configdict["IUSE"]
+ if pkg is None:
+ self.mycpv = _pkg_str(
+ self.mycpv, metadata=pkg_configdict, settings=self
+ )
+ cpv_slot = self.mycpv
+ else:
+ cpv_slot = pkg
+ for x in iuse.split():
+ if x.startswith("+"):
+ pkginternaluse_list.append(x[1:])
+ elif x.startswith("-"):
+ pkginternaluse_list.append(x)
+ pkginternaluse = " ".join(pkginternaluse_list)
+
+ eapi_attrs = _get_eapi_attrs(eapi)
+
+ if pkginternaluse != self.configdict["pkginternal"].get("USE", ""):
+ self.configdict["pkginternal"]["USE"] = pkginternaluse
+ has_changed = True
+
+ repo_env = []
+ if repository and repository != Package.UNKNOWN_REPO:
+ repos = []
+ try:
+ repos.extend(
+ repo.name for repo in self.repositories[repository].masters
+ )
+ except KeyError:
+ pass
+ repos.append(repository)
+ for repo in repos:
+ d = self._repo_make_defaults.get(repo)
+ if d is None:
+ d = {}
+ else:
+ # make a copy, since we might modify it with
+ # package.use settings
+ d = d.copy()
+ cpdict = self._use_manager._repo_puse_dict.get(repo, {}).get(cp)
+ if cpdict:
+ repo_puse = ordered_by_atom_specificity(cpdict, cpv_slot)
+ if repo_puse:
+ for x in repo_puse:
+ d["USE"] = d.get("USE", "") + " " + " ".join(x)
+ if d:
+ repo_env.append(d)
+
+ if repo_env or self.configdict["repo"]:
+ self.configdict["repo"].clear()
+ self.configdict["repo"].update(
+ stack_dicts(repo_env, incrementals=self.incrementals)
+ )
+ has_changed = True
+
+ defaults = []
+ for i, pkgprofileuse_dict in enumerate(self._use_manager._pkgprofileuse):
+ if self.make_defaults_use[i]:
+ defaults.append(self.make_defaults_use[i])
+ cpdict = pkgprofileuse_dict.get(cp)
+ if cpdict:
+ pkg_defaults = ordered_by_atom_specificity(cpdict, cpv_slot)
+ if pkg_defaults:
+ defaults.extend(pkg_defaults)
+ defaults = " ".join(defaults)
+ if self.configdict["defaults"].get("MULTILIB_ABIS", "").count(' ') != 0:
+ defaults = defaults + " multilib_abi_" + self.configdict["defaults"].get("DEFAULT_ABI", "")
- if defaults != self.configdict["defaults"].get("USE",""):
- self.configdict["defaults"]["USE"] = defaults
- has_changed = True
-
- useforce = self._use_manager.getUseForce(cpv_slot)
- if useforce != self.useforce:
- self.useforce = useforce
- has_changed = True
-
- usemask = self._use_manager.getUseMask(cpv_slot)
- if usemask != self.usemask:
- self.usemask = usemask
- has_changed = True
-
- oldpuse = self.puse
- self.puse = self._use_manager.getPUSE(cpv_slot)
- if oldpuse != self.puse:
- has_changed = True
- self.configdict["pkg"]["PKGUSE"] = self.puse[:] # For saving to PUSE file
- self.configdict["pkg"]["USE"] = self.puse[:] # this gets appended to USE
-
- if previous_features:
- # The package from the previous setcpv call had package.env
- # settings which modified FEATURES. Therefore, trigger a
- # regenerate() call in order to ensure that self.features
- # is accurate.
- has_changed = True
- # Prevent stale features USE from corrupting the evaluation
- # of USE conditional RESTRICT.
- self.configdict["features"]["USE"] = self._default_features_use
-
- self._penv = []
- cpdict = self._penvdict.get(cp)
- if cpdict:
- penv_matches = ordered_by_atom_specificity(cpdict, cpv_slot)
- if penv_matches:
- for x in penv_matches:
- self._penv.extend(x)
-
- bashrc_files = []
-
- for profile, profile_bashrc in zip(self._locations_manager.profiles_complex, self._profile_bashrc):
- if profile_bashrc:
- bashrc_files.append(os.path.join(profile.location, 'profile.bashrc'))
- if profile in self._pbashrcdict:
- cpdict = self._pbashrcdict[profile].get(cp)
- if cpdict:
- bashrc_matches = \
- ordered_by_atom_specificity(cpdict, cpv_slot)
- for x in bashrc_matches:
- bashrc_files.extend(x)
-
- self._pbashrc = tuple(bashrc_files)
-
- protected_pkg_keys = set(pkg_configdict)
- protected_pkg_keys.discard('USE')
-
- # If there are _any_ package.env settings for this package
- # then it automatically triggers config.reset(), in order
- # to account for possible incremental interaction between
- # package.use, package.env, and overrides from the calling
- # environment (configdict['env']).
- if self._penv:
- has_changed = True
- # USE is special because package.use settings override
- # it. Discard any package.use settings here and they'll
- # be added back later.
- pkg_configdict.pop('USE', None)
- self._grab_pkg_env(self._penv, pkg_configdict,
- protected_keys=protected_pkg_keys)
-
- # Now add package.use settings, which override USE from
- # package.env
- if self.puse:
- if 'USE' in pkg_configdict:
- pkg_configdict['USE'] = \
- pkg_configdict['USE'] + " " + self.puse
- else:
- pkg_configdict['USE'] = self.puse
-
- elif previous_penv:
- has_changed = True
-
- if not (previous_iuse == iuse and
- previous_iuse_effective is not None == eapi_attrs.iuse_effective):
- has_changed = True
-
- if has_changed:
- # This can modify self.features due to package.env settings.
- self.reset(keeping_pkg=1)
-
- if "test" in self.features:
- # This is independent of IUSE and RESTRICT, so that the same
- # value can be shared between packages with different settings,
- # which is important when evaluating USE conditional RESTRICT.
- feature_use.append("test")
-
- feature_use = " ".join(feature_use)
- if feature_use != self.configdict["features"]["USE"]:
- # Regenerate USE for evaluation of conditional RESTRICT.
- self.configdict["features"]["USE"] = feature_use
- self.reset(keeping_pkg=1)
- has_changed = True
-
- if explicit_iuse is None:
- explicit_iuse = frozenset(x.lstrip("+-") for x in iuse.split())
- if eapi_attrs.iuse_effective:
- iuse_implicit_match = self._iuse_effective_match
- else:
- iuse_implicit_match = self._iuse_implicit_match
-
- if pkg is None:
- raw_properties = pkg_configdict.get("PROPERTIES")
- raw_restrict = pkg_configdict.get("RESTRICT")
- else:
- raw_properties = pkg._raw_metadata["PROPERTIES"]
- raw_restrict = pkg._raw_metadata["RESTRICT"]
-
- restrict_test = False
- if raw_restrict:
- try:
- if built_use is not None:
- properties = use_reduce(raw_properties,
- uselist=built_use, flat=True)
- restrict = use_reduce(raw_restrict,
- uselist=built_use, flat=True)
- else:
- properties = use_reduce(raw_properties,
- uselist=frozenset(x for x in self['USE'].split()
- if x in explicit_iuse or iuse_implicit_match(x)),
- flat=True)
- restrict = use_reduce(raw_restrict,
- uselist=frozenset(x for x in self['USE'].split()
- if x in explicit_iuse or iuse_implicit_match(x)),
- flat=True)
- except PortageException:
- pass
- else:
- allow_test = self.get('ALLOW_TEST', '').split()
- restrict_test = (
- "test" in restrict and not "all" in allow_test and
- not ("test_network" in properties and "network" in allow_test))
-
- if restrict_test and "test" in self.features:
- # Handle it like IUSE="-test", since features USE is
- # independent of RESTRICT.
- pkginternaluse_list.append("-test")
- pkginternaluse = " ".join(pkginternaluse_list)
- self.configdict["pkginternal"]["USE"] = pkginternaluse
- # TODO: can we avoid that?
- self.reset(keeping_pkg=1)
- has_changed = True
-
- env_configdict = self.configdict['env']
-
- # Ensure that "pkg" values are always preferred over "env" values.
- # This must occur _after_ the above reset() call, since reset()
- # copies values from self.backupenv.
- for k in protected_pkg_keys:
- env_configdict.pop(k, None)
-
- lazy_vars = self._lazy_vars(built_use, self)
- env_configdict.addLazySingleton('ACCEPT_LICENSE',
- lazy_vars.__getitem__, 'ACCEPT_LICENSE')
- env_configdict.addLazySingleton('PORTAGE_PROPERTIES',
- lazy_vars.__getitem__, 'PORTAGE_PROPERTIES')
- env_configdict.addLazySingleton('PORTAGE_RESTRICT',
- lazy_vars.__getitem__, 'PORTAGE_RESTRICT')
-
- if built_use is not None:
- pkg_configdict['PORTAGE_BUILT_USE'] = ' '.join(built_use)
-
- # If reset() has not been called, it's safe to return
- # early if IUSE has not changed.
- if not has_changed:
- return
-
- # Filter out USE flags that aren't part of IUSE. This has to
- # be done for every setcpv() call since practically every
- # package has different IUSE.
- use = set(self["USE"].split())
- unfiltered_use = frozenset(use)
-
- if eapi_attrs.iuse_effective:
- portage_iuse = set(self._iuse_effective)
- portage_iuse.update(explicit_iuse)
- if built_use is not None:
- # When the binary package was built, the profile may have
- # had different IUSE_IMPLICIT settings, so any member of
- # the built USE setting is considered to be a member of
- # IUSE_EFFECTIVE (see bug 640318).
- portage_iuse.update(built_use)
- self.configdict["pkg"]["IUSE_EFFECTIVE"] = \
- " ".join(sorted(portage_iuse))
-
- self.configdict["env"]["BASH_FUNC____in_portage_iuse%%"] = (
- "() { "
- "if [[ ${#___PORTAGE_IUSE_HASH[@]} -lt 1 ]]; then "
- " declare -gA ___PORTAGE_IUSE_HASH=(%s); "
- "fi; "
- "[[ -n ${___PORTAGE_IUSE_HASH[$1]} ]]; "
- "}" ) % " ".join('["%s"]=1' % x for x in portage_iuse)
- else:
- portage_iuse = self._get_implicit_iuse()
- portage_iuse.update(explicit_iuse)
-
- # The _get_implicit_iuse() returns a regular expression
- # so we can't use the (faster) map. Fall back to
- # implementing ___in_portage_iuse() the older/slower way.
-
- # PORTAGE_IUSE is not always needed so it's lazily evaluated.
- self.configdict["env"].addLazySingleton(
- "PORTAGE_IUSE", _lazy_iuse_regex, portage_iuse)
- self.configdict["env"]["BASH_FUNC____in_portage_iuse%%"] = \
- "() { [[ $1 =~ ${PORTAGE_IUSE} ]]; }"
-
- ebuild_force_test = not restrict_test and \
- self.get("EBUILD_FORCE_TEST") == "1"
-
- if "test" in explicit_iuse or iuse_implicit_match("test"):
- if "test" in self.features:
- if ebuild_force_test and "test" in self.usemask:
- self.usemask = \
- frozenset(x for x in self.usemask if x != "test")
- if restrict_test or \
- ("test" in self.usemask and not ebuild_force_test):
- # "test" is in IUSE and USE=test is masked, so execution
- # of src_test() probably is not reliable. Therefore,
- # temporarily disable FEATURES=test just for this package.
- self["FEATURES"] = " ".join(x for x in self.features \
- if x != "test")
-
- # Allow _* flags from USE_EXPAND wildcards to pass through here.
- use.difference_update([x for x in use \
- if (x not in explicit_iuse and \
- not iuse_implicit_match(x)) and x[-2:] != '_*'])
-
- # Use the calculated USE flags to regenerate the USE_EXPAND flags so
- # that they are consistent. For optimal performance, use slice
- # comparison instead of startswith().
- use_expand_split = set(x.lower() for \
- x in self.get('USE_EXPAND', '').split())
- lazy_use_expand = self._lazy_use_expand(
- self, unfiltered_use, use, self.usemask,
- portage_iuse, use_expand_split, self._use_expand_dict)
-
- use_expand_iuses = dict((k, set()) for k in use_expand_split)
- for x in portage_iuse:
- x_split = x.split('_')
- if len(x_split) == 1:
- continue
- for i in range(len(x_split) - 1):
- k = '_'.join(x_split[:i+1])
- if k in use_expand_split:
- use_expand_iuses[k].add(x)
- break
-
- for k, use_expand_iuse in use_expand_iuses.items():
- if k + '_*' in use:
- use.update( x for x in use_expand_iuse if x not in usemask )
- k = k.upper()
- self.configdict['env'].addLazySingleton(k,
- lazy_use_expand.__getitem__, k)
-
- for k in self.get("USE_EXPAND_UNPREFIXED", "").split():
- var_split = self.get(k, '').split()
- var_split = [ x for x in var_split if x in use ]
- if var_split:
- self.configlist[-1][k] = ' '.join(var_split)
- elif k in self:
- self.configlist[-1][k] = ''
-
- # Filtered for the ebuild environment. Store this in a separate
- # attribute since we still want to be able to see global USE
- # settings for things like emerge --info.
-
- self.configdict["env"]["PORTAGE_USE"] = \
- " ".join(sorted(x for x in use if x[-2:] != '_*'))
-
- # Clear the eapi cache here rather than in the constructor, since
- # setcpv triggers lazy instantiation of things like _use_manager.
- _eapi_cache.clear()
-
- def _grab_pkg_env(self, penv, container, protected_keys=None):
- if protected_keys is None:
- protected_keys = ()
- abs_user_config = os.path.join(
- self['PORTAGE_CONFIGROOT'], USER_CONFIG_PATH)
- non_user_variables = self._non_user_variables
- # Make a copy since we don't want per-package settings
- # to pollute the global expand_map.
- expand_map = self._expand_map.copy()
- incrementals = self.incrementals
- for envname in penv:
- penvfile = os.path.join(abs_user_config, "env", envname)
- penvconfig = getconfig(penvfile, tolerant=self._tolerant,
- allow_sourcing=True, expand=expand_map)
- if penvconfig is None:
- writemsg("!!! %s references non-existent file: %s\n" % \
- (os.path.join(abs_user_config, 'package.env'), penvfile),
- noiselevel=-1)
- else:
- for k, v in penvconfig.items():
- if k in protected_keys or \
- k in non_user_variables:
- writemsg("!!! Illegal variable " + \
- "'%s' assigned in '%s'\n" % \
- (k, penvfile), noiselevel=-1)
- elif k in incrementals:
- if k in container:
- container[k] = container[k] + " " + v
- else:
- container[k] = v
- else:
- container[k] = v
-
- def _iuse_effective_match(self, flag):
- return flag in self._iuse_effective
-
- def _calc_iuse_effective(self):
- """
- Beginning with EAPI 5, IUSE_EFFECTIVE is defined by PMS.
- """
- iuse_effective = []
- iuse_effective.extend(self.get("IUSE_IMPLICIT", "").split())
-
- # USE_EXPAND_IMPLICIT should contain things like ARCH, ELIBC,
- # KERNEL, and USERLAND.
- use_expand_implicit = frozenset(
- self.get("USE_EXPAND_IMPLICIT", "").split())
-
- # USE_EXPAND_UNPREFIXED should contain at least ARCH, and
- # USE_EXPAND_VALUES_ARCH should contain all valid ARCH flags.
- for v in self.get("USE_EXPAND_UNPREFIXED", "").split():
- if v not in use_expand_implicit:
- continue
- iuse_effective.extend(
- self.get("USE_EXPAND_VALUES_" + v, "").split())
-
- use_expand = frozenset(self.get("USE_EXPAND", "").split())
- for v in use_expand_implicit:
- if v not in use_expand:
- continue
- lower_v = v.lower()
- for x in self.get("USE_EXPAND_VALUES_" + v, "").split():
- iuse_effective.append(lower_v + "_" + x)
-
- return frozenset(iuse_effective)
-
- def _get_implicit_iuse(self):
- """
- Prior to EAPI 5, these flags are considered to
- be implicit members of IUSE:
- * Flags derived from ARCH
- * Flags derived from USE_EXPAND_HIDDEN variables
- * Masked flags, such as those from {,package}use.mask
- * Forced flags, such as those from {,package}use.force
- * build and bootstrap flags used by bootstrap.sh
- """
- iuse_implicit = set()
- # Flags derived from ARCH.
- arch = self.configdict["defaults"].get("ARCH")
- if arch:
- iuse_implicit.add(arch)
- iuse_implicit.update(self.get("PORTAGE_ARCHLIST", "").split())
-
- # Flags derived from USE_EXPAND_HIDDEN variables
- # such as ELIBC, KERNEL, and USERLAND.
- use_expand_hidden = self.get("USE_EXPAND_HIDDEN", "").split()
- for x in use_expand_hidden:
- iuse_implicit.add(x.lower() + "_.*")
-
- # Flags that have been masked or forced.
- iuse_implicit.update(self.usemask)
- iuse_implicit.update(self.useforce)
-
- # build and bootstrap flags used by bootstrap.sh
- iuse_implicit.add("build")
- iuse_implicit.add("bootstrap")
-
- if 'force-multilib' in self.features:
+ if defaults != self.configdict["defaults"].get("USE", ""):
+ self.configdict["defaults"]["USE"] = defaults
+ has_changed = True
+
+ useforce = self._use_manager.getUseForce(cpv_slot)
+ if useforce != self.useforce:
+ self.useforce = useforce
+ has_changed = True
+
+ usemask = self._use_manager.getUseMask(cpv_slot)
+ if usemask != self.usemask:
+ self.usemask = usemask
+ has_changed = True
+
+ oldpuse = self.puse
+ self.puse = self._use_manager.getPUSE(cpv_slot)
+ if oldpuse != self.puse:
+ has_changed = True
+ self.configdict["pkg"]["PKGUSE"] = self.puse[:] # For saving to PUSE file
+ self.configdict["pkg"]["USE"] = self.puse[:] # this gets appended to USE
+
+ if previous_features:
+ # The package from the previous setcpv call had package.env
+ # settings which modified FEATURES. Therefore, trigger a
+ # regenerate() call in order to ensure that self.features
+ # is accurate.
+ has_changed = True
+ # Prevent stale features USE from corrupting the evaluation
+ # of USE conditional RESTRICT.
+ self.configdict["features"]["USE"] = self._default_features_use
+
+ self._penv = []
+ cpdict = self._penvdict.get(cp)
+ if cpdict:
+ penv_matches = ordered_by_atom_specificity(cpdict, cpv_slot)
+ if penv_matches:
+ for x in penv_matches:
+ self._penv.extend(x)
+
+ bashrc_files = []
+
+ for profile, profile_bashrc in zip(
+ self._locations_manager.profiles_complex, self._profile_bashrc
+ ):
+ if profile_bashrc:
+ bashrc_files.append(os.path.join(profile.location, "profile.bashrc"))
+ if profile in self._pbashrcdict:
+ cpdict = self._pbashrcdict[profile].get(cp)
+ if cpdict:
+ bashrc_matches = ordered_by_atom_specificity(cpdict, cpv_slot)
+ for x in bashrc_matches:
+ bashrc_files.extend(x)
+
+ self._pbashrc = tuple(bashrc_files)
+
+ protected_pkg_keys = set(pkg_configdict)
+ protected_pkg_keys.discard("USE")
+
+ # If there are _any_ package.env settings for this package
+ # then it automatically triggers config.reset(), in order
+ # to account for possible incremental interaction between
+ # package.use, package.env, and overrides from the calling
+ # environment (configdict['env']).
+ if self._penv:
+ has_changed = True
+ # USE is special because package.use settings override
+ # it. Discard any package.use settings here and they'll
+ # be added back later.
+ pkg_configdict.pop("USE", None)
+ self._grab_pkg_env(
+ self._penv, pkg_configdict, protected_keys=protected_pkg_keys
+ )
+
+ # Now add package.use settings, which override USE from
+ # package.env
+ if self.puse:
+ if "USE" in pkg_configdict:
+ pkg_configdict["USE"] = pkg_configdict["USE"] + " " + self.puse
+ else:
+ pkg_configdict["USE"] = self.puse
+
+ elif previous_penv:
+ has_changed = True
+
+ if not (
+ previous_iuse == iuse
+ and previous_iuse_effective is not None == eapi_attrs.iuse_effective
+ ):
+ has_changed = True
+
+ if has_changed:
+ # This can modify self.features due to package.env settings.
+ self.reset(keeping_pkg=1)
+
+ if "test" in self.features:
+ # This is independent of IUSE and RESTRICT, so that the same
+ # value can be shared between packages with different settings,
+ # which is important when evaluating USE conditional RESTRICT.
+ feature_use.append("test")
+
+ feature_use = " ".join(feature_use)
+ if feature_use != self.configdict["features"]["USE"]:
+ # Regenerate USE for evaluation of conditional RESTRICT.
+ self.configdict["features"]["USE"] = feature_use
+ self.reset(keeping_pkg=1)
+ has_changed = True
+
+ if explicit_iuse is None:
+ explicit_iuse = frozenset(x.lstrip("+-") for x in iuse.split())
+ if eapi_attrs.iuse_effective:
+ iuse_implicit_match = self._iuse_effective_match
+ else:
+ iuse_implicit_match = self._iuse_implicit_match
+
+ if pkg is None:
+ raw_properties = pkg_configdict.get("PROPERTIES")
+ raw_restrict = pkg_configdict.get("RESTRICT")
+ else:
+ raw_properties = pkg._raw_metadata["PROPERTIES"]
+ raw_restrict = pkg._raw_metadata["RESTRICT"]
+
+ restrict_test = False
+ if raw_restrict:
+ try:
+ if built_use is not None:
+ properties = use_reduce(
+ raw_properties, uselist=built_use, flat=True
+ )
+ restrict = use_reduce(raw_restrict, uselist=built_use, flat=True)
+ else:
+ properties = use_reduce(
+ raw_properties,
+ uselist=frozenset(
+ x
+ for x in self["USE"].split()
+ if x in explicit_iuse or iuse_implicit_match(x)
+ ),
+ flat=True,
+ )
+ restrict = use_reduce(
+ raw_restrict,
+ uselist=frozenset(
+ x
+ for x in self["USE"].split()
+ if x in explicit_iuse or iuse_implicit_match(x)
+ ),
+ flat=True,
+ )
+ except PortageException:
+ pass
+ else:
+ allow_test = self.get("ALLOW_TEST", "").split()
+ restrict_test = (
+ "test" in restrict
+ and not "all" in allow_test
+ and not ("test_network" in properties and "network" in allow_test)
+ )
+
+ if restrict_test and "test" in self.features:
+ # Handle it like IUSE="-test", since features USE is
+ # independent of RESTRICT.
+ pkginternaluse_list.append("-test")
+ pkginternaluse = " ".join(pkginternaluse_list)
+ self.configdict["pkginternal"]["USE"] = pkginternaluse
+ # TODO: can we avoid that?
+ self.reset(keeping_pkg=1)
+ has_changed = True
+
+ env_configdict = self.configdict["env"]
+
+ # Ensure that "pkg" values are always preferred over "env" values.
+ # This must occur _after_ the above reset() call, since reset()
+ # copies values from self.backupenv.
+ for k in protected_pkg_keys:
+ env_configdict.pop(k, None)
+
+ lazy_vars = self._lazy_vars(built_use, self)
+ env_configdict.addLazySingleton(
+ "ACCEPT_LICENSE", lazy_vars.__getitem__, "ACCEPT_LICENSE"
+ )
+ env_configdict.addLazySingleton(
+ "PORTAGE_PROPERTIES", lazy_vars.__getitem__, "PORTAGE_PROPERTIES"
+ )
+ env_configdict.addLazySingleton(
+ "PORTAGE_RESTRICT", lazy_vars.__getitem__, "PORTAGE_RESTRICT"
+ )
+
+ if built_use is not None:
+ pkg_configdict["PORTAGE_BUILT_USE"] = " ".join(built_use)
+
+ # If reset() has not been called, it's safe to return
+ # early if IUSE has not changed.
+ if not has_changed:
+ return
+
+ # Filter out USE flags that aren't part of IUSE. This has to
+ # be done for every setcpv() call since practically every
+ # package has different IUSE.
+ use = set(self["USE"].split())
+ unfiltered_use = frozenset(use)
+
+ if eapi_attrs.iuse_effective:
+ portage_iuse = set(self._iuse_effective)
+ portage_iuse.update(explicit_iuse)
+ if built_use is not None:
+ # When the binary package was built, the profile may have
+ # had different IUSE_IMPLICIT settings, so any member of
+ # the built USE setting is considered to be a member of
+ # IUSE_EFFECTIVE (see bug 640318).
+ portage_iuse.update(built_use)
+ self.configdict["pkg"]["IUSE_EFFECTIVE"] = " ".join(sorted(portage_iuse))
+
+ self.configdict["env"]["BASH_FUNC____in_portage_iuse%%"] = (
+ "() { "
+ "if [[ ${#___PORTAGE_IUSE_HASH[@]} -lt 1 ]]; then "
+ " declare -gA ___PORTAGE_IUSE_HASH=(%s); "
+ "fi; "
+ "[[ -n ${___PORTAGE_IUSE_HASH[$1]} ]]; "
+ "}"
+ ) % " ".join('["%s"]=1' % x for x in portage_iuse)
+ else:
+ portage_iuse = self._get_implicit_iuse()
+ portage_iuse.update(explicit_iuse)
+
+ # The _get_implicit_iuse() returns a regular expression
+ # so we can't use the (faster) map. Fall back to
+ # implementing ___in_portage_iuse() the older/slower way.
+
+ # PORTAGE_IUSE is not always needed so it's lazily evaluated.
+ self.configdict["env"].addLazySingleton(
+ "PORTAGE_IUSE", _lazy_iuse_regex, portage_iuse
+ )
+ self.configdict["env"][
+ "BASH_FUNC____in_portage_iuse%%"
+ ] = "() { [[ $1 =~ ${PORTAGE_IUSE} ]]; }"
+
+ ebuild_force_test = not restrict_test and self.get("EBUILD_FORCE_TEST") == "1"
+
+ if "test" in explicit_iuse or iuse_implicit_match("test"):
+ if "test" in self.features:
+ if ebuild_force_test and "test" in self.usemask:
+ self.usemask = frozenset(x for x in self.usemask if x != "test")
+ if restrict_test or ("test" in self.usemask and not ebuild_force_test):
+ # "test" is in IUSE and USE=test is masked, so execution
+ # of src_test() probably is not reliable. Therefore,
+ # temporarily disable FEATURES=test just for this package.
+ self["FEATURES"] = " ".join(x for x in self.features if x != "test")
+
+ # Allow _* flags from USE_EXPAND wildcards to pass through here.
+ use.difference_update(
+ [
+ x
+ for x in use
+ if (x not in explicit_iuse and not iuse_implicit_match(x))
+ and x[-2:] != "_*"
+ ]
+ )
+
+ # Use the calculated USE flags to regenerate the USE_EXPAND flags so
+ # that they are consistent. For optimal performance, use slice
+ # comparison instead of startswith().
+ use_expand_split = set(x.lower() for x in self.get("USE_EXPAND", "").split())
+ lazy_use_expand = self._lazy_use_expand(
+ self,
+ unfiltered_use,
+ use,
+ self.usemask,
+ portage_iuse,
+ use_expand_split,
+ self._use_expand_dict,
+ )
+
+ use_expand_iuses = dict((k, set()) for k in use_expand_split)
+ for x in portage_iuse:
+ x_split = x.split("_")
+ if len(x_split) == 1:
+ continue
+ for i in range(len(x_split) - 1):
+ k = "_".join(x_split[: i + 1])
+ if k in use_expand_split:
+ use_expand_iuses[k].add(x)
+ break
+
+ for k, use_expand_iuse in use_expand_iuses.items():
+ if k + "_*" in use:
+ use.update(x for x in use_expand_iuse if x not in usemask)
+ k = k.upper()
+ self.configdict["env"].addLazySingleton(k, lazy_use_expand.__getitem__, k)
+
+ for k in self.get("USE_EXPAND_UNPREFIXED", "").split():
+ var_split = self.get(k, "").split()
+ var_split = [x for x in var_split if x in use]
+ if var_split:
+ self.configlist[-1][k] = " ".join(var_split)
+ elif k in self:
+ self.configlist[-1][k] = ""
+
+ # Filtered for the ebuild environment. Store this in a separate
+ # attribute since we still want to be able to see global USE
+ # settings for things like emerge --info.
+
+ self.configdict["env"]["PORTAGE_USE"] = " ".join(
+ sorted(x for x in use if x[-2:] != "_*")
+ )
+
+ # Clear the eapi cache here rather than in the constructor, since
+ # setcpv triggers lazy instantiation of things like _use_manager.
+ _eapi_cache.clear()
+
+ def _grab_pkg_env(self, penv, container, protected_keys=None):
+ if protected_keys is None:
+ protected_keys = ()
+ abs_user_config = os.path.join(self["PORTAGE_CONFIGROOT"], USER_CONFIG_PATH)
+ non_user_variables = self._non_user_variables
+ # Make a copy since we don't want per-package settings
+ # to pollute the global expand_map.
+ expand_map = self._expand_map.copy()
+ incrementals = self.incrementals
+ for envname in penv:
+ penvfile = os.path.join(abs_user_config, "env", envname)
+ penvconfig = getconfig(
+ penvfile,
+ tolerant=self._tolerant,
+ allow_sourcing=True,
+ expand=expand_map,
+ )
+ if penvconfig is None:
+ writemsg(
+ "!!! %s references non-existent file: %s\n"
+ % (os.path.join(abs_user_config, "package.env"), penvfile),
+ noiselevel=-1,
+ )
+ else:
+ for k, v in penvconfig.items():
+ if k in protected_keys or k in non_user_variables:
+ writemsg(
+ "!!! Illegal variable "
+ + "'%s' assigned in '%s'\n" % (k, penvfile),
+ noiselevel=-1,
+ )
+ elif k in incrementals:
+ if k in container:
+ container[k] = container[k] + " " + v
+ else:
+ container[k] = v
+ else:
+ container[k] = v
+
+ def _iuse_effective_match(self, flag):
+ return flag in self._iuse_effective
+
+ def _calc_iuse_effective(self):
+ """
+ Beginning with EAPI 5, IUSE_EFFECTIVE is defined by PMS.
+ """
+ iuse_effective = []
+ iuse_effective.extend(self.get("IUSE_IMPLICIT", "").split())
+
+ # USE_EXPAND_IMPLICIT should contain things like ARCH, ELIBC,
+ # KERNEL, and USERLAND.
+ use_expand_implicit = frozenset(self.get("USE_EXPAND_IMPLICIT", "").split())
+
+ # USE_EXPAND_UNPREFIXED should contain at least ARCH, and
+ # USE_EXPAND_VALUES_ARCH should contain all valid ARCH flags.
+ for v in self.get("USE_EXPAND_UNPREFIXED", "").split():
+ if v not in use_expand_implicit:
+ continue
+ iuse_effective.extend(self.get("USE_EXPAND_VALUES_" + v, "").split())
+
+ use_expand = frozenset(self.get("USE_EXPAND", "").split())
+ for v in use_expand_implicit:
+ if v not in use_expand:
+ continue
+ lower_v = v.lower()
+ for x in self.get("USE_EXPAND_VALUES_" + v, "").split():
+ iuse_effective.append(lower_v + "_" + x)
+
+ return frozenset(iuse_effective)
+
+ def _get_implicit_iuse(self):
+ """
+ Prior to EAPI 5, these flags are considered to
+ be implicit members of IUSE:
+ * Flags derived from ARCH
+ * Flags derived from USE_EXPAND_HIDDEN variables
+ * Masked flags, such as those from {,package}use.mask
+ * Forced flags, such as those from {,package}use.force
+ * build and bootstrap flags used by bootstrap.sh
+ """
+ iuse_implicit = set()
+ # Flags derived from ARCH.
+ arch = self.configdict["defaults"].get("ARCH")
+ if arch:
+ iuse_implicit.add(arch)
+ iuse_implicit.update(self.get("PORTAGE_ARCHLIST", "").split())
+
+ # Flags derived from USE_EXPAND_HIDDEN variables
+ # such as ELIBC, KERNEL, and USERLAND.
+ use_expand_hidden = self.get("USE_EXPAND_HIDDEN", "").split()
+ for x in use_expand_hidden:
+ iuse_implicit.add(x.lower() + "_.*")
+
+ # Flags that have been masked or forced.
+ iuse_implicit.update(self.usemask)
+ iuse_implicit.update(self.useforce)
+
+ # build and bootstrap flags used by bootstrap.sh
+ iuse_implicit.add("build")
+ iuse_implicit.add("bootstrap")
+
++ if 'force-multilib' in self.features:
+ for multilib_abis in self.get('MULTILIB_ABIS', '').split():
+ iuse_implicit.add("multilib_abi_" + multilib_abis)
+
- return iuse_implicit
-
- def _getUseMask(self, pkg, stable=None):
- return self._use_manager.getUseMask(pkg, stable=stable)
-
- def _getUseForce(self, pkg, stable=None):
- return self._use_manager.getUseForce(pkg, stable=stable)
-
- def _getMaskAtom(self, cpv, metadata):
- """
- Take a package and return a matching package.mask atom, or None if no
- such atom exists or it has been cancelled by package.unmask.
-
- @param cpv: The package name
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: String
- @return: A matching atom string or None if one is not found.
- """
- return self._mask_manager.getMaskAtom(cpv, metadata["SLOT"], metadata.get('repository'))
-
- def _getRawMaskAtom(self, cpv, metadata):
- """
- Take a package and return a matching package.mask atom, or None if no
- such atom exists or it has been cancelled by package.unmask.
-
- @param cpv: The package name
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: String
- @return: A matching atom string or None if one is not found.
- """
- return self._mask_manager.getRawMaskAtom(cpv, metadata["SLOT"], metadata.get('repository'))
-
-
- def _getProfileMaskAtom(self, cpv, metadata):
- """
- Take a package and return a matching profile atom, or None if no
- such atom exists. Note that a profile atom may or may not have a "*"
- prefix.
-
- @param cpv: The package name
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: String
- @return: A matching profile atom string or None if one is not found.
- """
-
- warnings.warn("The config._getProfileMaskAtom() method is deprecated.",
- DeprecationWarning, stacklevel=2)
-
- cp = cpv_getkey(cpv)
- profile_atoms = self.prevmaskdict.get(cp)
- if profile_atoms:
- pkg = "".join((cpv, _slot_separator, metadata["SLOT"]))
- repo = metadata.get("repository")
- if repo and repo != Package.UNKNOWN_REPO:
- pkg = "".join((pkg, _repo_separator, repo))
- pkg_list = [pkg]
- for x in profile_atoms:
- if match_from_list(x, pkg_list):
- continue
- return x
- return None
-
- def _isStable(self, pkg):
- return self._keywords_manager.isStable(pkg,
- self.get("ACCEPT_KEYWORDS", ""),
- self.configdict["backupenv"].get("ACCEPT_KEYWORDS", ""))
-
- def _getKeywords(self, cpv, metadata):
- return self._keywords_manager.getKeywords(cpv, metadata["SLOT"], \
- metadata.get("KEYWORDS", ""), metadata.get("repository"))
-
- def _getMissingKeywords(self, cpv, metadata):
- """
- Take a package and return a list of any KEYWORDS that the user may
- need to accept for the given package. If the KEYWORDS are empty
- and the ** keyword has not been accepted, the returned list will
- contain ** alone (in order to distinguish from the case of "none
- missing").
-
- @param cpv: The package name (for package.keywords support)
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: List
- @return: A list of KEYWORDS that have not been accepted.
- """
-
- # Hack: Need to check the env directly here as otherwise stacking
- # doesn't work properly as negative values are lost in the config
- # object (bug #139600)
- backuped_accept_keywords = self.configdict["backupenv"].get("ACCEPT_KEYWORDS", "")
- global_accept_keywords = self.get("ACCEPT_KEYWORDS", "")
-
- return self._keywords_manager.getMissingKeywords(cpv, metadata["SLOT"], \
- metadata.get("KEYWORDS", ""), metadata.get('repository'), \
- global_accept_keywords, backuped_accept_keywords)
-
- def _getRawMissingKeywords(self, cpv, metadata):
- """
- Take a package and return a list of any KEYWORDS that the user may
- need to accept for the given package. If the KEYWORDS are empty,
- the returned list will contain ** alone (in order to distinguish
- from the case of "none missing"). This DOES NOT apply any user config
- package.accept_keywords acceptance.
-
- @param cpv: The package name (for package.keywords support)
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: List
- @return: lists of KEYWORDS that have not been accepted
- and the keywords it looked for.
- """
- return self._keywords_manager.getRawMissingKeywords(cpv, metadata["SLOT"], \
- metadata.get("KEYWORDS", ""), metadata.get('repository'), \
- self.get("ACCEPT_KEYWORDS", ""))
-
- def _getPKeywords(self, cpv, metadata):
- global_accept_keywords = self.get("ACCEPT_KEYWORDS", "")
-
- return self._keywords_manager.getPKeywords(cpv, metadata["SLOT"], \
- metadata.get('repository'), global_accept_keywords)
-
- def _getMissingLicenses(self, cpv, metadata):
- """
- Take a LICENSE string and return a list of any licenses that the user
- may need to accept for the given package. The returned list will not
- contain any licenses that have already been accepted. This method
- can throw an InvalidDependString exception.
-
- @param cpv: The package name (for package.license support)
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: List
- @return: A list of licenses that have not been accepted.
- """
- return self._license_manager.getMissingLicenses( \
- cpv, metadata["USE"], metadata["LICENSE"], metadata["SLOT"], metadata.get('repository'))
-
- def _getMissingProperties(self, cpv, metadata):
- """
- Take a PROPERTIES string and return a list of any properties the user
- may need to accept for the given package. The returned list will not
- contain any properties that have already been accepted. This method
- can throw an InvalidDependString exception.
-
- @param cpv: The package name (for package.properties support)
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: List
- @return: A list of properties that have not been accepted.
- """
- accept_properties = self._accept_properties
- try:
- cpv.slot
- except AttributeError:
- cpv = _pkg_str(cpv, metadata=metadata, settings=self)
- cp = cpv_getkey(cpv)
- cpdict = self._ppropertiesdict.get(cp)
- if cpdict:
- pproperties_list = ordered_by_atom_specificity(cpdict, cpv)
- if pproperties_list:
- accept_properties = list(self._accept_properties)
- for x in pproperties_list:
- accept_properties.extend(x)
-
- properties_str = metadata.get("PROPERTIES", "")
- properties = set(use_reduce(properties_str, matchall=1, flat=True))
-
- acceptable_properties = set()
- for x in accept_properties:
- if x == '*':
- acceptable_properties.update(properties)
- elif x == '-*':
- acceptable_properties.clear()
- elif x[:1] == '-':
- acceptable_properties.discard(x[1:])
- else:
- acceptable_properties.add(x)
-
- if "?" in properties_str:
- use = metadata["USE"].split()
- else:
- use = []
-
- return [x for x in use_reduce(properties_str, uselist=use, flat=True)
- if x not in acceptable_properties]
-
- def _getMissingRestrict(self, cpv, metadata):
- """
- Take a RESTRICT string and return a list of any tokens the user
- may need to accept for the given package. The returned list will not
- contain any tokens that have already been accepted. This method
- can throw an InvalidDependString exception.
-
- @param cpv: The package name (for package.accept_restrict support)
- @type cpv: String
- @param metadata: A dictionary of raw package metadata
- @type metadata: dict
- @rtype: List
- @return: A list of tokens that have not been accepted.
- """
- accept_restrict = self._accept_restrict
- try:
- cpv.slot
- except AttributeError:
- cpv = _pkg_str(cpv, metadata=metadata, settings=self)
- cp = cpv_getkey(cpv)
- cpdict = self._paccept_restrict.get(cp)
- if cpdict:
- paccept_restrict_list = ordered_by_atom_specificity(cpdict, cpv)
- if paccept_restrict_list:
- accept_restrict = list(self._accept_restrict)
- for x in paccept_restrict_list:
- accept_restrict.extend(x)
-
- restrict_str = metadata.get("RESTRICT", "")
- all_restricts = set(use_reduce(restrict_str, matchall=1, flat=True))
-
- acceptable_restricts = set()
- for x in accept_restrict:
- if x == '*':
- acceptable_restricts.update(all_restricts)
- elif x == '-*':
- acceptable_restricts.clear()
- elif x[:1] == '-':
- acceptable_restricts.discard(x[1:])
- else:
- acceptable_restricts.add(x)
-
- if "?" in restrict_str:
- use = metadata["USE"].split()
- else:
- use = []
-
- return [x for x in use_reduce(restrict_str, uselist=use, flat=True)
- if x not in acceptable_restricts]
-
- def _accept_chost(self, cpv, metadata):
- """
- @return True if pkg CHOST is accepted, False otherwise.
- """
- if self._accept_chost_re is None:
- accept_chost = self.get("ACCEPT_CHOSTS", "").split()
- if not accept_chost:
- chost = self.get("CHOST")
- if chost:
- accept_chost.append(chost)
- if not accept_chost:
- self._accept_chost_re = re.compile(".*")
- elif len(accept_chost) == 1:
- try:
- self._accept_chost_re = re.compile(r'^%s$' % accept_chost[0])
- except re.error as e:
- writemsg(_("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n") % \
- (accept_chost[0], e), noiselevel=-1)
- self._accept_chost_re = re.compile("^$")
- else:
- try:
- self._accept_chost_re = re.compile(
- r'^(%s)$' % "|".join(accept_chost))
- except re.error as e:
- writemsg(_("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n") % \
- (" ".join(accept_chost), e), noiselevel=-1)
- self._accept_chost_re = re.compile("^$")
-
- pkg_chost = metadata.get('CHOST', '')
- return not pkg_chost or \
- self._accept_chost_re.match(pkg_chost) is not None
-
- def setinst(self, mycpv, mydbapi):
- """This used to update the preferences for old-style virtuals.
- It is no-op now."""
- pass
-
- def reload(self):
- """Reload things like /etc/profile.env that can change during runtime."""
- env_d_filename = os.path.join(self["EROOT"], "etc", "profile.env")
- self.configdict["env.d"].clear()
- env_d = getconfig(env_d_filename,
- tolerant=self._tolerant, expand=False)
- if env_d:
- # env_d will be None if profile.env doesn't exist.
- for k in self._env_d_blacklist:
- env_d.pop(k, None)
- self.configdict["env.d"].update(env_d)
-
- def regenerate(self, useonly=0, use_cache=None):
- """
- Regenerate settings
- This involves regenerating valid USE flags, re-expanding USE_EXPAND flags
- re-stacking USE flags (-flag and -*), as well as any other INCREMENTAL
- variables. This also updates the env.d configdict; useful in case an ebuild
- changes the environment.
-
- If FEATURES has already stacked, it is not stacked twice.
-
- @param useonly: Only regenerate USE flags (not any other incrementals)
- @type useonly: Boolean
- @rtype: None
- """
-
- if use_cache is not None:
- warnings.warn("The use_cache parameter for config.regenerate() is deprecated and without effect.",
- DeprecationWarning, stacklevel=2)
-
- self.modifying()
-
- if useonly:
- myincrementals=["USE"]
- else:
- myincrementals = self.incrementals
- myincrementals = set(myincrementals)
-
- # Process USE last because it depends on USE_EXPAND which is also
- # an incremental!
- myincrementals.discard("USE")
-
- mydbs = self.configlist[:-1]
- mydbs.append(self.backupenv)
-
- # ACCEPT_LICENSE is a lazily evaluated incremental, so that * can be
- # used to match all licenses without every having to explicitly expand
- # it to all licenses.
- if self.local_config:
- mysplit = []
- for curdb in mydbs:
- mysplit.extend(curdb.get('ACCEPT_LICENSE', '').split())
- mysplit = prune_incremental(mysplit)
- accept_license_str = ' '.join(mysplit) or '* -@EULA'
- self.configlist[-1]['ACCEPT_LICENSE'] = accept_license_str
- self._license_manager.set_accept_license_str(accept_license_str)
- else:
- # repoman will accept any license
- self._license_manager.set_accept_license_str("*")
-
- # ACCEPT_PROPERTIES works like ACCEPT_LICENSE, without groups
- if self.local_config:
- mysplit = []
- for curdb in mydbs:
- mysplit.extend(curdb.get('ACCEPT_PROPERTIES', '').split())
- mysplit = prune_incremental(mysplit)
- self.configlist[-1]['ACCEPT_PROPERTIES'] = ' '.join(mysplit)
- if tuple(mysplit) != self._accept_properties:
- self._accept_properties = tuple(mysplit)
- else:
- # repoman will accept any property
- self._accept_properties = ('*',)
-
- if self.local_config:
- mysplit = []
- for curdb in mydbs:
- mysplit.extend(curdb.get('ACCEPT_RESTRICT', '').split())
- mysplit = prune_incremental(mysplit)
- self.configlist[-1]['ACCEPT_RESTRICT'] = ' '.join(mysplit)
- if tuple(mysplit) != self._accept_restrict:
- self._accept_restrict = tuple(mysplit)
- else:
- # repoman will accept any property
- self._accept_restrict = ('*',)
-
- increment_lists = {}
- for k in myincrementals:
- incremental_list = []
- increment_lists[k] = incremental_list
- for curdb in mydbs:
- v = curdb.get(k)
- if v is not None:
- incremental_list.append(v.split())
-
- if 'FEATURES' in increment_lists:
- increment_lists['FEATURES'].append(self._features_overrides)
-
- myflags = set()
- for mykey, incremental_list in increment_lists.items():
-
- myflags.clear()
- for mysplit in incremental_list:
-
- for x in mysplit:
- if x=="-*":
- # "-*" is a special "minus" var that means "unset all settings".
- # so USE="-* gnome" will have *just* gnome enabled.
- myflags.clear()
- continue
-
- if x[0]=="+":
- # Not legal. People assume too much. Complain.
- writemsg(colorize("BAD",
- _("%s values should not start with a '+': %s") % (mykey,x)) \
- + "\n", noiselevel=-1)
- x=x[1:]
- if not x:
- continue
-
- if x[0] == "-":
- myflags.discard(x[1:])
- continue
-
- # We got here, so add it now.
- myflags.add(x)
-
- #store setting in last element of configlist, the original environment:
- if myflags or mykey in self:
- self.configlist[-1][mykey] = " ".join(sorted(myflags))
-
- # Do the USE calculation last because it depends on USE_EXPAND.
- use_expand = self.get("USE_EXPAND", "").split()
- use_expand_dict = self._use_expand_dict
- use_expand_dict.clear()
- for k in use_expand:
- v = self.get(k)
- if v is not None:
- use_expand_dict[k] = v
-
- use_expand_unprefixed = self.get("USE_EXPAND_UNPREFIXED", "").split()
-
- # In order to best accomodate the long-standing practice of
- # setting default USE_EXPAND variables in the profile's
- # make.defaults, we translate these variables into their
- # equivalent USE flags so that useful incremental behavior
- # is enabled (for sub-profiles).
- configdict_defaults = self.configdict['defaults']
- if self._make_defaults is not None:
- for i, cfg in enumerate(self._make_defaults):
- if not cfg:
- self.make_defaults_use.append("")
- continue
- use = cfg.get("USE", "")
- expand_use = []
-
- for k in use_expand_unprefixed:
- v = cfg.get(k)
- if v is not None:
- expand_use.extend(v.split())
-
- for k in use_expand_dict:
- v = cfg.get(k)
- if v is None:
- continue
- prefix = k.lower() + '_'
- for x in v.split():
- if x[:1] == '-':
- expand_use.append('-' + prefix + x[1:])
- else:
- expand_use.append(prefix + x)
-
- if expand_use:
- expand_use.append(use)
- use = ' '.join(expand_use)
- self.make_defaults_use.append(use)
- self.make_defaults_use = tuple(self.make_defaults_use)
- # Preserve both positive and negative flags here, since
- # negative flags may later interact with other flags pulled
- # in via USE_ORDER.
- configdict_defaults['USE'] = ' '.join(
- filter(None, self.make_defaults_use))
- # Set to None so this code only runs once.
- self._make_defaults = None
-
- if not self.uvlist:
- for x in self["USE_ORDER"].split(":"):
- if x in self.configdict:
- self.uvlist.append(self.configdict[x])
- self.uvlist.reverse()
-
- # For optimal performance, use slice
- # comparison instead of startswith().
- iuse = self.configdict["pkg"].get("IUSE")
- if iuse is not None:
- iuse = [x.lstrip("+-") for x in iuse.split()]
- myflags = set()
- for curdb in self.uvlist:
-
- for k in use_expand_unprefixed:
- v = curdb.get(k)
- if v is None:
- continue
- for x in v.split():
- if x[:1] == "-":
- myflags.discard(x[1:])
- else:
- myflags.add(x)
-
- cur_use_expand = [x for x in use_expand if x in curdb]
- mysplit = curdb.get("USE", "").split()
- if not mysplit and not cur_use_expand:
- continue
- for x in mysplit:
- if x == "-*":
- myflags.clear()
- continue
-
- if x[0] == "+":
- writemsg(colorize("BAD", _("USE flags should not start "
- "with a '+': %s\n") % x), noiselevel=-1)
- x = x[1:]
- if not x:
- continue
-
- if x[0] == "-":
- if x[-2:] == '_*':
- prefix = x[1:-1]
- prefix_len = len(prefix)
- myflags.difference_update(
- [y for y in myflags if \
- y[:prefix_len] == prefix])
- myflags.discard(x[1:])
- continue
-
- if iuse is not None and x[-2:] == '_*':
- # Expand wildcards here, so that cases like
- # USE="linguas_* -linguas_en_US" work correctly.
- prefix = x[:-1]
- prefix_len = len(prefix)
- has_iuse = False
- for y in iuse:
- if y[:prefix_len] == prefix:
- has_iuse = True
- myflags.add(y)
- if not has_iuse:
- # There are no matching IUSE, so allow the
- # wildcard to pass through. This allows
- # linguas_* to trigger unset LINGUAS in
- # cases when no linguas_ flags are in IUSE.
- myflags.add(x)
- else:
- myflags.add(x)
-
- if curdb is configdict_defaults:
- # USE_EXPAND flags from make.defaults are handled
- # earlier, in order to provide useful incremental
- # behavior (for sub-profiles).
- continue
-
- for var in cur_use_expand:
- var_lower = var.lower()
- is_not_incremental = var not in myincrementals
- if is_not_incremental:
- prefix = var_lower + "_"
- prefix_len = len(prefix)
- for x in list(myflags):
- if x[:prefix_len] == prefix:
- myflags.remove(x)
- for x in curdb[var].split():
- if x[0] == "+":
- if is_not_incremental:
- writemsg(colorize("BAD", _("Invalid '+' "
- "operator in non-incremental variable "
- "'%s': '%s'\n") % (var, x)), noiselevel=-1)
- continue
- else:
- writemsg(colorize("BAD", _("Invalid '+' "
- "operator in incremental variable "
- "'%s': '%s'\n") % (var, x)), noiselevel=-1)
- x = x[1:]
- if x[0] == "-":
- if is_not_incremental:
- writemsg(colorize("BAD", _("Invalid '-' "
- "operator in non-incremental variable "
- "'%s': '%s'\n") % (var, x)), noiselevel=-1)
- continue
- myflags.discard(var_lower + "_" + x[1:])
- continue
- myflags.add(var_lower + "_" + x)
-
- if hasattr(self, "features"):
- self.features._features.clear()
- else:
- self.features = features_set(self)
- self.features._features.update(self.get('FEATURES', '').split())
- self.features._sync_env_var()
- self.features._validate()
-
- myflags.update(self.useforce)
- arch = self.configdict["defaults"].get("ARCH")
- if arch:
- myflags.add(arch)
-
- myflags.difference_update(self.usemask)
- self.configlist[-1]["USE"]= " ".join(sorted(myflags))
-
- if self.mycpv is None:
- # Generate global USE_EXPAND variables settings that are
- # consistent with USE, for display by emerge --info. For
- # package instances, these are instead generated via
- # setcpv().
- for k in use_expand:
- prefix = k.lower() + '_'
- prefix_len = len(prefix)
- expand_flags = set( x[prefix_len:] for x in myflags \
- if x[:prefix_len] == prefix )
- var_split = use_expand_dict.get(k, '').split()
- var_split = [ x for x in var_split if x in expand_flags ]
- var_split.extend(sorted(expand_flags.difference(var_split)))
- if var_split:
- self.configlist[-1][k] = ' '.join(var_split)
- elif k in self:
- self.configlist[-1][k] = ''
-
- for k in use_expand_unprefixed:
- var_split = self.get(k, '').split()
- var_split = [ x for x in var_split if x in myflags ]
- if var_split:
- self.configlist[-1][k] = ' '.join(var_split)
- elif k in self:
- self.configlist[-1][k] = ''
-
- @property
- def virts_p(self):
- warnings.warn("portage config.virts_p attribute " + \
- "is deprecated, use config.get_virts_p()",
- DeprecationWarning, stacklevel=2)
- return self.get_virts_p()
-
- @property
- def virtuals(self):
- warnings.warn("portage config.virtuals attribute " + \
- "is deprecated, use config.getvirtuals()",
- DeprecationWarning, stacklevel=2)
- return self.getvirtuals()
-
- def get_virts_p(self):
- # Ensure that we don't trigger the _treeVirtuals
- # assertion in VirtualsManager._compile_virtuals().
- self.getvirtuals()
- return self._virtuals_manager.get_virts_p()
-
- def getvirtuals(self):
- if self._virtuals_manager._treeVirtuals is None:
- #Hack around the fact that VirtualsManager needs a vartree
- #and vartree needs a config instance.
- #This code should be part of VirtualsManager.getvirtuals().
- if self.local_config:
- temp_vartree = vartree(settings=self)
- self._virtuals_manager._populate_treeVirtuals(temp_vartree)
- else:
- self._virtuals_manager._treeVirtuals = {}
-
- return self._virtuals_manager.getvirtuals()
-
- def _populate_treeVirtuals_if_needed(self, vartree):
- """Reduce the provides into a list by CP."""
- if self._virtuals_manager._treeVirtuals is None:
- if self.local_config:
- self._virtuals_manager._populate_treeVirtuals(vartree)
- else:
- self._virtuals_manager._treeVirtuals = {}
-
- def __delitem__(self,mykey):
- self.pop(mykey)
-
- def __getitem__(self, key):
- try:
- return self._getitem(key)
- except KeyError:
- if portage._internal_caller:
- stack = traceback.format_stack()[:-1] + traceback.format_exception(*sys.exc_info())[1:]
- try:
- # Ensure that output is written to terminal.
- with open("/dev/tty", "w") as f:
- f.write("=" * 96 + "\n")
- f.write("=" * 8 + " Traceback for invalid call to portage.package.ebuild.config.config.__getitem__ " + "=" * 8 + "\n")
- f.writelines(stack)
- f.write("=" * 96 + "\n")
- except Exception:
- pass
- raise
- else:
- warnings.warn(_("Passing nonexistent key %r to %s is deprecated. Use %s instead.") %
- (key, "portage.package.ebuild.config.config.__getitem__",
- "portage.package.ebuild.config.config.get"), DeprecationWarning, stacklevel=2)
- return ""
-
- def _getitem(self, mykey):
-
- if mykey in self._constant_keys:
- # These two point to temporary values when
- # portage plans to update itself.
- if mykey == "PORTAGE_BIN_PATH":
- return portage._bin_path
- if mykey == "PORTAGE_PYM_PATH":
- return portage._pym_path
-
- if mykey == "PORTAGE_PYTHONPATH":
- value = [x for x in \
- self.backupenv.get("PYTHONPATH", "").split(":") if x]
- need_pym_path = True
- if value:
- try:
- need_pym_path = not os.path.samefile(value[0],
- portage._pym_path)
- except OSError:
- pass
- if need_pym_path:
- value.insert(0, portage._pym_path)
- return ":".join(value)
-
- if mykey == "PORTAGE_GID":
- return "%s" % portage_gid
-
- for d in self.lookuplist:
- try:
- return d[mykey]
- except KeyError:
- pass
-
- deprecated_key = self._deprecated_keys.get(mykey)
- if deprecated_key is not None:
- value = self._getitem(deprecated_key)
- #warnings.warn(_("Key %s has been renamed to %s. Please ",
- # "update your configuration") % (deprecated_key, mykey),
- # UserWarning)
- return value
-
- raise KeyError(mykey)
-
- def get(self, k, x=None):
- try:
- return self._getitem(k)
- except KeyError:
- return x
-
- def pop(self, key, *args):
- self.modifying()
- if len(args) > 1:
- raise TypeError(
- "pop expected at most 2 arguments, got " + \
- repr(1 + len(args)))
- v = self
- for d in reversed(self.lookuplist):
- v = d.pop(key, v)
- if v is self:
- if args:
- return args[0]
- raise KeyError(key)
- return v
-
- def __contains__(self, mykey):
- """Called to implement membership test operators (in and not in)."""
- try:
- self._getitem(mykey)
- except KeyError:
- return False
- else:
- return True
-
- def setdefault(self, k, x=None):
- v = self.get(k)
- if v is not None:
- return v
- self[k] = x
- return x
-
- def __iter__(self):
- keys = set()
- keys.update(self._constant_keys)
- for d in self.lookuplist:
- keys.update(d)
- return iter(keys)
-
- def iterkeys(self):
- return iter(self)
-
- def iteritems(self):
- for k in self:
- yield (k, self._getitem(k))
-
- def __setitem__(self,mykey,myvalue):
- "set a value; will be thrown away at reset() time"
- if not isinstance(myvalue, str):
- raise ValueError("Invalid type being used as a value: '%s': '%s'" % (str(mykey),str(myvalue)))
-
- # Avoid potential UnicodeDecodeError exceptions later.
- mykey = _unicode_decode(mykey)
- myvalue = _unicode_decode(myvalue)
-
- self.modifying()
- self.modifiedkeys.append(mykey)
- self.configdict["env"][mykey]=myvalue
-
- def environ(self):
- "return our locally-maintained environment"
- mydict={}
- environ_filter = self._environ_filter
-
- eapi = self.get('EAPI')
- eapi_attrs = _get_eapi_attrs(eapi)
- phase = self.get('EBUILD_PHASE')
- emerge_from = self.get('EMERGE_FROM')
- filter_calling_env = False
- if self.mycpv is not None and \
- not (emerge_from == 'ebuild' and phase == 'setup') and \
- phase not in ('clean', 'cleanrm', 'depend', 'fetch'):
- temp_dir = self.get('T')
- if temp_dir is not None and \
- os.path.exists(os.path.join(temp_dir, 'environment')):
- filter_calling_env = True
-
- environ_whitelist = self._environ_whitelist
- for x, myvalue in self.iteritems():
- if x in environ_filter:
- continue
- if not isinstance(myvalue, str):
- writemsg(_("!!! Non-string value in config: %s=%s\n") % \
- (x, myvalue), noiselevel=-1)
- continue
- if filter_calling_env and \
- x not in environ_whitelist and \
- not self._environ_whitelist_re.match(x):
- # Do not allow anything to leak into the ebuild
- # environment unless it is explicitly whitelisted.
- # This ensures that variables unset by the ebuild
- # remain unset (bug #189417).
- continue
- mydict[x] = myvalue
- if "HOME" not in mydict and "BUILD_PREFIX" in mydict:
- writemsg("*** HOME not set. Setting to "+mydict["BUILD_PREFIX"]+"\n")
- mydict["HOME"]=mydict["BUILD_PREFIX"][:]
-
- if filter_calling_env:
- if phase:
- whitelist = []
- if "rpm" == phase:
- whitelist.append("RPMDIR")
- for k in whitelist:
- v = self.get(k)
- if v is not None:
- mydict[k] = v
-
- # At some point we may want to stop exporting FEATURES to the ebuild
- # environment, in order to prevent ebuilds from abusing it. In
- # preparation for that, export it as PORTAGE_FEATURES so that bashrc
- # users will be able to migrate any FEATURES conditional code to
- # use this alternative variable.
- mydict["PORTAGE_FEATURES"] = self["FEATURES"]
-
- # Filtered by IUSE and implicit IUSE.
- mydict["USE"] = self.get("PORTAGE_USE", "")
-
- # Don't export AA to the ebuild environment in EAPIs that forbid it
- if not eapi_exports_AA(eapi):
- mydict.pop("AA", None)
-
- if not eapi_exports_merge_type(eapi):
- mydict.pop("MERGE_TYPE", None)
-
- src_like_phase = (phase == 'setup' or
- _phase_func_map.get(phase, '').startswith('src_'))
-
- if not (src_like_phase and eapi_attrs.sysroot):
- mydict.pop("ESYSROOT", None)
-
- if not (src_like_phase and eapi_attrs.broot):
- mydict.pop("BROOT", None)
-
- # Prefix variables are supported beginning with EAPI 3, or when
- # force-prefix is in FEATURES, since older EAPIs would otherwise be
- # useless with prefix configurations. This brings compatibility with
- # the prefix branch of portage, which also supports EPREFIX for all
- # EAPIs (for obvious reasons).
- if phase == 'depend' or \
- ('force-prefix' not in self.features and
- eapi is not None and not eapi_supports_prefix(eapi)):
- mydict.pop("ED", None)
- mydict.pop("EPREFIX", None)
- mydict.pop("EROOT", None)
- mydict.pop("ESYSROOT", None)
-
- if phase not in ("pretend", "setup", "preinst", "postinst") or \
- not eapi_exports_replace_vars(eapi):
- mydict.pop("REPLACING_VERSIONS", None)
-
- if phase not in ("prerm", "postrm") or \
- not eapi_exports_replace_vars(eapi):
- mydict.pop("REPLACED_BY_VERSION", None)
-
- if phase is not None and eapi_attrs.exports_EBUILD_PHASE_FUNC:
- phase_func = _phase_func_map.get(phase)
- if phase_func is not None:
- mydict["EBUILD_PHASE_FUNC"] = phase_func
-
- if eapi_attrs.posixish_locale:
- split_LC_ALL(mydict)
- mydict["LC_COLLATE"] = "C"
- # check_locale() returns None when check can not be executed.
- if check_locale(silent=True, env=mydict) is False:
- # try another locale
- for l in ("C.UTF-8", "en_US.UTF-8", "en_GB.UTF-8", "C"):
- mydict["LC_CTYPE"] = l
- if check_locale(silent=True, env=mydict):
- # TODO: output the following only once
- # writemsg(_("!!! LC_CTYPE unsupported, using %s instead\n")
- # % mydict["LC_CTYPE"])
- break
- else:
- raise AssertionError("C locale did not pass the test!")
-
- if not eapi_attrs.exports_PORTDIR:
- mydict.pop("PORTDIR", None)
- if not eapi_attrs.exports_ECLASSDIR:
- mydict.pop("ECLASSDIR", None)
-
- if not eapi_attrs.path_variables_end_with_trailing_slash:
- for v in ("D", "ED", "ROOT", "EROOT", "ESYSROOT", "BROOT"):
- if v in mydict:
- mydict[v] = mydict[v].rstrip(os.path.sep)
-
- # Since SYSROOT=/ interacts badly with autotools.eclass (bug 654600),
- # and no EAPI expects SYSROOT to have a trailing slash, always strip
- # the trailing slash from SYSROOT.
- if 'SYSROOT' in mydict:
- mydict['SYSROOT'] = mydict['SYSROOT'].rstrip(os.sep)
-
- try:
- builddir = mydict["PORTAGE_BUILDDIR"]
- distdir = mydict["DISTDIR"]
- except KeyError:
- pass
- else:
- mydict["PORTAGE_ACTUAL_DISTDIR"] = distdir
- mydict["DISTDIR"] = os.path.join(builddir, "distdir")
-
- return mydict
-
- def thirdpartymirrors(self):
- if getattr(self, "_thirdpartymirrors", None) is None:
- thirdparty_lists = []
- for repo_name in reversed(self.repositories.prepos_order):
- thirdparty_lists.append(grabdict(os.path.join(
- self.repositories[repo_name].location,
- "profiles", "thirdpartymirrors")))
- self._thirdpartymirrors = stack_dictlist(thirdparty_lists, incremental=True)
- return self._thirdpartymirrors
-
- def archlist(self):
- _archlist = []
- for myarch in self["PORTAGE_ARCHLIST"].split():
- _archlist.append(myarch)
- _archlist.append("~" + myarch)
- return _archlist
-
- def selinux_enabled(self):
- if getattr(self, "_selinux_enabled", None) is None:
- self._selinux_enabled = 0
- if "selinux" in self["USE"].split():
- if selinux:
- if selinux.is_selinux_enabled() == 1:
- self._selinux_enabled = 1
- else:
- self._selinux_enabled = 0
- else:
- writemsg(_("!!! SELinux module not found. Please verify that it was installed.\n"),
- noiselevel=-1)
- self._selinux_enabled = 0
-
- return self._selinux_enabled
-
- keys = __iter__
- items = iteritems
+ return iuse_implicit
+
+ def _getUseMask(self, pkg, stable=None):
+ return self._use_manager.getUseMask(pkg, stable=stable)
+
+ def _getUseForce(self, pkg, stable=None):
+ return self._use_manager.getUseForce(pkg, stable=stable)
+
+ def _getMaskAtom(self, cpv, metadata):
+ """
+ Take a package and return a matching package.mask atom, or None if no
+ such atom exists or it has been cancelled by package.unmask.
+
+ @param cpv: The package name
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: String
+ @return: A matching atom string or None if one is not found.
+ """
+ return self._mask_manager.getMaskAtom(
+ cpv, metadata["SLOT"], metadata.get("repository")
+ )
+
+ def _getRawMaskAtom(self, cpv, metadata):
+ """
+ Take a package and return a matching package.mask atom, or None if no
+ such atom exists or it has been cancelled by package.unmask.
+
+ @param cpv: The package name
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: String
+ @return: A matching atom string or None if one is not found.
+ """
+ return self._mask_manager.getRawMaskAtom(
+ cpv, metadata["SLOT"], metadata.get("repository")
+ )
+
+ def _getProfileMaskAtom(self, cpv, metadata):
+ """
+ Take a package and return a matching profile atom, or None if no
+ such atom exists. Note that a profile atom may or may not have a "*"
+ prefix.
+
+ @param cpv: The package name
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: String
+ @return: A matching profile atom string or None if one is not found.
+ """
+
+ warnings.warn(
+ "The config._getProfileMaskAtom() method is deprecated.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+
+ cp = cpv_getkey(cpv)
+ profile_atoms = self.prevmaskdict.get(cp)
+ if profile_atoms:
+ pkg = "".join((cpv, _slot_separator, metadata["SLOT"]))
+ repo = metadata.get("repository")
+ if repo and repo != Package.UNKNOWN_REPO:
+ pkg = "".join((pkg, _repo_separator, repo))
+ pkg_list = [pkg]
+ for x in profile_atoms:
+ if match_from_list(x, pkg_list):
+ continue
+ return x
+ return None
+
+ def _isStable(self, pkg):
+ return self._keywords_manager.isStable(
+ pkg,
+ self.get("ACCEPT_KEYWORDS", ""),
+ self.configdict["backupenv"].get("ACCEPT_KEYWORDS", ""),
+ )
+
+ def _getKeywords(self, cpv, metadata):
+ return self._keywords_manager.getKeywords(
+ cpv,
+ metadata["SLOT"],
+ metadata.get("KEYWORDS", ""),
+ metadata.get("repository"),
+ )
+
+ def _getMissingKeywords(self, cpv, metadata):
+ """
+ Take a package and return a list of any KEYWORDS that the user may
+ need to accept for the given package. If the KEYWORDS are empty
+ and the ** keyword has not been accepted, the returned list will
+ contain ** alone (in order to distinguish from the case of "none
+ missing").
+
+ @param cpv: The package name (for package.keywords support)
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: List
+ @return: A list of KEYWORDS that have not been accepted.
+ """
+
+ # Hack: Need to check the env directly here as otherwise stacking
+ # doesn't work properly as negative values are lost in the config
+ # object (bug #139600)
+ backuped_accept_keywords = self.configdict["backupenv"].get(
+ "ACCEPT_KEYWORDS", ""
+ )
+ global_accept_keywords = self.get("ACCEPT_KEYWORDS", "")
+
+ return self._keywords_manager.getMissingKeywords(
+ cpv,
+ metadata["SLOT"],
+ metadata.get("KEYWORDS", ""),
+ metadata.get("repository"),
+ global_accept_keywords,
+ backuped_accept_keywords,
+ )
+
+ def _getRawMissingKeywords(self, cpv, metadata):
+ """
+ Take a package and return a list of any KEYWORDS that the user may
+ need to accept for the given package. If the KEYWORDS are empty,
+ the returned list will contain ** alone (in order to distinguish
+ from the case of "none missing"). This DOES NOT apply any user config
+ package.accept_keywords acceptance.
+
+ @param cpv: The package name (for package.keywords support)
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: List
+ @return: lists of KEYWORDS that have not been accepted
+ and the keywords it looked for.
+ """
+ return self._keywords_manager.getRawMissingKeywords(
+ cpv,
+ metadata["SLOT"],
+ metadata.get("KEYWORDS", ""),
+ metadata.get("repository"),
+ self.get("ACCEPT_KEYWORDS", ""),
+ )
+
+ def _getPKeywords(self, cpv, metadata):
+ global_accept_keywords = self.get("ACCEPT_KEYWORDS", "")
+
+ return self._keywords_manager.getPKeywords(
+ cpv, metadata["SLOT"], metadata.get("repository"), global_accept_keywords
+ )
+
+ def _getMissingLicenses(self, cpv, metadata):
+ """
+ Take a LICENSE string and return a list of any licenses that the user
+ may need to accept for the given package. The returned list will not
+ contain any licenses that have already been accepted. This method
+ can throw an InvalidDependString exception.
+
+ @param cpv: The package name (for package.license support)
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: List
+ @return: A list of licenses that have not been accepted.
+ """
+ return self._license_manager.getMissingLicenses(
+ cpv,
+ metadata["USE"],
+ metadata["LICENSE"],
+ metadata["SLOT"],
+ metadata.get("repository"),
+ )
+
+ def _getMissingProperties(self, cpv, metadata):
+ """
+ Take a PROPERTIES string and return a list of any properties the user
+ may need to accept for the given package. The returned list will not
+ contain any properties that have already been accepted. This method
+ can throw an InvalidDependString exception.
+
+ @param cpv: The package name (for package.properties support)
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: List
+ @return: A list of properties that have not been accepted.
+ """
+ accept_properties = self._accept_properties
+ try:
+ cpv.slot
+ except AttributeError:
+ cpv = _pkg_str(cpv, metadata=metadata, settings=self)
+ cp = cpv_getkey(cpv)
+ cpdict = self._ppropertiesdict.get(cp)
+ if cpdict:
+ pproperties_list = ordered_by_atom_specificity(cpdict, cpv)
+ if pproperties_list:
+ accept_properties = list(self._accept_properties)
+ for x in pproperties_list:
+ accept_properties.extend(x)
+
+ properties_str = metadata.get("PROPERTIES", "")
+ properties = set(use_reduce(properties_str, matchall=1, flat=True))
+
+ acceptable_properties = set()
+ for x in accept_properties:
+ if x == "*":
+ acceptable_properties.update(properties)
+ elif x == "-*":
+ acceptable_properties.clear()
+ elif x[:1] == "-":
+ acceptable_properties.discard(x[1:])
+ else:
+ acceptable_properties.add(x)
+
+ if "?" in properties_str:
+ use = metadata["USE"].split()
+ else:
+ use = []
+
+ return [
+ x
+ for x in use_reduce(properties_str, uselist=use, flat=True)
+ if x not in acceptable_properties
+ ]
+
+ def _getMissingRestrict(self, cpv, metadata):
+ """
+ Take a RESTRICT string and return a list of any tokens the user
+ may need to accept for the given package. The returned list will not
+ contain any tokens that have already been accepted. This method
+ can throw an InvalidDependString exception.
+
+ @param cpv: The package name (for package.accept_restrict support)
+ @type cpv: String
+ @param metadata: A dictionary of raw package metadata
+ @type metadata: dict
+ @rtype: List
+ @return: A list of tokens that have not been accepted.
+ """
+ accept_restrict = self._accept_restrict
+ try:
+ cpv.slot
+ except AttributeError:
+ cpv = _pkg_str(cpv, metadata=metadata, settings=self)
+ cp = cpv_getkey(cpv)
+ cpdict = self._paccept_restrict.get(cp)
+ if cpdict:
+ paccept_restrict_list = ordered_by_atom_specificity(cpdict, cpv)
+ if paccept_restrict_list:
+ accept_restrict = list(self._accept_restrict)
+ for x in paccept_restrict_list:
+ accept_restrict.extend(x)
+
+ restrict_str = metadata.get("RESTRICT", "")
+ all_restricts = set(use_reduce(restrict_str, matchall=1, flat=True))
+
+ acceptable_restricts = set()
+ for x in accept_restrict:
+ if x == "*":
+ acceptable_restricts.update(all_restricts)
+ elif x == "-*":
+ acceptable_restricts.clear()
+ elif x[:1] == "-":
+ acceptable_restricts.discard(x[1:])
+ else:
+ acceptable_restricts.add(x)
+
+ if "?" in restrict_str:
+ use = metadata["USE"].split()
+ else:
+ use = []
+
+ return [
+ x
+ for x in use_reduce(restrict_str, uselist=use, flat=True)
+ if x not in acceptable_restricts
+ ]
+
+ def _accept_chost(self, cpv, metadata):
+ """
+ @return True if pkg CHOST is accepted, False otherwise.
+ """
+ if self._accept_chost_re is None:
+ accept_chost = self.get("ACCEPT_CHOSTS", "").split()
+ if not accept_chost:
+ chost = self.get("CHOST")
+ if chost:
+ accept_chost.append(chost)
+ if not accept_chost:
+ self._accept_chost_re = re.compile(".*")
+ elif len(accept_chost) == 1:
+ try:
+ self._accept_chost_re = re.compile(r"^%s$" % accept_chost[0])
+ except re.error as e:
+ writemsg(
+ _("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
+ % (accept_chost[0], e),
+ noiselevel=-1,
+ )
+ self._accept_chost_re = re.compile("^$")
+ else:
+ try:
+ self._accept_chost_re = re.compile(
+ r"^(%s)$" % "|".join(accept_chost)
+ )
+ except re.error as e:
+ writemsg(
+ _("!!! Invalid ACCEPT_CHOSTS value: '%s': %s\n")
+ % (" ".join(accept_chost), e),
+ noiselevel=-1,
+ )
+ self._accept_chost_re = re.compile("^$")
+
+ pkg_chost = metadata.get("CHOST", "")
+ return not pkg_chost or self._accept_chost_re.match(pkg_chost) is not None
+
+ def setinst(self, mycpv, mydbapi):
+ """This used to update the preferences for old-style virtuals.
+ It is no-op now."""
+ pass
+
+ def reload(self):
+ """Reload things like /etc/profile.env that can change during runtime."""
+ env_d_filename = os.path.join(self["EROOT"], "etc", "profile.env")
+ self.configdict["env.d"].clear()
+ env_d = getconfig(env_d_filename, tolerant=self._tolerant, expand=False)
+ if env_d:
+ # env_d will be None if profile.env doesn't exist.
+ for k in self._env_d_blacklist:
+ env_d.pop(k, None)
+ self.configdict["env.d"].update(env_d)
+
+ def regenerate(self, useonly=0, use_cache=None):
+ """
+ Regenerate settings
+ This involves regenerating valid USE flags, re-expanding USE_EXPAND flags
+ re-stacking USE flags (-flag and -*), as well as any other INCREMENTAL
+ variables. This also updates the env.d configdict; useful in case an ebuild
+ changes the environment.
+
+ If FEATURES has already stacked, it is not stacked twice.
+
+ @param useonly: Only regenerate USE flags (not any other incrementals)
+ @type useonly: Boolean
+ @rtype: None
+ """
+
+ if use_cache is not None:
+ warnings.warn(
+ "The use_cache parameter for config.regenerate() is deprecated and without effect.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+
+ self.modifying()
+
+ if useonly:
+ myincrementals = ["USE"]
+ else:
+ myincrementals = self.incrementals
+ myincrementals = set(myincrementals)
+
+ # Process USE last because it depends on USE_EXPAND which is also
+ # an incremental!
+ myincrementals.discard("USE")
+
+ mydbs = self.configlist[:-1]
+ mydbs.append(self.backupenv)
+
+ # ACCEPT_LICENSE is a lazily evaluated incremental, so that * can be
+ # used to match all licenses without every having to explicitly expand
+ # it to all licenses.
+ if self.local_config:
+ mysplit = []
+ for curdb in mydbs:
+ mysplit.extend(curdb.get("ACCEPT_LICENSE", "").split())
+ mysplit = prune_incremental(mysplit)
+ accept_license_str = " ".join(mysplit) or "* -@EULA"
+ self.configlist[-1]["ACCEPT_LICENSE"] = accept_license_str
+ self._license_manager.set_accept_license_str(accept_license_str)
+ else:
+ # repoman will accept any license
+ self._license_manager.set_accept_license_str("*")
+
+ # ACCEPT_PROPERTIES works like ACCEPT_LICENSE, without groups
+ if self.local_config:
+ mysplit = []
+ for curdb in mydbs:
+ mysplit.extend(curdb.get("ACCEPT_PROPERTIES", "").split())
+ mysplit = prune_incremental(mysplit)
+ self.configlist[-1]["ACCEPT_PROPERTIES"] = " ".join(mysplit)
+ if tuple(mysplit) != self._accept_properties:
+ self._accept_properties = tuple(mysplit)
+ else:
+ # repoman will accept any property
+ self._accept_properties = ("*",)
+
+ if self.local_config:
+ mysplit = []
+ for curdb in mydbs:
+ mysplit.extend(curdb.get("ACCEPT_RESTRICT", "").split())
+ mysplit = prune_incremental(mysplit)
+ self.configlist[-1]["ACCEPT_RESTRICT"] = " ".join(mysplit)
+ if tuple(mysplit) != self._accept_restrict:
+ self._accept_restrict = tuple(mysplit)
+ else:
+ # repoman will accept any property
+ self._accept_restrict = ("*",)
+
+ increment_lists = {}
+ for k in myincrementals:
+ incremental_list = []
+ increment_lists[k] = incremental_list
+ for curdb in mydbs:
+ v = curdb.get(k)
+ if v is not None:
+ incremental_list.append(v.split())
+
+ if "FEATURES" in increment_lists:
+ increment_lists["FEATURES"].append(self._features_overrides)
+
+ myflags = set()
+ for mykey, incremental_list in increment_lists.items():
+
+ myflags.clear()
+ for mysplit in incremental_list:
+
+ for x in mysplit:
+ if x == "-*":
+ # "-*" is a special "minus" var that means "unset all settings".
+ # so USE="-* gnome" will have *just* gnome enabled.
+ myflags.clear()
+ continue
+
+ if x[0] == "+":
+ # Not legal. People assume too much. Complain.
+ writemsg(
+ colorize(
+ "BAD",
+ _("%s values should not start with a '+': %s")
+ % (mykey, x),
+ )
+ + "\n",
+ noiselevel=-1,
+ )
+ x = x[1:]
+ if not x:
+ continue
+
+ if x[0] == "-":
+ myflags.discard(x[1:])
+ continue
+
+ # We got here, so add it now.
+ myflags.add(x)
+
+ # store setting in last element of configlist, the original environment:
+ if myflags or mykey in self:
+ self.configlist[-1][mykey] = " ".join(sorted(myflags))
+
+ # Do the USE calculation last because it depends on USE_EXPAND.
+ use_expand = self.get("USE_EXPAND", "").split()
+ use_expand_dict = self._use_expand_dict
+ use_expand_dict.clear()
+ for k in use_expand:
+ v = self.get(k)
+ if v is not None:
+ use_expand_dict[k] = v
+
+ use_expand_unprefixed = self.get("USE_EXPAND_UNPREFIXED", "").split()
+
+ # In order to best accomodate the long-standing practice of
+ # setting default USE_EXPAND variables in the profile's
+ # make.defaults, we translate these variables into their
+ # equivalent USE flags so that useful incremental behavior
+ # is enabled (for sub-profiles).
+ configdict_defaults = self.configdict["defaults"]
+ if self._make_defaults is not None:
+ for i, cfg in enumerate(self._make_defaults):
+ if not cfg:
+ self.make_defaults_use.append("")
+ continue
+ use = cfg.get("USE", "")
+ expand_use = []
+
+ for k in use_expand_unprefixed:
+ v = cfg.get(k)
+ if v is not None:
+ expand_use.extend(v.split())
+
+ for k in use_expand_dict:
+ v = cfg.get(k)
+ if v is None:
+ continue
+ prefix = k.lower() + "_"
+ for x in v.split():
+ if x[:1] == "-":
+ expand_use.append("-" + prefix + x[1:])
+ else:
+ expand_use.append(prefix + x)
+
+ if expand_use:
+ expand_use.append(use)
+ use = " ".join(expand_use)
+ self.make_defaults_use.append(use)
+ self.make_defaults_use = tuple(self.make_defaults_use)
+ # Preserve both positive and negative flags here, since
+ # negative flags may later interact with other flags pulled
+ # in via USE_ORDER.
+ configdict_defaults["USE"] = " ".join(filter(None, self.make_defaults_use))
+ # Set to None so this code only runs once.
+ self._make_defaults = None
+
+ if not self.uvlist:
+ for x in self["USE_ORDER"].split(":"):
+ if x in self.configdict:
+ self.uvlist.append(self.configdict[x])
+ self.uvlist.reverse()
+
+ # For optimal performance, use slice
+ # comparison instead of startswith().
+ iuse = self.configdict["pkg"].get("IUSE")
+ if iuse is not None:
+ iuse = [x.lstrip("+-") for x in iuse.split()]
+ myflags = set()
+ for curdb in self.uvlist:
+
+ for k in use_expand_unprefixed:
+ v = curdb.get(k)
+ if v is None:
+ continue
+ for x in v.split():
+ if x[:1] == "-":
+ myflags.discard(x[1:])
+ else:
+ myflags.add(x)
+
+ cur_use_expand = [x for x in use_expand if x in curdb]
+ mysplit = curdb.get("USE", "").split()
+ if not mysplit and not cur_use_expand:
+ continue
+ for x in mysplit:
+ if x == "-*":
+ myflags.clear()
+ continue
+
+ if x[0] == "+":
+ writemsg(
+ colorize(
+ "BAD",
+ _("USE flags should not start " "with a '+': %s\n") % x,
+ ),
+ noiselevel=-1,
+ )
+ x = x[1:]
+ if not x:
+ continue
+
+ if x[0] == "-":
+ if x[-2:] == "_*":
+ prefix = x[1:-1]
+ prefix_len = len(prefix)
+ myflags.difference_update(
+ [y for y in myflags if y[:prefix_len] == prefix]
+ )
+ myflags.discard(x[1:])
+ continue
+
+ if iuse is not None and x[-2:] == "_*":
+ # Expand wildcards here, so that cases like
+ # USE="linguas_* -linguas_en_US" work correctly.
+ prefix = x[:-1]
+ prefix_len = len(prefix)
+ has_iuse = False
+ for y in iuse:
+ if y[:prefix_len] == prefix:
+ has_iuse = True
+ myflags.add(y)
+ if not has_iuse:
+ # There are no matching IUSE, so allow the
+ # wildcard to pass through. This allows
+ # linguas_* to trigger unset LINGUAS in
+ # cases when no linguas_ flags are in IUSE.
+ myflags.add(x)
+ else:
+ myflags.add(x)
+
+ if curdb is configdict_defaults:
+ # USE_EXPAND flags from make.defaults are handled
+ # earlier, in order to provide useful incremental
+ # behavior (for sub-profiles).
+ continue
+
+ for var in cur_use_expand:
+ var_lower = var.lower()
+ is_not_incremental = var not in myincrementals
+ if is_not_incremental:
+ prefix = var_lower + "_"
+ prefix_len = len(prefix)
+ for x in list(myflags):
+ if x[:prefix_len] == prefix:
+ myflags.remove(x)
+ for x in curdb[var].split():
+ if x[0] == "+":
+ if is_not_incremental:
+ writemsg(
+ colorize(
+ "BAD",
+ _(
+ "Invalid '+' "
+ "operator in non-incremental variable "
+ "'%s': '%s'\n"
+ )
+ % (var, x),
+ ),
+ noiselevel=-1,
+ )
+ continue
+ else:
+ writemsg(
+ colorize(
+ "BAD",
+ _(
+ "Invalid '+' "
+ "operator in incremental variable "
+ "'%s': '%s'\n"
+ )
+ % (var, x),
+ ),
+ noiselevel=-1,
+ )
+ x = x[1:]
+ if x[0] == "-":
+ if is_not_incremental:
+ writemsg(
+ colorize(
+ "BAD",
+ _(
+ "Invalid '-' "
+ "operator in non-incremental variable "
+ "'%s': '%s'\n"
+ )
+ % (var, x),
+ ),
+ noiselevel=-1,
+ )
+ continue
+ myflags.discard(var_lower + "_" + x[1:])
+ continue
+ myflags.add(var_lower + "_" + x)
+
+ if hasattr(self, "features"):
+ self.features._features.clear()
+ else:
+ self.features = features_set(self)
+ self.features._features.update(self.get("FEATURES", "").split())
+ self.features._sync_env_var()
+ self.features._validate()
+
+ myflags.update(self.useforce)
+ arch = self.configdict["defaults"].get("ARCH")
+ if arch:
+ myflags.add(arch)
+
+ myflags.difference_update(self.usemask)
+ self.configlist[-1]["USE"] = " ".join(sorted(myflags))
+
+ if self.mycpv is None:
+ # Generate global USE_EXPAND variables settings that are
+ # consistent with USE, for display by emerge --info. For
+ # package instances, these are instead generated via
+ # setcpv().
+ for k in use_expand:
+ prefix = k.lower() + "_"
+ prefix_len = len(prefix)
+ expand_flags = set(
+ x[prefix_len:] for x in myflags if x[:prefix_len] == prefix
+ )
+ var_split = use_expand_dict.get(k, "").split()
+ var_split = [x for x in var_split if x in expand_flags]
+ var_split.extend(sorted(expand_flags.difference(var_split)))
+ if var_split:
+ self.configlist[-1][k] = " ".join(var_split)
+ elif k in self:
+ self.configlist[-1][k] = ""
+
+ for k in use_expand_unprefixed:
+ var_split = self.get(k, "").split()
+ var_split = [x for x in var_split if x in myflags]
+ if var_split:
+ self.configlist[-1][k] = " ".join(var_split)
+ elif k in self:
+ self.configlist[-1][k] = ""
+
+ @property
+ def virts_p(self):
+ warnings.warn(
+ "portage config.virts_p attribute "
+ + "is deprecated, use config.get_virts_p()",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ return self.get_virts_p()
+
+ @property
+ def virtuals(self):
+ warnings.warn(
+ "portage config.virtuals attribute "
+ + "is deprecated, use config.getvirtuals()",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ return self.getvirtuals()
+
+ def get_virts_p(self):
+ # Ensure that we don't trigger the _treeVirtuals
+ # assertion in VirtualsManager._compile_virtuals().
+ self.getvirtuals()
+ return self._virtuals_manager.get_virts_p()
+
+ def getvirtuals(self):
+ if self._virtuals_manager._treeVirtuals is None:
+ # Hack around the fact that VirtualsManager needs a vartree
+ # and vartree needs a config instance.
+ # This code should be part of VirtualsManager.getvirtuals().
+ if self.local_config:
+ temp_vartree = vartree(settings=self)
+ self._virtuals_manager._populate_treeVirtuals(temp_vartree)
+ else:
+ self._virtuals_manager._treeVirtuals = {}
+
+ return self._virtuals_manager.getvirtuals()
+
+ def _populate_treeVirtuals_if_needed(self, vartree):
+ """Reduce the provides into a list by CP."""
+ if self._virtuals_manager._treeVirtuals is None:
+ if self.local_config:
+ self._virtuals_manager._populate_treeVirtuals(vartree)
+ else:
+ self._virtuals_manager._treeVirtuals = {}
+
+ def __delitem__(self, mykey):
+ self.pop(mykey)
+
+ def __getitem__(self, key):
+ try:
+ return self._getitem(key)
+ except KeyError:
+ if portage._internal_caller:
+ stack = (
+ traceback.format_stack()[:-1]
+ + traceback.format_exception(*sys.exc_info())[1:]
+ )
+ try:
+ # Ensure that output is written to terminal.
+ with open("/dev/tty", "w") as f:
+ f.write("=" * 96 + "\n")
+ f.write(
+ "=" * 8
+ + " Traceback for invalid call to portage.package.ebuild.config.config.__getitem__ "
+ + "=" * 8
+ + "\n"
+ )
+ f.writelines(stack)
+ f.write("=" * 96 + "\n")
+ except Exception:
+ pass
+ raise
+ else:
+ warnings.warn(
+ _("Passing nonexistent key %r to %s is deprecated. Use %s instead.")
+ % (
+ key,
+ "portage.package.ebuild.config.config.__getitem__",
+ "portage.package.ebuild.config.config.get",
+ ),
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ return ""
+
+ def _getitem(self, mykey):
+
+ if mykey in self._constant_keys:
+ # These two point to temporary values when
+ # portage plans to update itself.
+ if mykey == "PORTAGE_BIN_PATH":
+ return portage._bin_path
+ if mykey == "PORTAGE_PYM_PATH":
+ return portage._pym_path
+
+ if mykey == "PORTAGE_PYTHONPATH":
+ value = [
+ x for x in self.backupenv.get("PYTHONPATH", "").split(":") if x
+ ]
+ need_pym_path = True
+ if value:
+ try:
+ need_pym_path = not os.path.samefile(
+ value[0], portage._pym_path
+ )
+ except OSError:
+ pass
+ if need_pym_path:
+ value.insert(0, portage._pym_path)
+ return ":".join(value)
+
+ if mykey == "PORTAGE_GID":
+ return "%s" % portage_gid
+
+ for d in self.lookuplist:
+ try:
+ return d[mykey]
+ except KeyError:
+ pass
+
+ deprecated_key = self._deprecated_keys.get(mykey)
+ if deprecated_key is not None:
+ value = self._getitem(deprecated_key)
+ # warnings.warn(_("Key %s has been renamed to %s. Please ",
+ # "update your configuration") % (deprecated_key, mykey),
+ # UserWarning)
+ return value
+
+ raise KeyError(mykey)
+
+ def get(self, k, x=None):
+ try:
+ return self._getitem(k)
+ except KeyError:
+ return x
+
+ def pop(self, key, *args):
+ self.modifying()
+ if len(args) > 1:
+ raise TypeError(
+ "pop expected at most 2 arguments, got " + repr(1 + len(args))
+ )
+ v = self
+ for d in reversed(self.lookuplist):
+ v = d.pop(key, v)
+ if v is self:
+ if args:
+ return args[0]
+ raise KeyError(key)
+ return v
+
+ def __contains__(self, mykey):
+ """Called to implement membership test operators (in and not in)."""
+ try:
+ self._getitem(mykey)
+ except KeyError:
+ return False
+ else:
+ return True
+
+ def setdefault(self, k, x=None):
+ v = self.get(k)
+ if v is not None:
+ return v
+ self[k] = x
+ return x
+
+ def __iter__(self):
+ keys = set()
+ keys.update(self._constant_keys)
+ for d in self.lookuplist:
+ keys.update(d)
+ return iter(keys)
+
+ def iterkeys(self):
+ return iter(self)
+
+ def iteritems(self):
+ for k in self:
+ yield (k, self._getitem(k))
+
+ def __setitem__(self, mykey, myvalue):
+ "set a value; will be thrown away at reset() time"
+ if not isinstance(myvalue, str):
+ raise ValueError(
+ "Invalid type being used as a value: '%s': '%s'"
+ % (str(mykey), str(myvalue))
+ )
+
+ # Avoid potential UnicodeDecodeError exceptions later.
+ mykey = _unicode_decode(mykey)
+ myvalue = _unicode_decode(myvalue)
+
+ self.modifying()
+ self.modifiedkeys.append(mykey)
+ self.configdict["env"][mykey] = myvalue
+
+ def environ(self):
+ "return our locally-maintained environment"
+ mydict = {}
+ environ_filter = self._environ_filter
+
+ eapi = self.get("EAPI")
+ eapi_attrs = _get_eapi_attrs(eapi)
+ phase = self.get("EBUILD_PHASE")
+ emerge_from = self.get("EMERGE_FROM")
+ filter_calling_env = False
+ if (
+ self.mycpv is not None
+ and not (emerge_from == "ebuild" and phase == "setup")
+ and phase not in ("clean", "cleanrm", "depend", "fetch")
+ ):
+ temp_dir = self.get("T")
+ if temp_dir is not None and os.path.exists(
+ os.path.join(temp_dir, "environment")
+ ):
+ filter_calling_env = True
+
+ environ_whitelist = self._environ_whitelist
+ for x, myvalue in self.iteritems():
+ if x in environ_filter:
+ continue
+ if not isinstance(myvalue, str):
+ writemsg(
+ _("!!! Non-string value in config: %s=%s\n") % (x, myvalue),
+ noiselevel=-1,
+ )
+ continue
+ if (
+ filter_calling_env
+ and x not in environ_whitelist
+ and not self._environ_whitelist_re.match(x)
+ ):
+ # Do not allow anything to leak into the ebuild
+ # environment unless it is explicitly whitelisted.
+ # This ensures that variables unset by the ebuild
+ # remain unset (bug #189417).
+ continue
+ mydict[x] = myvalue
+ if "HOME" not in mydict and "BUILD_PREFIX" in mydict:
+ writemsg("*** HOME not set. Setting to " + mydict["BUILD_PREFIX"] + "\n")
+ mydict["HOME"] = mydict["BUILD_PREFIX"][:]
+
+ if filter_calling_env:
+ if phase:
+ whitelist = []
+ if "rpm" == phase:
+ whitelist.append("RPMDIR")
+ for k in whitelist:
+ v = self.get(k)
+ if v is not None:
+ mydict[k] = v
+
+ # At some point we may want to stop exporting FEATURES to the ebuild
+ # environment, in order to prevent ebuilds from abusing it. In
+ # preparation for that, export it as PORTAGE_FEATURES so that bashrc
+ # users will be able to migrate any FEATURES conditional code to
+ # use this alternative variable.
+ mydict["PORTAGE_FEATURES"] = self["FEATURES"]
+
+ # Filtered by IUSE and implicit IUSE.
+ mydict["USE"] = self.get("PORTAGE_USE", "")
+
+ # Don't export AA to the ebuild environment in EAPIs that forbid it
+ if not eapi_exports_AA(eapi):
+ mydict.pop("AA", None)
+
+ if not eapi_exports_merge_type(eapi):
+ mydict.pop("MERGE_TYPE", None)
+
+ src_like_phase = phase == "setup" or _phase_func_map.get(phase, "").startswith(
+ "src_"
+ )
+
+ if not (src_like_phase and eapi_attrs.sysroot):
+ mydict.pop("ESYSROOT", None)
+
+ if not (src_like_phase and eapi_attrs.broot):
+ mydict.pop("BROOT", None)
+
+ # Prefix variables are supported beginning with EAPI 3, or when
+ # force-prefix is in FEATURES, since older EAPIs would otherwise be
+ # useless with prefix configurations. This brings compatibility with
+ # the prefix branch of portage, which also supports EPREFIX for all
+ # EAPIs (for obvious reasons).
+ if phase == "depend" or (
+ "force-prefix" not in self.features
+ and eapi is not None
+ and not eapi_supports_prefix(eapi)
+ ):
+ mydict.pop("ED", None)
+ mydict.pop("EPREFIX", None)
+ mydict.pop("EROOT", None)
+ mydict.pop("ESYSROOT", None)
+
+ if (
+ phase
+ not in (
+ "pretend",
+ "setup",
+ "preinst",
+ "postinst",
+ )
+ or not eapi_exports_replace_vars(eapi)
+ ):
+ mydict.pop("REPLACING_VERSIONS", None)
+
+ if phase not in ("prerm", "postrm") or not eapi_exports_replace_vars(eapi):
+ mydict.pop("REPLACED_BY_VERSION", None)
+
+ if phase is not None and eapi_attrs.exports_EBUILD_PHASE_FUNC:
+ phase_func = _phase_func_map.get(phase)
+ if phase_func is not None:
+ mydict["EBUILD_PHASE_FUNC"] = phase_func
+
+ if eapi_attrs.posixish_locale:
+ split_LC_ALL(mydict)
+ mydict["LC_COLLATE"] = "C"
+ # check_locale() returns None when check can not be executed.
+ if check_locale(silent=True, env=mydict) is False:
+ # try another locale
+ for l in ("C.UTF-8", "en_US.UTF-8", "en_GB.UTF-8", "C"):
+ mydict["LC_CTYPE"] = l
+ if check_locale(silent=True, env=mydict):
+ # TODO: output the following only once
+ # writemsg(_("!!! LC_CTYPE unsupported, using %s instead\n")
+ # % mydict["LC_CTYPE"])
+ break
+ else:
+ raise AssertionError("C locale did not pass the test!")
+
+ if not eapi_attrs.exports_PORTDIR:
+ mydict.pop("PORTDIR", None)
+ if not eapi_attrs.exports_ECLASSDIR:
+ mydict.pop("ECLASSDIR", None)
+
+ if not eapi_attrs.path_variables_end_with_trailing_slash:
+ for v in ("D", "ED", "ROOT", "EROOT", "ESYSROOT", "BROOT"):
+ if v in mydict:
+ mydict[v] = mydict[v].rstrip(os.path.sep)
+
+ # Since SYSROOT=/ interacts badly with autotools.eclass (bug 654600),
+ # and no EAPI expects SYSROOT to have a trailing slash, always strip
+ # the trailing slash from SYSROOT.
+ if "SYSROOT" in mydict:
+ mydict["SYSROOT"] = mydict["SYSROOT"].rstrip(os.sep)
+
+ try:
+ builddir = mydict["PORTAGE_BUILDDIR"]
+ distdir = mydict["DISTDIR"]
+ except KeyError:
+ pass
+ else:
+ mydict["PORTAGE_ACTUAL_DISTDIR"] = distdir
+ mydict["DISTDIR"] = os.path.join(builddir, "distdir")
+
+ return mydict
+
+ def thirdpartymirrors(self):
+ if getattr(self, "_thirdpartymirrors", None) is None:
+ thirdparty_lists = []
+ for repo_name in reversed(self.repositories.prepos_order):
+ thirdparty_lists.append(
+ grabdict(
+ os.path.join(
+ self.repositories[repo_name].location,
+ "profiles",
+ "thirdpartymirrors",
+ )
+ )
+ )
+ self._thirdpartymirrors = stack_dictlist(thirdparty_lists, incremental=True)
+ return self._thirdpartymirrors
+
+ def archlist(self):
+ _archlist = []
+ for myarch in self["PORTAGE_ARCHLIST"].split():
+ _archlist.append(myarch)
+ _archlist.append("~" + myarch)
+ return _archlist
+
+ def selinux_enabled(self):
+ if getattr(self, "_selinux_enabled", None) is None:
+ self._selinux_enabled = 0
+ if "selinux" in self["USE"].split():
+ if selinux:
+ if selinux.is_selinux_enabled() == 1:
+ self._selinux_enabled = 1
+ else:
+ self._selinux_enabled = 0
+ else:
+ writemsg(
+ _(
+ "!!! SELinux module not found. Please verify that it was installed.\n"
+ ),
+ noiselevel=-1,
+ )
+ self._selinux_enabled = 0
+
+ return self._selinux_enabled
+
+ keys = __iter__
+ items = iteritems
diff --cc lib/portage/package/ebuild/doebuild.py
index 190c34528,9650a8444..1829a8209
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@@ -1776,811 -2246,960 +2246,971 @@@ def _post_phase_emptydir_cleanup(mysett
def _check_build_log(mysettings, out=None):
- """
- Search the content of $PORTAGE_LOG_FILE if it exists
- and generate the following QA Notices when appropriate:
-
- * Automake "maintainer mode"
- * command not found
- * Unrecognized configure options
- """
- logfile = mysettings.get("PORTAGE_LOG_FILE")
- if logfile is None:
- return
- try:
- f = open(_unicode_encode(logfile, encoding=_encodings['fs'],
- errors='strict'), mode='rb')
- except EnvironmentError:
- return
+ """
+ Search the content of $PORTAGE_LOG_FILE if it exists
+ and generate the following QA Notices when appropriate:
+
+ * Automake "maintainer mode"
+ * command not found
+ * Unrecognized configure options
+ """
+ logfile = mysettings.get("PORTAGE_LOG_FILE")
+ if logfile is None:
+ return
+ try:
+ f = open(
+ _unicode_encode(logfile, encoding=_encodings["fs"], errors="strict"),
+ mode="rb",
+ )
+ except EnvironmentError:
+ return
+
+ f_real = None
+ if logfile.endswith(".gz"):
+ f_real = f
+ f = gzip.GzipFile(filename="", mode="rb", fileobj=f)
+
+ am_maintainer_mode = []
+ bash_command_not_found = []
+ bash_command_not_found_re = re.compile(
+ r"(.*): line (\d*): (.*): command not found$"
+ )
+ command_not_found_exclude_re = re.compile(r"/configure: line ")
+ helper_missing_file = []
+ helper_missing_file_re = re.compile(r"^!!! (do|new).*: .* does not exist$")
+
+ configure_opts_warn = []
+ configure_opts_warn_re = re.compile(
+ r"^configure: WARNING: [Uu]nrecognized options: (.*)"
+ )
+
+ qa_configure_opts = ""
+ try:
+ with io.open(
+ _unicode_encode(
+ os.path.join(
+ mysettings["PORTAGE_BUILDDIR"], "build-info", "QA_CONFIGURE_OPTIONS"
+ ),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ ) as qa_configure_opts_f:
+ qa_configure_opts = qa_configure_opts_f.read()
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+
+ qa_configure_opts = qa_configure_opts.split()
+ if qa_configure_opts:
+ if len(qa_configure_opts) > 1:
+ qa_configure_opts = "|".join("(%s)" % x for x in qa_configure_opts)
+ qa_configure_opts = "^(%s)$" % qa_configure_opts
+ else:
+ qa_configure_opts = "^%s$" % qa_configure_opts[0]
+ qa_configure_opts = re.compile(qa_configure_opts)
+
+ qa_am_maintainer_mode = []
+ try:
+ with io.open(
+ _unicode_encode(
+ os.path.join(
+ mysettings["PORTAGE_BUILDDIR"],
+ "build-info",
+ "QA_AM_MAINTAINER_MODE",
+ ),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ ) as qa_am_maintainer_mode_f:
+ qa_am_maintainer_mode = [
+ x for x in qa_am_maintainer_mode_f.read().splitlines() if x
+ ]
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+
+ if qa_am_maintainer_mode:
+ if len(qa_am_maintainer_mode) > 1:
+ qa_am_maintainer_mode = "|".join("(%s)" % x for x in qa_am_maintainer_mode)
+ qa_am_maintainer_mode = "^(%s)$" % qa_am_maintainer_mode
+ else:
+ qa_am_maintainer_mode = "^%s$" % qa_am_maintainer_mode[0]
+ qa_am_maintainer_mode = re.compile(qa_am_maintainer_mode)
+
+ # Exclude output from dev-libs/yaz-3.0.47 which looks like this:
+ #
+ # Configuration:
+ # Automake: ${SHELL} /var/tmp/portage/dev-libs/yaz-3.0.47/work/yaz-3.0.47/config/missing --run automake-1.10
+ am_maintainer_mode_re = re.compile(r"/missing --run ")
+ am_maintainer_mode_exclude_re = re.compile(
+ r"(/missing --run (autoheader|autotest|help2man|makeinfo)|^\s*Automake:\s)"
+ )
+
+ make_jobserver_re = re.compile(r"g?make\[\d+\]: warning: jobserver unavailable:")
+ make_jobserver = []
+
+ # we deduplicate these since they is repeated for every setup.py call
+ setuptools_warn = set()
+ setuptools_warn_re = re.compile(r".*\/setuptools\/.*: .*Warning: (.*)")
+ # skip useless version normalization warnings
+ setuptools_warn_ignore_re = [re.compile(r"Normalizing .*")]
+
+ def _eerror(lines):
+ for line in lines:
+ eerror(line, phase="install", key=mysettings.mycpv, out=out)
+
+ try:
+ for line in f:
+ line = _unicode_decode(line)
+ if (
+ am_maintainer_mode_re.search(line) is not None
+ and am_maintainer_mode_exclude_re.search(line) is None
+ and (
+ not qa_am_maintainer_mode
+ or qa_am_maintainer_mode.search(line) is None
+ )
+ ):
+ am_maintainer_mode.append(line.rstrip("\n"))
+
+ if (
+ bash_command_not_found_re.match(line) is not None
+ and command_not_found_exclude_re.search(line) is None
+ ):
+ bash_command_not_found.append(line.rstrip("\n"))
+
+ if helper_missing_file_re.match(line) is not None:
+ helper_missing_file.append(line.rstrip("\n"))
+
+ m = configure_opts_warn_re.match(line)
+ if m is not None:
+ for x in m.group(1).split(", "):
+ if not qa_configure_opts or qa_configure_opts.match(x) is None:
+ configure_opts_warn.append(x)
+
+ if make_jobserver_re.match(line) is not None:
+ make_jobserver.append(line.rstrip("\n"))
+
+ m = setuptools_warn_re.match(line)
+ if m is not None:
+ warn_text = m.group(1)
+ for ign in setuptools_warn_ignore_re:
+ if ign.match(warn_text):
+ break
+ else:
+ setuptools_warn.add(warn_text)
+
+ except (EOFError, zlib.error) as e:
+ _eerror(
+ [
+ "portage encountered a zlib error: '%s'" % (e,),
+ "while reading the log file: '%s'" % logfile,
+ ]
+ )
+ finally:
+ f.close()
+
+ def _eqawarn(lines):
+ for line in lines:
+ eqawarn(line, phase="install", key=mysettings.mycpv, out=out)
+
+ wrap_width = 70
+
+ if am_maintainer_mode:
+ msg = [_('QA Notice: Automake "maintainer mode" detected:')]
+ msg.append("")
+ msg.extend("\t" + line for line in am_maintainer_mode)
+ msg.append("")
+ msg.extend(
+ wrap(
+ _(
+ "If you patch Makefile.am, "
+ "configure.in, or configure.ac then you "
+ "should use autotools.eclass and "
+ "eautomake or eautoreconf. Exceptions "
+ "are limited to system packages "
+ "for which it is impossible to run "
+ "autotools during stage building. "
+ "See https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Autotools_failures"
+ " for more information."
+ ),
+ wrap_width,
+ )
+ )
+ _eqawarn(msg)
+
+ if bash_command_not_found:
+ msg = [_("QA Notice: command not found:")]
+ msg.append("")
+ msg.extend("\t" + line for line in bash_command_not_found)
+ _eqawarn(msg)
+
+ if helper_missing_file:
+ msg = [_("QA Notice: file does not exist:")]
+ msg.append("")
+ msg.extend("\t" + line[4:] for line in helper_missing_file)
+ _eqawarn(msg)
+
+ if configure_opts_warn:
+ msg = [_("QA Notice: Unrecognized configure options:")]
+ msg.append("")
+ msg.extend("\t%s" % x for x in configure_opts_warn)
+ _eqawarn(msg)
+
+ if make_jobserver:
+ msg = [_("QA Notice: make jobserver unavailable:")]
+ msg.append("")
+ msg.extend("\t" + line for line in make_jobserver)
+ _eqawarn(msg)
+
+ if setuptools_warn:
+ msg = [_("QA Notice: setuptools warnings detected:")]
+ msg.append("")
+ msg.extend("\t" + line for line in sorted(setuptools_warn))
+ _eqawarn(msg)
+
+ f.close()
+ if f_real is not None:
+ f_real.close()
- f_real = None
- if logfile.endswith('.gz'):
- f_real = f
- f = gzip.GzipFile(filename='', mode='rb', fileobj=f)
-
- am_maintainer_mode = []
- bash_command_not_found = []
- bash_command_not_found_re = re.compile(
- r'(.*): line (\d*): (.*): command not found$')
- command_not_found_exclude_re = re.compile(r'/configure: line ')
- helper_missing_file = []
- helper_missing_file_re = re.compile(
- r'^!!! (do|new).*: .* does not exist$')
-
- configure_opts_warn = []
- configure_opts_warn_re = re.compile(
- r'^configure: WARNING: [Uu]nrecognized options: (.*)')
-
- qa_configure_opts = ""
- try:
- with io.open(_unicode_encode(os.path.join(
- mysettings["PORTAGE_BUILDDIR"],
- "build-info", "QA_CONFIGURE_OPTIONS"),
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace') as qa_configure_opts_f:
- qa_configure_opts = qa_configure_opts_f.read()
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
-
- qa_configure_opts = qa_configure_opts.split()
- if qa_configure_opts:
- if len(qa_configure_opts) > 1:
- qa_configure_opts = "|".join("(%s)" % x for x in qa_configure_opts)
- qa_configure_opts = "^(%s)$" % qa_configure_opts
- else:
- qa_configure_opts = "^%s$" % qa_configure_opts[0]
- qa_configure_opts = re.compile(qa_configure_opts)
-
- qa_am_maintainer_mode = []
- try:
- with io.open(_unicode_encode(os.path.join(
- mysettings["PORTAGE_BUILDDIR"],
- "build-info", "QA_AM_MAINTAINER_MODE"),
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace') as qa_am_maintainer_mode_f:
- qa_am_maintainer_mode = [x for x in
- qa_am_maintainer_mode_f.read().splitlines() if x]
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
-
- if qa_am_maintainer_mode:
- if len(qa_am_maintainer_mode) > 1:
- qa_am_maintainer_mode = \
- "|".join("(%s)" % x for x in qa_am_maintainer_mode)
- qa_am_maintainer_mode = "^(%s)$" % qa_am_maintainer_mode
- else:
- qa_am_maintainer_mode = "^%s$" % qa_am_maintainer_mode[0]
- qa_am_maintainer_mode = re.compile(qa_am_maintainer_mode)
-
- # Exclude output from dev-libs/yaz-3.0.47 which looks like this:
- #
- #Configuration:
- # Automake: ${SHELL} /var/tmp/portage/dev-libs/yaz-3.0.47/work/yaz-3.0.47/config/missing --run automake-1.10
- am_maintainer_mode_re = re.compile(r'/missing --run ')
- am_maintainer_mode_exclude_re = \
- re.compile(r'(/missing --run (autoheader|autotest|help2man|makeinfo)|^\s*Automake:\s)')
-
- make_jobserver_re = \
- re.compile(r'g?make\[\d+\]: warning: jobserver unavailable:')
- make_jobserver = []
-
- # we deduplicate these since they is repeated for every setup.py call
- setuptools_warn = set()
- setuptools_warn_re = re.compile(r'.*\/setuptools\/.*: .*Warning: (.*)')
- # skip useless version normalization warnings
- setuptools_warn_ignore_re = [
- re.compile(r'Normalizing .*')
- ]
-
- def _eerror(lines):
- for line in lines:
- eerror(line, phase="install", key=mysettings.mycpv, out=out)
-
- try:
- for line in f:
- line = _unicode_decode(line)
- if am_maintainer_mode_re.search(line) is not None and \
- am_maintainer_mode_exclude_re.search(line) is None and \
- (not qa_am_maintainer_mode or
- qa_am_maintainer_mode.search(line) is None):
- am_maintainer_mode.append(line.rstrip("\n"))
-
- if bash_command_not_found_re.match(line) is not None and \
- command_not_found_exclude_re.search(line) is None:
- bash_command_not_found.append(line.rstrip("\n"))
-
- if helper_missing_file_re.match(line) is not None:
- helper_missing_file.append(line.rstrip("\n"))
-
- m = configure_opts_warn_re.match(line)
- if m is not None:
- for x in m.group(1).split(", "):
- if not qa_configure_opts or qa_configure_opts.match(x) is None:
- configure_opts_warn.append(x)
-
- if make_jobserver_re.match(line) is not None:
- make_jobserver.append(line.rstrip("\n"))
-
- m = setuptools_warn_re.match(line)
- if m is not None:
- warn_text = m.group(1)
- for ign in setuptools_warn_ignore_re:
- if ign.match(warn_text):
- break
- else:
- setuptools_warn.add(warn_text)
-
- except (EOFError, zlib.error) as e:
- _eerror(["portage encountered a zlib error: '%s'" % (e,),
- "while reading the log file: '%s'" % logfile])
- finally:
- f.close()
-
- def _eqawarn(lines):
- for line in lines:
- eqawarn(line, phase="install", key=mysettings.mycpv, out=out)
- wrap_width = 70
-
- if am_maintainer_mode:
- msg = [_("QA Notice: Automake \"maintainer mode\" detected:")]
- msg.append("")
- msg.extend("\t" + line for line in am_maintainer_mode)
- msg.append("")
- msg.extend(wrap(_(
- "If you patch Makefile.am, "
- "configure.in, or configure.ac then you "
- "should use autotools.eclass and "
- "eautomake or eautoreconf. Exceptions "
- "are limited to system packages "
- "for which it is impossible to run "
- "autotools during stage building. "
- "See https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Autotools_failures"
- " for more information."),
- wrap_width))
- _eqawarn(msg)
-
- if bash_command_not_found:
- msg = [_("QA Notice: command not found:")]
- msg.append("")
- msg.extend("\t" + line for line in bash_command_not_found)
- _eqawarn(msg)
-
- if helper_missing_file:
- msg = [_("QA Notice: file does not exist:")]
- msg.append("")
- msg.extend("\t" + line[4:] for line in helper_missing_file)
- _eqawarn(msg)
-
- if configure_opts_warn:
- msg = [_("QA Notice: Unrecognized configure options:")]
- msg.append("")
- msg.extend("\t%s" % x for x in configure_opts_warn)
- _eqawarn(msg)
-
- if make_jobserver:
- msg = [_("QA Notice: make jobserver unavailable:")]
- msg.append("")
- msg.extend("\t" + line for line in make_jobserver)
- _eqawarn(msg)
-
- if setuptools_warn:
- msg = [_("QA Notice: setuptools warnings detected:")]
- msg.append("")
- msg.extend("\t" + line for line in sorted(setuptools_warn))
- _eqawarn(msg)
-
- f.close()
- if f_real is not None:
- f_real.close()
def _post_src_install_write_metadata(settings):
- """
- It's possible that the ebuild has changed the
- CHOST variable, so revert it to the initial
- setting. Also, revert IUSE in case it's corrupted
- due to local environment settings like in bug #386829.
- """
+ """
+ It's possible that the ebuild has changed the
+ CHOST variable, so revert it to the initial
+ setting. Also, revert IUSE in case it's corrupted
+ due to local environment settings like in bug #386829.
+ """
- eapi_attrs = _get_eapi_attrs(settings.configdict['pkg']['EAPI'])
+ eapi_attrs = _get_eapi_attrs(settings.configdict["pkg"]["EAPI"])
- build_info_dir = os.path.join(settings['PORTAGE_BUILDDIR'], 'build-info')
+ build_info_dir = os.path.join(settings["PORTAGE_BUILDDIR"], "build-info")
- metadata_keys = ['IUSE']
- if eapi_attrs.iuse_effective:
- metadata_keys.append('IUSE_EFFECTIVE')
+ metadata_keys = ["IUSE"]
+ if eapi_attrs.iuse_effective:
+ metadata_keys.append("IUSE_EFFECTIVE")
- for k in metadata_keys:
- v = settings.configdict['pkg'].get(k)
+ for k in metadata_keys:
+ v = settings.configdict["pkg"].get(k)
+ if "force-multilib" in settings.features:
+ v = v + " abiwrapper"
+ for i in settings.get('MULTILIB_ABIS').split():
+ v = v + " multilib_abi_" + i
- if v is not None:
- write_atomic(os.path.join(build_info_dir, k), v + '\n')
-
- for k in ('CHOST',):
- v = settings.get(k)
- if v is not None:
- write_atomic(os.path.join(build_info_dir, k), v + '\n')
-
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- 'BUILD_TIME'), encoding=_encodings['fs'], errors='strict'),
- mode='w', encoding=_encodings['repo.content'],
- errors='strict') as f:
- f.write("%.0f\n" % (time.time(),))
-
- use = frozenset(settings['PORTAGE_USE'].split())
- for k in _vdb_use_conditional_keys:
- v = settings.configdict['pkg'].get(k)
- filename = os.path.join(build_info_dir, k)
- if v is None:
- try:
- os.unlink(filename)
- except OSError:
- pass
- continue
-
- if k.endswith('DEPEND'):
- if eapi_attrs.slot_operator:
- continue
- token_class = Atom
- else:
- token_class = None
-
- v = use_reduce(v, uselist=use, token_class=token_class)
- v = paren_enclose(v)
- if not v:
- try:
- os.unlink(filename)
- except OSError:
- pass
- continue
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- k), encoding=_encodings['fs'], errors='strict'),
- mode='w', encoding=_encodings['repo.content'],
- errors='strict') as f:
- f.write('%s\n' % v)
-
- if eapi_attrs.slot_operator:
- deps = evaluate_slot_operator_equal_deps(settings, use, QueryCommand.get_db())
- for k, v in deps.items():
- filename = os.path.join(build_info_dir, k)
- if not v:
- try:
- os.unlink(filename)
- except OSError:
- pass
- continue
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- k), encoding=_encodings['fs'], errors='strict'),
- mode='w', encoding=_encodings['repo.content'],
- errors='strict') as f:
- f.write('%s\n' % v)
+ if v is not None:
+ write_atomic(os.path.join(build_info_dir, k), v + "\n")
+
+ for k in ("CHOST",):
+ v = settings.get(k)
+ if v is not None:
+ write_atomic(os.path.join(build_info_dir, k), v + "\n")
+
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, "BUILD_TIME"),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="w",
+ encoding=_encodings["repo.content"],
+ errors="strict",
+ ) as f:
+ f.write("%.0f\n" % (time.time(),))
+
+ use = frozenset(settings["PORTAGE_USE"].split())
+ for k in _vdb_use_conditional_keys:
+ v = settings.configdict["pkg"].get(k)
+ filename = os.path.join(build_info_dir, k)
+ if v is None:
+ try:
+ os.unlink(filename)
+ except OSError:
+ pass
+ continue
+
+ if k.endswith("DEPEND"):
+ if eapi_attrs.slot_operator:
+ continue
+ token_class = Atom
+ else:
+ token_class = None
+
+ v = use_reduce(v, uselist=use, token_class=token_class)
+ v = paren_enclose(v)
+ if not v:
+ try:
+ os.unlink(filename)
+ except OSError:
+ pass
+ continue
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, k),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="w",
+ encoding=_encodings["repo.content"],
+ errors="strict",
+ ) as f:
+ f.write("%s\n" % v)
+
+ if eapi_attrs.slot_operator:
+ deps = evaluate_slot_operator_equal_deps(settings, use, QueryCommand.get_db())
+ for k, v in deps.items():
+ filename = os.path.join(build_info_dir, k)
+ if not v:
+ try:
+ os.unlink(filename)
+ except OSError:
+ pass
+ continue
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, k),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="w",
+ encoding=_encodings["repo.content"],
+ errors="strict",
+ ) as f:
+ f.write("%s\n" % v)
- def _preinst_bsdflags(mysettings):
- if bsd_chflags:
- # Save all the file flags for restoration later.
- os.system("mtree -c -p %s -k flags > %s" % \
- (_shell_quote(mysettings["D"]),
- _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree"))))
- # Remove all the file flags to avoid EPERM errors.
- os.system("chflags -R noschg,nouchg,nosappnd,nouappnd %s" % \
- (_shell_quote(mysettings["D"]),))
- os.system("chflags -R nosunlnk,nouunlnk %s 2>/dev/null" % \
- (_shell_quote(mysettings["D"]),))
+ def _preinst_bsdflags(mysettings):
+ if bsd_chflags:
+ # Save all the file flags for restoration later.
+ os.system(
+ "mtree -c -p %s -k flags > %s"
+ % (
+ _shell_quote(mysettings["D"]),
+ _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree")),
+ )
+ )
+
+ # Remove all the file flags to avoid EPERM errors.
+ os.system(
+ "chflags -R noschg,nouchg,nosappnd,nouappnd %s"
+ % (_shell_quote(mysettings["D"]),)
+ )
+ os.system(
+ "chflags -R nosunlnk,nouunlnk %s 2>/dev/null"
+ % (_shell_quote(mysettings["D"]),)
+ )
def _postinst_bsdflags(mysettings):
- if bsd_chflags:
- # Restore all of the flags saved above.
- os.system("mtree -e -p %s -U -k flags < %s > /dev/null" % \
- (_shell_quote(mysettings["ROOT"]),
- _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree"))))
+ if bsd_chflags:
+ # Restore all of the flags saved above.
+ os.system(
+ "mtree -e -p %s -U -k flags < %s > /dev/null"
+ % (
+ _shell_quote(mysettings["ROOT"]),
+ _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree")),
+ )
+ )
+
def _post_src_install_uid_fix(mysettings, out):
- """
- Files in $D with user and group bits that match the "portage"
- user or group are automatically mapped to PORTAGE_INST_UID and
- PORTAGE_INST_GID if necessary. The chown system call may clear
- S_ISUID and S_ISGID bits, so those bits are restored if
- necessary.
- """
-
- os = _os_merge
-
- inst_uid = int(mysettings["PORTAGE_INST_UID"])
- inst_gid = int(mysettings["PORTAGE_INST_GID"])
-
- _preinst_bsdflags(mysettings)
-
- destdir = mysettings["D"]
- ed_len = len(mysettings["ED"])
- unicode_errors = []
- desktop_file_validate = \
- portage.process.find_binary("desktop-file-validate") is not None
- xdg_dirs = mysettings.get('XDG_DATA_DIRS', '/usr/share').split(':')
- xdg_dirs = tuple(os.path.join(i, "applications") + os.sep
- for i in xdg_dirs if i)
-
- qa_desktop_file = ""
- try:
- with io.open(_unicode_encode(os.path.join(
- mysettings["PORTAGE_BUILDDIR"],
- "build-info", "QA_DESKTOP_FILE"),
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace') as f:
- qa_desktop_file = f.read()
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
-
- qa_desktop_file = qa_desktop_file.split()
- if qa_desktop_file:
- if len(qa_desktop_file) > 1:
- qa_desktop_file = "|".join("(%s)" % x for x in qa_desktop_file)
- qa_desktop_file = "^(%s)$" % qa_desktop_file
- else:
- qa_desktop_file = "^%s$" % qa_desktop_file[0]
- qa_desktop_file = re.compile(qa_desktop_file)
-
- while True:
-
- unicode_error = False
- size = 0
- counted_inodes = set()
- fixlafiles_announced = False
- fixlafiles = "fixlafiles" in mysettings.features
- desktopfile_errors = []
-
- for parent, dirs, files in os.walk(destdir):
- try:
- parent = _unicode_decode(parent,
- encoding=_encodings['merge'], errors='strict')
- except UnicodeDecodeError:
- new_parent = _unicode_decode(parent,
- encoding=_encodings['merge'], errors='replace')
- new_parent = _unicode_encode(new_parent,
- encoding='ascii', errors='backslashreplace')
- new_parent = _unicode_decode(new_parent,
- encoding=_encodings['merge'], errors='replace')
- os.rename(parent, new_parent)
- unicode_error = True
- unicode_errors.append(new_parent[ed_len:])
- break
-
- for fname in chain(dirs, files):
- try:
- fname = _unicode_decode(fname,
- encoding=_encodings['merge'], errors='strict')
- except UnicodeDecodeError:
- fpath = _os.path.join(
- parent.encode(_encodings['merge']), fname)
- new_fname = _unicode_decode(fname,
- encoding=_encodings['merge'], errors='replace')
- new_fname = _unicode_encode(new_fname,
- encoding='ascii', errors='backslashreplace')
- new_fname = _unicode_decode(new_fname,
- encoding=_encodings['merge'], errors='replace')
- new_fpath = os.path.join(parent, new_fname)
- os.rename(fpath, new_fpath)
- unicode_error = True
- unicode_errors.append(new_fpath[ed_len:])
- fname = new_fname
- fpath = new_fpath
- else:
- fpath = os.path.join(parent, fname)
-
- fpath_relative = fpath[ed_len - 1:]
- if desktop_file_validate and fname.endswith(".desktop") and \
- os.path.isfile(fpath) and \
- fpath_relative.startswith(xdg_dirs) and \
- not (qa_desktop_file and qa_desktop_file.match(fpath_relative.strip(os.sep)) is not None):
-
- desktop_validate = validate_desktop_entry(fpath)
- if desktop_validate:
- desktopfile_errors.extend(desktop_validate)
-
- if fixlafiles and \
- fname.endswith(".la") and os.path.isfile(fpath):
- f = open(_unicode_encode(fpath,
- encoding=_encodings['merge'], errors='strict'),
- mode='rb')
- has_lafile_header = b'.la - a libtool library file' \
- in f.readline()
- f.seek(0)
- contents = f.read()
- f.close()
- try:
- needs_update, new_contents = rewrite_lafile(contents)
- except portage.exception.InvalidData as e:
- needs_update = False
- if not fixlafiles_announced:
- fixlafiles_announced = True
- writemsg("Fixing .la files\n", fd=out)
-
- # Suppress warnings if the file does not have the
- # expected header (bug #340725). Even if the header is
- # missing, we still call rewrite_lafile() since some
- # valid libtool archives may not have the header.
- msg = " %s is not a valid libtool archive, skipping\n" % fpath[len(destdir):]
- qa_msg = "QA Notice: invalid .la file found: %s, %s" % (fpath[len(destdir):], e)
- if has_lafile_header:
- writemsg(msg, fd=out)
- eqawarn(qa_msg, key=mysettings.mycpv, out=out)
-
- if needs_update:
- if not fixlafiles_announced:
- fixlafiles_announced = True
- writemsg("Fixing .la files\n", fd=out)
- writemsg(" %s\n" % fpath[len(destdir):], fd=out)
- # write_atomic succeeds even in some cases in which
- # a normal write might fail due to file permission
- # settings on some operating systems such as HP-UX
- write_atomic(_unicode_encode(fpath,
- encoding=_encodings['merge'], errors='strict'),
- new_contents, mode='wb')
-
- mystat = os.lstat(fpath)
- if stat.S_ISREG(mystat.st_mode) and \
- mystat.st_ino not in counted_inodes:
- counted_inodes.add(mystat.st_ino)
- size += mystat.st_size
- if mystat.st_uid != portage_uid and \
- mystat.st_gid != portage_gid:
- continue
- myuid = -1
- mygid = -1
- if mystat.st_uid == portage_uid:
- myuid = inst_uid
- if mystat.st_gid == portage_gid:
- mygid = inst_gid
- apply_secpass_permissions(
- _unicode_encode(fpath, encoding=_encodings['merge']),
- uid=myuid, gid=mygid,
- mode=mystat.st_mode, stat_cached=mystat,
- follow_links=False)
-
- if unicode_error:
- break
-
- if not unicode_error:
- break
-
- if desktopfile_errors:
- for l in _merge_desktopfile_error(desktopfile_errors):
- l = l.replace(mysettings["ED"], '/')
- eqawarn(l, phase='install', key=mysettings.mycpv, out=out)
-
- if unicode_errors:
- for l in _merge_unicode_error(unicode_errors):
- eqawarn(l, phase='install', key=mysettings.mycpv, out=out)
-
- build_info_dir = os.path.join(mysettings['PORTAGE_BUILDDIR'],
- 'build-info')
-
- f = io.open(_unicode_encode(os.path.join(build_info_dir,
- 'SIZE'), encoding=_encodings['fs'], errors='strict'),
- mode='w', encoding=_encodings['repo.content'],
- errors='strict')
- f.write('%d\n' % size)
- f.close()
-
- _reapply_bsdflags_to_image(mysettings)
+ """
+ Files in $D with user and group bits that match the "portage"
+ user or group are automatically mapped to PORTAGE_INST_UID and
+ PORTAGE_INST_GID if necessary. The chown system call may clear
+ S_ISUID and S_ISGID bits, so those bits are restored if
+ necessary.
+ """
+
+ os = _os_merge
+
+ inst_uid = int(mysettings["PORTAGE_INST_UID"])
+ inst_gid = int(mysettings["PORTAGE_INST_GID"])
+
+ _preinst_bsdflags(mysettings)
+
+ destdir = mysettings["D"]
+ ed_len = len(mysettings["ED"])
+ unicode_errors = []
+ desktop_file_validate = (
+ portage.process.find_binary("desktop-file-validate") is not None
+ )
+ xdg_dirs = mysettings.get("XDG_DATA_DIRS", "/usr/share").split(":")
+ xdg_dirs = tuple(os.path.join(i, "applications") + os.sep for i in xdg_dirs if i)
+
+ qa_desktop_file = ""
+ try:
+ with io.open(
+ _unicode_encode(
+ os.path.join(
+ mysettings["PORTAGE_BUILDDIR"], "build-info", "QA_DESKTOP_FILE"
+ ),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ ) as f:
+ qa_desktop_file = f.read()
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+
+ qa_desktop_file = qa_desktop_file.split()
+ if qa_desktop_file:
+ if len(qa_desktop_file) > 1:
+ qa_desktop_file = "|".join("(%s)" % x for x in qa_desktop_file)
+ qa_desktop_file = "^(%s)$" % qa_desktop_file
+ else:
+ qa_desktop_file = "^%s$" % qa_desktop_file[0]
+ qa_desktop_file = re.compile(qa_desktop_file)
+
+ while True:
+
+ unicode_error = False
+ size = 0
+ counted_inodes = set()
+ fixlafiles_announced = False
+ fixlafiles = "fixlafiles" in mysettings.features
+ desktopfile_errors = []
+
+ for parent, dirs, files in os.walk(destdir):
+ try:
+ parent = _unicode_decode(
+ parent, encoding=_encodings["merge"], errors="strict"
+ )
+ except UnicodeDecodeError:
+ new_parent = _unicode_decode(
+ parent, encoding=_encodings["merge"], errors="replace"
+ )
+ new_parent = _unicode_encode(
+ new_parent, encoding="ascii", errors="backslashreplace"
+ )
+ new_parent = _unicode_decode(
+ new_parent, encoding=_encodings["merge"], errors="replace"
+ )
+ os.rename(parent, new_parent)
+ unicode_error = True
+ unicode_errors.append(new_parent[ed_len:])
+ break
+
+ for fname in chain(dirs, files):
+ try:
+ fname = _unicode_decode(
+ fname, encoding=_encodings["merge"], errors="strict"
+ )
+ except UnicodeDecodeError:
+ fpath = _os.path.join(parent.encode(_encodings["merge"]), fname)
+ new_fname = _unicode_decode(
+ fname, encoding=_encodings["merge"], errors="replace"
+ )
+ new_fname = _unicode_encode(
+ new_fname, encoding="ascii", errors="backslashreplace"
+ )
+ new_fname = _unicode_decode(
+ new_fname, encoding=_encodings["merge"], errors="replace"
+ )
+ new_fpath = os.path.join(parent, new_fname)
+ os.rename(fpath, new_fpath)
+ unicode_error = True
+ unicode_errors.append(new_fpath[ed_len:])
+ fname = new_fname
+ fpath = new_fpath
+ else:
+ fpath = os.path.join(parent, fname)
+
+ fpath_relative = fpath[ed_len - 1 :]
+ if (
+ desktop_file_validate
+ and fname.endswith(".desktop")
+ and os.path.isfile(fpath)
+ and fpath_relative.startswith(xdg_dirs)
+ and not (
+ qa_desktop_file
+ and qa_desktop_file.match(fpath_relative.strip(os.sep))
+ is not None
+ )
+ ):
+
+ desktop_validate = validate_desktop_entry(fpath)
+ if desktop_validate:
+ desktopfile_errors.extend(desktop_validate)
+
+ if fixlafiles and fname.endswith(".la") and os.path.isfile(fpath):
+ f = open(
+ _unicode_encode(
+ fpath, encoding=_encodings["merge"], errors="strict"
+ ),
+ mode="rb",
+ )
+ has_lafile_header = b".la - a libtool library file" in f.readline()
+ f.seek(0)
+ contents = f.read()
+ f.close()
+ try:
+ needs_update, new_contents = rewrite_lafile(contents)
+ except portage.exception.InvalidData as e:
+ needs_update = False
+ if not fixlafiles_announced:
+ fixlafiles_announced = True
+ writemsg("Fixing .la files\n", fd=out)
+
+ # Suppress warnings if the file does not have the
+ # expected header (bug #340725). Even if the header is
+ # missing, we still call rewrite_lafile() since some
+ # valid libtool archives may not have the header.
+ msg = (
+ " %s is not a valid libtool archive, skipping\n"
+ % fpath[len(destdir) :]
+ )
+ qa_msg = "QA Notice: invalid .la file found: %s, %s" % (
+ fpath[len(destdir) :],
+ e,
+ )
+ if has_lafile_header:
+ writemsg(msg, fd=out)
+ eqawarn(qa_msg, key=mysettings.mycpv, out=out)
+
+ if needs_update:
+ if not fixlafiles_announced:
+ fixlafiles_announced = True
+ writemsg("Fixing .la files\n", fd=out)
+ writemsg(" %s\n" % fpath[len(destdir) :], fd=out)
+ # write_atomic succeeds even in some cases in which
+ # a normal write might fail due to file permission
+ # settings on some operating systems such as HP-UX
+ write_atomic(
+ _unicode_encode(
+ fpath, encoding=_encodings["merge"], errors="strict"
+ ),
+ new_contents,
+ mode="wb",
+ )
+
+ mystat = os.lstat(fpath)
+ if stat.S_ISREG(mystat.st_mode) and mystat.st_ino not in counted_inodes:
+ counted_inodes.add(mystat.st_ino)
+ size += mystat.st_size
+ if mystat.st_uid != portage_uid and mystat.st_gid != portage_gid:
+ continue
+ myuid = -1
+ mygid = -1
+ if mystat.st_uid == portage_uid:
+ myuid = inst_uid
+ if mystat.st_gid == portage_gid:
+ mygid = inst_gid
+ apply_secpass_permissions(
+ _unicode_encode(fpath, encoding=_encodings["merge"]),
+ uid=myuid,
+ gid=mygid,
+ mode=mystat.st_mode,
+ stat_cached=mystat,
+ follow_links=False,
+ )
+
+ if unicode_error:
+ break
+
+ if not unicode_error:
+ break
+
+ if desktopfile_errors:
+ for l in _merge_desktopfile_error(desktopfile_errors):
+ l = l.replace(mysettings["ED"], "/")
+ eqawarn(l, phase="install", key=mysettings.mycpv, out=out)
+
+ if unicode_errors:
+ for l in _merge_unicode_error(unicode_errors):
+ eqawarn(l, phase="install", key=mysettings.mycpv, out=out)
+
+ build_info_dir = os.path.join(mysettings["PORTAGE_BUILDDIR"], "build-info")
+
+ f = io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, "SIZE"),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="w",
+ encoding=_encodings["repo.content"],
+ errors="strict",
+ )
+ f.write("%d\n" % size)
+ f.close()
+
+ _reapply_bsdflags_to_image(mysettings)
+
def _reapply_bsdflags_to_image(mysettings):
- """
- Reapply flags saved and removed by _preinst_bsdflags.
- """
- if bsd_chflags:
- os.system("mtree -e -p %s -U -k flags < %s > /dev/null" % \
- (_shell_quote(mysettings["D"]),
- _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree"))))
+ """
+ Reapply flags saved and removed by _preinst_bsdflags.
+ """
+ if bsd_chflags:
+ os.system(
+ "mtree -e -p %s -U -k flags < %s > /dev/null"
+ % (
+ _shell_quote(mysettings["D"]),
+ _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree")),
+ )
+ )
+
def _post_src_install_soname_symlinks(mysettings, out):
- """
- Check that libraries in $D have corresponding soname symlinks.
- If symlinks are missing then create them and trigger a QA Notice.
- This requires $PORTAGE_BUILDDIR/build-info/NEEDED.ELF.2 for
- operation.
- """
+ """
+ Check that libraries in $D have corresponding soname symlinks.
+ If symlinks are missing then create them and trigger a QA Notice.
+ This requires $PORTAGE_BUILDDIR/build-info/NEEDED.ELF.2 for
+ operation.
+ """
- image_dir = mysettings["D"]
+ image_dir = mysettings["D"]
+
- #only run this function when the installation is actually done and the final
++ #only run this function when the installation is actually done and the final
+ #image_dir exists (workaround for multilib-portage as this is first called
+ #before all ABIs are done and the image_dir is created)
+ if not os.path.isdir (image_dir):
+ return
+
- needed_filename = os.path.join(mysettings["PORTAGE_BUILDDIR"],
- "build-info", "NEEDED.ELF.2")
-
- f = None
- try:
- f = io.open(_unicode_encode(needed_filename,
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace')
- lines = f.readlines()
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
- return
- finally:
- if f is not None:
- f.close()
-
- metadata = {}
- for k in ("QA_PREBUILT", "QA_SONAME_NO_SYMLINK"):
- try:
- with io.open(_unicode_encode(os.path.join(
- mysettings["PORTAGE_BUILDDIR"],
- "build-info", k),
- encoding=_encodings['fs'], errors='strict'),
- mode='r', encoding=_encodings['repo.content'],
- errors='replace') as f:
- v = f.read()
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
- else:
- metadata[k] = v
-
- qa_prebuilt = metadata.get("QA_PREBUILT", "").strip()
- if qa_prebuilt:
- qa_prebuilt = re.compile("|".join(
- fnmatch.translate(x.lstrip(os.sep))
- for x in portage.util.shlex_split(qa_prebuilt)))
-
- qa_soname_no_symlink = metadata.get("QA_SONAME_NO_SYMLINK", "").split()
- if qa_soname_no_symlink:
- if len(qa_soname_no_symlink) > 1:
- qa_soname_no_symlink = "|".join("(%s)" % x for x in qa_soname_no_symlink)
- qa_soname_no_symlink = "^(%s)$" % qa_soname_no_symlink
- else:
- qa_soname_no_symlink = "^%s$" % qa_soname_no_symlink[0]
- qa_soname_no_symlink = re.compile(qa_soname_no_symlink)
-
- libpaths = set(portage.util.getlibpaths(
- mysettings["ROOT"], env=mysettings))
- libpath_inodes = set()
- for libpath in libpaths:
- libdir = os.path.join(mysettings["ROOT"], libpath.lstrip(os.sep))
- try:
- s = os.stat(libdir)
- except OSError:
- continue
- else:
- libpath_inodes.add((s.st_dev, s.st_ino))
-
- is_libdir_cache = {}
-
- def is_libdir(obj_parent):
- try:
- return is_libdir_cache[obj_parent]
- except KeyError:
- pass
-
- rval = False
- if obj_parent in libpaths:
- rval = True
- else:
- parent_path = os.path.join(mysettings["ROOT"],
- obj_parent.lstrip(os.sep))
- try:
- s = os.stat(parent_path)
- except OSError:
- pass
- else:
- if (s.st_dev, s.st_ino) in libpath_inodes:
- rval = True
-
- is_libdir_cache[obj_parent] = rval
- return rval
-
- build_info_dir = os.path.join(
- mysettings['PORTAGE_BUILDDIR'], 'build-info')
- try:
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- "PROVIDES_EXCLUDE"), encoding=_encodings['fs'],
- errors='strict'), mode='r', encoding=_encodings['repo.content'],
- errors='replace') as f:
- provides_exclude = f.read()
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
- provides_exclude = ""
-
- try:
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- "REQUIRES_EXCLUDE"), encoding=_encodings['fs'],
- errors='strict'), mode='r', encoding=_encodings['repo.content'],
- errors='replace') as f:
- requires_exclude = f.read()
- except IOError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
- requires_exclude = ""
-
- missing_symlinks = []
- unrecognized_elf_files = []
- soname_deps = SonameDepsProcessor(
- provides_exclude, requires_exclude)
-
- # Parse NEEDED.ELF.2 like LinkageMapELF.rebuild() does, and
- # rewrite it to include multilib categories.
- needed_file = portage.util.atomic_ofstream(needed_filename,
- encoding=_encodings["repo.content"], errors="strict")
-
- for l in lines:
- l = l.rstrip("\n")
- if not l:
- continue
- try:
- entry = NeededEntry.parse(needed_filename, l)
- except InvalidData as e:
- portage.util.writemsg_level("\n%s\n\n" % (e,),
- level=logging.ERROR, noiselevel=-1)
- continue
-
- filename = os.path.join(image_dir,
- entry.filename.lstrip(os.sep))
- with open(_unicode_encode(filename, encoding=_encodings['fs'],
- errors='strict'), 'rb') as f:
- elf_header = ELFHeader.read(f)
-
- # Compute the multilib category and write it back to the file.
- entry.multilib_category = compute_multilib_category(elf_header)
- needed_file.write(str(entry))
-
- if entry.multilib_category is None:
- if not qa_prebuilt or qa_prebuilt.match(
- entry.filename[len(mysettings["EPREFIX"]):].lstrip(
- os.sep)) is None:
- unrecognized_elf_files.append(entry)
- else:
- soname_deps.add(entry)
-
- obj = entry.filename
- soname = entry.soname
-
- if not soname:
- continue
- if not is_libdir(os.path.dirname(obj)):
- continue
- if qa_soname_no_symlink and qa_soname_no_symlink.match(obj.strip(os.sep)) is not None:
- continue
-
- obj_file_path = os.path.join(image_dir, obj.lstrip(os.sep))
- sym_file_path = os.path.join(os.path.dirname(obj_file_path), soname)
- try:
- os.lstat(sym_file_path)
- except OSError as e:
- if e.errno not in (errno.ENOENT, errno.ESTALE):
- raise
- else:
- continue
-
- missing_symlinks.append((obj, soname))
-
- needed_file.close()
-
- if soname_deps.requires is not None:
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- 'REQUIRES'), encoding=_encodings['fs'], errors='strict'),
- mode='w', encoding=_encodings['repo.content'],
- errors='strict') as f:
- f.write(soname_deps.requires)
-
- if soname_deps.provides is not None:
- with io.open(_unicode_encode(os.path.join(build_info_dir,
- 'PROVIDES'), encoding=_encodings['fs'], errors='strict'),
- mode='w', encoding=_encodings['repo.content'],
- errors='strict') as f:
- f.write(soname_deps.provides)
-
- if unrecognized_elf_files:
- qa_msg = ["QA Notice: Unrecognized ELF file(s):"]
- qa_msg.append("")
- qa_msg.extend("\t%s" % str(entry).rstrip()
- for entry in unrecognized_elf_files)
- qa_msg.append("")
- for line in qa_msg:
- eqawarn(line, key=mysettings.mycpv, out=out)
-
- if not missing_symlinks:
- return
+ needed_filename = os.path.join(
+ mysettings["PORTAGE_BUILDDIR"], "build-info", "NEEDED.ELF.2"
+ )
+
+ f = None
+ try:
+ f = io.open(
+ _unicode_encode(
+ needed_filename, encoding=_encodings["fs"], errors="strict"
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ )
+ lines = f.readlines()
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+ return
+ finally:
+ if f is not None:
+ f.close()
+
+ metadata = {}
+ for k in ("QA_PREBUILT", "QA_SONAME_NO_SYMLINK"):
+ try:
+ with io.open(
+ _unicode_encode(
+ os.path.join(mysettings["PORTAGE_BUILDDIR"], "build-info", k),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ ) as f:
+ v = f.read()
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+ else:
+ metadata[k] = v
+
+ qa_prebuilt = metadata.get("QA_PREBUILT", "").strip()
+ if qa_prebuilt:
+ qa_prebuilt = re.compile(
+ "|".join(
+ fnmatch.translate(x.lstrip(os.sep))
+ for x in portage.util.shlex_split(qa_prebuilt)
+ )
+ )
+
+ qa_soname_no_symlink = metadata.get("QA_SONAME_NO_SYMLINK", "").split()
+ if qa_soname_no_symlink:
+ if len(qa_soname_no_symlink) > 1:
+ qa_soname_no_symlink = "|".join("(%s)" % x for x in qa_soname_no_symlink)
+ qa_soname_no_symlink = "^(%s)$" % qa_soname_no_symlink
+ else:
+ qa_soname_no_symlink = "^%s$" % qa_soname_no_symlink[0]
+ qa_soname_no_symlink = re.compile(qa_soname_no_symlink)
+
+ libpaths = set(portage.util.getlibpaths(mysettings["ROOT"], env=mysettings))
+ libpath_inodes = set()
+ for libpath in libpaths:
+ libdir = os.path.join(mysettings["ROOT"], libpath.lstrip(os.sep))
+ try:
+ s = os.stat(libdir)
+ except OSError:
+ continue
+ else:
+ libpath_inodes.add((s.st_dev, s.st_ino))
+
+ is_libdir_cache = {}
+
+ def is_libdir(obj_parent):
+ try:
+ return is_libdir_cache[obj_parent]
+ except KeyError:
+ pass
+
+ rval = False
+ if obj_parent in libpaths:
+ rval = True
+ else:
+ parent_path = os.path.join(mysettings["ROOT"], obj_parent.lstrip(os.sep))
+ try:
+ s = os.stat(parent_path)
+ except OSError:
+ pass
+ else:
+ if (s.st_dev, s.st_ino) in libpath_inodes:
+ rval = True
+
+ is_libdir_cache[obj_parent] = rval
+ return rval
+
+ build_info_dir = os.path.join(mysettings["PORTAGE_BUILDDIR"], "build-info")
+ try:
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, "PROVIDES_EXCLUDE"),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ ) as f:
+ provides_exclude = f.read()
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+ provides_exclude = ""
+
+ try:
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, "REQUIRES_EXCLUDE"),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="r",
+ encoding=_encodings["repo.content"],
+ errors="replace",
+ ) as f:
+ requires_exclude = f.read()
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+ requires_exclude = ""
+
+ missing_symlinks = []
+ unrecognized_elf_files = []
+ soname_deps = SonameDepsProcessor(provides_exclude, requires_exclude)
+
+ # Parse NEEDED.ELF.2 like LinkageMapELF.rebuild() does, and
+ # rewrite it to include multilib categories.
+ needed_file = portage.util.atomic_ofstream(
+ needed_filename, encoding=_encodings["repo.content"], errors="strict"
+ )
+
+ for l in lines:
+ l = l.rstrip("\n")
+ if not l:
+ continue
+ try:
+ entry = NeededEntry.parse(needed_filename, l)
+ except InvalidData as e:
+ portage.util.writemsg_level(
+ "\n%s\n\n" % (e,), level=logging.ERROR, noiselevel=-1
+ )
+ continue
+
+ filename = os.path.join(image_dir, entry.filename.lstrip(os.sep))
+ with open(
+ _unicode_encode(filename, encoding=_encodings["fs"], errors="strict"), "rb"
+ ) as f:
+ elf_header = ELFHeader.read(f)
+
+ # Compute the multilib category and write it back to the file.
+ entry.multilib_category = compute_multilib_category(elf_header)
+ needed_file.write(str(entry))
+
+ if entry.multilib_category is None:
+ if (
+ not qa_prebuilt
+ or qa_prebuilt.match(
+ entry.filename[len(mysettings["EPREFIX"]) :].lstrip(os.sep)
+ )
+ is None
+ ):
+ unrecognized_elf_files.append(entry)
+ else:
+ soname_deps.add(entry)
+
+ obj = entry.filename
+ soname = entry.soname
+
+ if not soname:
+ continue
+ if not is_libdir(os.path.dirname(obj)):
+ continue
+ if (
+ qa_soname_no_symlink
+ and qa_soname_no_symlink.match(obj.strip(os.sep)) is not None
+ ):
+ continue
+
+ obj_file_path = os.path.join(image_dir, obj.lstrip(os.sep))
+ sym_file_path = os.path.join(os.path.dirname(obj_file_path), soname)
+ try:
+ os.lstat(sym_file_path)
+ except OSError as e:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
+ raise
+ else:
+ continue
+
+ missing_symlinks.append((obj, soname))
+
+ needed_file.close()
+
+ if soname_deps.requires is not None:
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, "REQUIRES"),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="w",
+ encoding=_encodings["repo.content"],
+ errors="strict",
+ ) as f:
+ f.write(soname_deps.requires)
+
+ if soname_deps.provides is not None:
+ with io.open(
+ _unicode_encode(
+ os.path.join(build_info_dir, "PROVIDES"),
+ encoding=_encodings["fs"],
+ errors="strict",
+ ),
+ mode="w",
+ encoding=_encodings["repo.content"],
+ errors="strict",
+ ) as f:
+ f.write(soname_deps.provides)
+
+ if unrecognized_elf_files:
+ qa_msg = ["QA Notice: Unrecognized ELF file(s):"]
+ qa_msg.append("")
+ qa_msg.extend("\t%s" % str(entry).rstrip() for entry in unrecognized_elf_files)
+ qa_msg.append("")
+ for line in qa_msg:
+ eqawarn(line, key=mysettings.mycpv, out=out)
+
+ if not missing_symlinks:
+ return
+
+ qa_msg = ["QA Notice: Missing soname symlink(s):"]
+ qa_msg.append("")
+ qa_msg.extend(
+ "\t%s -> %s"
+ % (
+ os.path.join(os.path.dirname(obj).lstrip(os.sep), soname),
+ os.path.basename(obj),
+ )
+ for obj, soname in missing_symlinks
+ )
+ qa_msg.append("")
+ for line in qa_msg:
+ eqawarn(line, key=mysettings.mycpv, out=out)
- qa_msg = ["QA Notice: Missing soname symlink(s):"]
- qa_msg.append("")
- qa_msg.extend("\t%s -> %s" % (os.path.join(
- os.path.dirname(obj).lstrip(os.sep), soname),
- os.path.basename(obj))
- for obj, soname in missing_symlinks)
- qa_msg.append("")
- for line in qa_msg:
- eqawarn(line, key=mysettings.mycpv, out=out)
def _merge_desktopfile_error(errors):
- lines = []
+ lines = []
+
+ msg = _(
+ "QA Notice: This package installs one or more .desktop files "
+ "that do not pass validation."
+ )
+ lines.extend(wrap(msg, 72))
- msg = _("QA Notice: This package installs one or more .desktop files "
- "that do not pass validation.")
- lines.extend(wrap(msg, 72))
+ lines.append("")
+ errors.sort()
+ lines.extend("\t" + x for x in errors)
+ lines.append("")
- lines.append("")
- errors.sort()
- lines.extend("\t" + x for x in errors)
- lines.append("")
+ return lines
- return lines
def _merge_unicode_error(errors):
- lines = []
+ lines = []
- msg = _("QA Notice: This package installs one or more file names "
- "containing characters that are not encoded with the UTF-8 encoding.")
- lines.extend(wrap(msg, 72))
+ msg = _(
+ "QA Notice: This package installs one or more file names "
+ "containing characters that are not encoded with the UTF-8 encoding."
+ )
+ lines.extend(wrap(msg, 72))
- lines.append("")
- errors.sort()
- lines.extend("\t" + x for x in errors)
- lines.append("")
+ lines.append("")
+ errors.sort()
+ lines.extend("\t" + x for x in errors)
+ lines.append("")
+
+ return lines
- return lines
def _prepare_self_update(settings):
- """
- Call this when portage is updating itself, in order to create
- temporary copies of PORTAGE_BIN_PATH and PORTAGE_PYM_PATH, since
- the new versions may be incompatible. An atexit hook will
- automatically clean up the temporary copies.
- """
-
- # sanity check: ensure that that this routine only runs once
- if portage._bin_path != portage.const.PORTAGE_BIN_PATH:
- return
+ """
+ Call this when portage is updating itself, in order to create
+ temporary copies of PORTAGE_BIN_PATH and PORTAGE_PYM_PATH, since
+ the new versions may be incompatible. An atexit hook will
+ automatically clean up the temporary copies.
+ """
+
+ # sanity check: ensure that that this routine only runs once
+ if portage._bin_path != portage.const.PORTAGE_BIN_PATH:
+ return
+
+ # Load lazily referenced portage submodules into memory,
+ # so imports won't fail during portage upgrade/downgrade.
+ _preload_elog_modules(settings)
+ portage.proxy.lazyimport._preload_portage_submodules()
+
+ # Make the temp directory inside $PORTAGE_TMPDIR/portage, since
+ # it's common for /tmp and /var/tmp to be mounted with the
+ # "noexec" option (see bug #346899).
+ build_prefix = os.path.join(settings["PORTAGE_TMPDIR"], "portage")
+ portage.util.ensure_dirs(build_prefix)
+ base_path_tmp = tempfile.mkdtemp("", "._portage_reinstall_.", build_prefix)
+ portage.process.atexit_register(shutil.rmtree, base_path_tmp)
+
+ orig_bin_path = portage._bin_path
+ portage._bin_path = os.path.join(base_path_tmp, "bin")
+ shutil.copytree(orig_bin_path, portage._bin_path, symlinks=True)
+
+ orig_pym_path = portage._pym_path
+ portage._pym_path = os.path.join(base_path_tmp, "lib")
+ os.mkdir(portage._pym_path)
+ for pmod in PORTAGE_PYM_PACKAGES:
+ shutil.copytree(
+ os.path.join(orig_pym_path, pmod),
+ os.path.join(portage._pym_path, pmod),
+ symlinks=True,
+ )
+
+ for dir_path in (base_path_tmp, portage._bin_path, portage._pym_path):
+ os.chmod(dir_path, 0o755)
- # Load lazily referenced portage submodules into memory,
- # so imports won't fail during portage upgrade/downgrade.
- _preload_elog_modules(settings)
- portage.proxy.lazyimport._preload_portage_submodules()
-
- # Make the temp directory inside $PORTAGE_TMPDIR/portage, since
- # it's common for /tmp and /var/tmp to be mounted with the
- # "noexec" option (see bug #346899).
- build_prefix = os.path.join(settings["PORTAGE_TMPDIR"], "portage")
- portage.util.ensure_dirs(build_prefix)
- base_path_tmp = tempfile.mkdtemp(
- "", "._portage_reinstall_.", build_prefix)
- portage.process.atexit_register(shutil.rmtree, base_path_tmp)
-
- orig_bin_path = portage._bin_path
- portage._bin_path = os.path.join(base_path_tmp, "bin")
- shutil.copytree(orig_bin_path, portage._bin_path, symlinks=True)
-
- orig_pym_path = portage._pym_path
- portage._pym_path = os.path.join(base_path_tmp, "lib")
- os.mkdir(portage._pym_path)
- for pmod in PORTAGE_PYM_PACKAGES:
- shutil.copytree(os.path.join(orig_pym_path, pmod),
- os.path.join(portage._pym_path, pmod),
- symlinks=True)
-
- for dir_path in (base_path_tmp, portage._bin_path, portage._pym_path):
- os.chmod(dir_path, 0o755)
def _handle_self_update(settings, vardb):
- cpv = settings.mycpv
- if settings["ROOT"] == "/" and \
- portage.dep.match_from_list(
- portage.const.PORTAGE_PACKAGE_ATOM, [cpv]):
- _prepare_self_update(settings)
- return True
- return False
+ cpv = settings.mycpv
+ if settings["ROOT"] == "/" and portage.dep.match_from_list(
+ portage.const.PORTAGE_PACKAGE_ATOM, [cpv]
+ ):
+ _prepare_self_update(settings)
+ return True
+ return False
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 11:26 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 11:26 UTC (permalink / raw
To: gentoo-commits
commit: b6385d6a20d226f3269841b576b7c8815a7ab2a1
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 11:24:59 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 11:25:53 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=b6385d6a
Merge tag 'portage-3.0.25' into multilib
portage-3.0.25
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 4 ++++
RELEASE-NOTES | 7 +++++++
bin/isolated-functions.sh | 1 +
lib/portage/package/ebuild/prepare_build_dirs.py | 13 ++++++++++---
setup.py | 2 +-
5 files changed, 23 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 11:27 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 11:27 UTC (permalink / raw
To: gentoo-commits
commit: 8ac6d6ca167c003150fa2aea3835042144574f6e
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 11:27:20 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 11:27:26 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=8ac6d6ca
Merge tag 'portage-3.0.26' into multilib
portage-3.0.26
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 6 +++++-
RELEASE-NOTES | 2 +-
lib/portage/package/ebuild/prepare_build_dirs.py | 3 +--
setup.py | 2 +-
4 files changed, 8 insertions(+), 5 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 11:33 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 11:33 UTC (permalink / raw
To: gentoo-commits
commit: a7abb6f0d89a89e5225038909410c2781802adbb
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 11:33:10 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 11:33:14 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a7abb6f0
Merge tag 'portage-3.0.27' into multilib
portage-3.0.27
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
NEWS | 6 +++
RELEASE-NOTES | 4 ++
bin/install-qa-check.d/10ignored-flags | 4 +-
bin/isolated-functions.sh | 50 +++++++++++--------
bin/save-ebuild-env.sh | 18 ++++---
lib/_emerge/resolver/output.py | 2 +-
lib/_emerge/resolver/output_helpers.py | 2 +
lib/portage/elog/messages.py | 10 ++--
lib/portage/elog/mod_echo.py | 4 +-
lib/portage/output.py | 63 ++++++++++++++++++++----
lib/portage/package/ebuild/prepare_build_dirs.py | 10 +++-
setup.py | 2 +-
12 files changed, 125 insertions(+), 50 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 11:34 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 11:34 UTC (permalink / raw
To: gentoo-commits
commit: e2085b63a9063d3a548347ec37f0a8448e6d35e7
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 11:33:54 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 11:33:58 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e2085b63
Merge tag 'portage-3.0.28' into multilib
portage-3.0.28
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
RELEASE-NOTES | 4 +++
bin/phase-functions.sh | 2 +-
lib/portage/package/ebuild/prepare_build_dirs.py | 35 ++++++++----------------
setup.py | 2 +-
4 files changed, 17 insertions(+), 26 deletions(-)
diff --cc bin/phase-functions.sh
index 4b8adb82c,d3221993d..f549832e4
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -319,9 -294,9 +319,9 @@@ __dyn_clean()
"$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
"$PORTAGE_BUILDDIR"/.exit_status
- rm -rf "${PORTAGE_BUILDDIR}/build-info"
+ rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
rm -rf "${WORKDIR}"
- rm -rf "${PORTAGE_BUILDDIR}/files"
+ rm -f "${PORTAGE_BUILDDIR}/files"
fi
if [ -f "${PORTAGE_BUILDDIR}/.unpacked" ]; then
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 11:43 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 11:43 UTC (permalink / raw
To: gentoo-commits
commit: c492a43e90013713e05ba3e0ede1de30dc9a48e2
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 11:42:33 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 11:42:55 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c492a43e
Merge tag 'portage-3.0.29' into multilib
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
.github/workflows/ci.yml | 2 +-
.gitignorerevs | 2 +
NEWS | 10 +++
RELEASE-NOTES | 5 ++
bin/ebuild-ipc.py | 6 +-
bin/ebuild.sh | 39 ---------
bin/estrip | 99 +++++++++++++---------
bin/isolated-functions.sh | 39 +++++++++
bin/phase-functions.sh | 4 +-
bin/phase-helpers.sh | 14 ++-
cnf/make.conf.example.riscv.diff | 61 +++++++++++++
cnf/make.globals | 2 +-
lib/_emerge/AbstractEbuildProcess.py | 4 +-
lib/_emerge/Binpkg.py | 15 +++-
lib/_emerge/EbuildBuild.py | 19 ++++-
lib/_emerge/EbuildIpcDaemon.py | 2 +-
lib/_emerge/actions.py | 33 +++++---
lib/_emerge/create_depgraph_params.py | 2 +-
lib/_emerge/depgraph.py | 27 +++---
lib/_emerge/main.py | 10 +++
lib/portage/const.py | 1 +
lib/portage/dbapi/bintree.py | 9 +-
lib/portage/dep/dep_check.py | 6 +-
lib/portage/output.py | 6 +-
lib/portage/package/ebuild/doebuild.py | 17 +++-
lib/portage/package/ebuild/fetch.py | 7 +-
lib/portage/package/ebuild/prepare_build_dirs.py | 9 ++
lib/portage/process.py | 2 -
lib/portage/tests/ebuild/test_doebuild_spawn.py | 1 +
lib/portage/tests/ebuild/test_ipc_daemon.py | 6 +-
.../tests/resolver/test_unecessary_slot_upgrade.py | 62 ++++++++++++++
lib/portage/util/_dyn_libs/dyn_libs.py | 28 ++++++
lib/portage/util/_xattr.py | 1 -
lib/portage/util/futures/unix_events.py | 1 -
man/color.map.5 | 6 +-
man/emerge.1 | 12 ++-
man/make.conf.5 | 7 +-
setup.py | 10 ++-
38 files changed, 434 insertions(+), 152 deletions(-)
diff --cc bin/phase-functions.sh
index f549832e4,5eb031805..32cf85b33
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -312,14 -288,13 +312,14 @@@ __dyn_clean()
fi
if [[ $EMERGE_FROM = binary ]] || ! has keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended,setuped,unpacked,prepared} \
- "$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged,instprepped} \
+ rm -f "$PORTAGE_BUILDDIR"/.{ebuild_changed,logid,pretended*,setuped*,unpacked*,prepared*} \
+ "$PORTAGE_BUILDDIR"/.{configured*,compiled*,tested*,packaged*,instprepped} \
+ "$PORTAGE_BUILDDIR"/.abi \
"$PORTAGE_BUILDDIR"/.die_hooks \
- "$PORTAGE_BUILDDIR"/.ipc_{in,out,lock} \
"$PORTAGE_BUILDDIR"/.exit_status
- rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code}
- rm -rf "${PORTAGE_BUILDDIR}/build-info" \
++ rm -rf "${PORTAGE_BUILDDIR}"/{build-info,abi-code} \
+ "${PORTAGE_BUILDDIR}/.ipc"
rm -rf "${WORKDIR}"
rm -f "${PORTAGE_BUILDDIR}/files"
fi
^ permalink raw reply [flat|nested] 192+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: /
@ 2022-03-21 11:57 Thomas Sachau
0 siblings, 0 replies; 192+ messages in thread
From: Thomas Sachau @ 2022-03-21 11:57 UTC (permalink / raw
To: gentoo-commits
commit: a5893dcca4aae2fdcccbcb6578bf48c203f5e1d9
Author: Thomas Sachau <tommy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 21 11:52:31 2022 +0000
Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 21 11:52:41 2022 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a5893dcc
Merge tag 'portage-3.0.30' into multilib
portage-3.0.30
Signed-off-by: Thomas Sachau <tommy <AT> gentoo.org>
DEVELOPING | 19 ++++++++++++-------
NEWS | 5 +++++
lib/portage/package/ebuild/doebuild.py | 12 +++++-------
setup.py | 2 +-
src/portage_util_file_copy_reflink_linux.c | 7 ++++---
5 files changed, 27 insertions(+), 18 deletions(-)
^ permalink raw reply [flat|nested] 192+ messages in thread
end of thread, other threads:[~2022-03-21 11:57 UTC | newest]
Thread overview: 192+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-24 14:16 [gentoo-commits] proj/portage:multilib commit in: / Thomas Sachau
-- strict thread matches above, loose matches on Subject: below --
2022-03-21 11:57 Thomas Sachau
2022-03-21 11:43 Thomas Sachau
2022-03-21 11:34 Thomas Sachau
2022-03-21 11:33 Thomas Sachau
2022-03-21 11:27 Thomas Sachau
2022-03-21 11:26 Thomas Sachau
2022-03-21 10:01 Thomas Sachau
2021-10-30 9:44 Thomas Sachau
2021-10-30 9:44 Thomas Sachau
2021-07-25 11:43 Thomas Sachau
2021-07-25 11:43 Thomas Sachau
2021-07-25 11:43 Thomas Sachau
2021-04-03 8:28 Thomas Sachau
2021-04-03 8:28 Thomas Sachau
2021-04-03 8:28 Thomas Sachau
2021-04-03 8:28 Thomas Sachau
2021-01-23 9:52 Thomas Sachau
2021-01-15 16:20 Thomas Sachau
2021-01-15 16:20 Thomas Sachau
2021-01-15 16:20 Thomas Sachau
2021-01-15 16:20 Thomas Sachau
2021-01-15 16:20 Thomas Sachau
2020-10-30 10:29 Thomas Sachau
2020-08-23 12:22 Thomas Sachau
2020-07-05 17:57 Thomas Sachau
2019-12-26 11:56 Thomas Sachau
2019-03-17 11:35 Thomas Sachau
2019-03-09 9:56 Thomas Sachau
2018-09-01 11:03 Thomas Sachau
2018-05-23 12:23 Thomas Sachau
2018-04-14 12:16 Thomas Sachau
2018-03-03 15:18 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:43 Thomas Sachau
2018-01-07 10:38 Thomas Sachau
2018-01-07 10:33 Thomas Sachau
2018-01-07 10:33 Thomas Sachau
2018-01-07 10:33 Thomas Sachau
2018-01-07 10:33 Thomas Sachau
2018-01-07 10:33 Thomas Sachau
2018-01-07 10:30 Thomas Sachau
2018-01-07 10:09 Thomas Sachau
2018-01-07 9:50 Thomas Sachau
2018-01-07 9:39 Thomas Sachau
2016-02-28 12:37 Thomas Sachau
2016-02-28 12:37 Thomas Sachau
2016-02-28 12:37 Thomas Sachau
2016-02-28 12:37 Thomas Sachau
2016-02-28 12:37 Thomas Sachau
2016-02-28 12:37 Thomas Sachau
2015-10-04 11:38 Thomas Sachau
2015-10-04 11:38 Thomas Sachau
2015-10-04 11:38 Thomas Sachau
2015-10-04 11:38 Thomas Sachau
2015-10-04 11:38 Thomas Sachau
2015-05-05 11:29 Thomas Sachau
2014-12-12 20:23 Thomas Sachau
2014-12-12 20:23 Thomas Sachau
2014-12-12 20:23 Thomas Sachau
2014-12-12 20:23 Thomas Sachau
2014-12-12 20:23 Thomas Sachau
2014-06-02 20:00 Thomas Sachau
2013-09-15 20:54 Thomas Sachau
2013-09-15 11:39 Thomas Sachau
2013-09-15 11:06 Thomas Sachau
2013-09-10 16:53 Thomas Sachau
2013-08-25 19:50 Thomas Sachau
2013-08-18 20:55 Thomas Sachau
2013-08-04 11:19 Thomas Sachau
2013-08-04 11:19 Thomas Sachau
2013-05-31 12:16 Thomas Sachau
2013-05-20 10:41 Thomas Sachau
2013-05-10 8:01 Thomas Sachau
2013-04-14 13:20 Thomas Sachau
2013-04-03 11:51 Thomas Sachau
2013-03-28 19:31 Thomas Sachau
2013-03-23 16:24 Thomas Sachau
2013-03-08 17:46 Thomas Sachau
2013-03-03 13:44 Thomas Sachau
2013-02-16 18:47 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-26 17:19 Thomas Sachau
2013-01-12 11:21 Thomas Sachau
2012-12-16 10:49 Thomas Sachau
2012-12-14 20:16 Thomas Sachau
2012-12-14 20:14 Thomas Sachau
2012-12-09 10:54 Thomas Sachau
2012-12-07 22:24 Thomas Sachau
2012-11-30 16:44 Thomas Sachau
2012-10-29 12:23 Thomas Sachau
2012-10-22 8:57 Thomas Sachau
2012-10-14 9:35 Thomas Sachau
2012-10-06 11:34 Thomas Sachau
2012-09-29 12:51 Thomas Sachau
2012-09-24 20:38 Thomas Sachau
2012-09-22 15:33 Thomas Sachau
2012-09-22 15:23 Thomas Sachau
2012-09-17 17:07 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-09-08 12:55 Thomas Sachau
2012-07-08 10:03 Thomas Sachau
2012-07-01 12:01 Thomas Sachau
2012-06-10 12:42 Thomas Sachau
2012-06-03 12:33 Thomas Sachau
2012-05-28 10:19 Thomas Sachau
2012-05-17 10:00 Thomas Sachau
2012-05-12 7:57 Thomas Sachau
2012-05-11 20:38 Thomas Sachau
2012-04-24 21:26 Thomas Sachau
2012-04-06 11:50 Thomas Sachau
2012-04-04 12:42 Thomas Sachau
2012-04-01 22:00 Thomas Sachau
2012-03-30 18:55 Thomas Sachau
2012-03-24 10:51 Thomas Sachau
2012-03-23 14:42 Thomas Sachau
2012-03-21 18:50 Thomas Sachau
2012-03-18 15:29 Thomas Sachau
2012-03-06 18:21 Thomas Sachau
2012-02-26 16:27 Thomas Sachau
2012-02-25 12:04 Thomas Sachau
2012-02-23 19:08 Thomas Sachau
2012-02-18 15:52 Thomas Sachau
2012-02-06 19:38 Thomas Sachau
2011-12-28 13:33 Thomas Sachau
2011-12-16 16:30 Thomas Sachau
2011-12-07 21:31 Thomas Sachau
2011-11-26 14:03 Thomas Sachau
2011-11-19 14:25 Thomas Sachau
2011-11-18 23:27 Thomas Sachau
2011-11-11 22:52 Thomas Sachau
2011-10-31 19:53 Thomas Sachau
2011-10-24 18:54 Thomas Sachau
2011-10-23 11:05 Thomas Sachau
2011-10-23 11:05 Thomas Sachau
2011-10-21 13:57 Thomas Sachau
2011-10-12 16:28 Thomas Sachau
2011-10-09 10:33 Thomas Sachau
2011-10-08 8:34 Thomas Sachau
2011-10-07 12:41 Thomas Sachau
2011-10-01 13:56 Thomas Sachau
2011-10-01 13:56 Thomas Sachau
2011-09-11 14:33 Thomas Sachau
2011-09-09 13:03 Thomas Sachau
2011-08-16 12:20 Thomas Sachau
2011-08-05 12:29 Thomas Sachau
2011-08-01 16:53 Thomas Sachau
2011-07-28 17:07 Thomas Sachau
2011-07-21 19:18 Thomas Sachau
2011-07-15 13:24 Thomas Sachau
2011-07-05 17:34 Thomas Sachau
2011-06-16 16:54 Thomas Sachau
2011-06-07 15:44 Thomas Sachau
2011-05-28 13:14 Thomas Sachau
2011-05-26 17:55 Thomas Sachau
2011-05-22 9:42 Thomas Sachau
2011-05-14 9:59 Thomas Sachau
2011-05-07 18:38 Thomas Sachau
2011-04-16 10:17 Thomas Sachau
2011-04-16 10:17 Thomas Sachau
2011-03-28 17:24 Thomas Sachau
2011-03-19 19:39 Thomas Sachau
2011-03-17 17:58 Thomas Sachau
2011-03-03 19:53 Thomas Sachau
2011-02-25 13:45 Thomas Sachau
2011-02-16 20:15 Thomas Sachau
2011-02-10 18:12 Thomas Sachau
2011-02-08 18:12 Thomas Sachau
2011-02-06 13:10 Thomas Sachau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox