aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2018-08-04 08:55:46 +0200
committerFabian Groffen <grobian@gentoo.org>2018-08-04 08:55:46 +0200
commit7930d48e80624f600fd96effbf1f509e12964678 (patch)
tree498ccd5c5c7d8e7b83c98a5101c91bfe6b335c00
parentstacked-prefix: flag as Prefix modification (diff)
parentScheduler: cancel job delay timeout after main loop (bug 662668) (diff)
downloadportage-7930d48e.tar.gz
portage-7930d48e.tar.bz2
portage-7930d48e.zip
Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml28
-rw-r--r--NEWS10
-rw-r--r--RELEASE-NOTES50
-rw-r--r--TEST-NOTES6
-rwxr-xr-xbin/archive-conf2
-rwxr-xr-xbin/binhost-snapshot2
-rwxr-xr-xbin/clean_locks2
-rwxr-xr-xbin/dispatch-conf2
-rwxr-xr-xbin/ebuild2
-rwxr-xr-xbin/ebuild-ipc.py2
-rwxr-xr-xbin/egencache2
-rwxr-xr-xbin/emaint2
-rwxr-xr-xbin/emerge2
-rwxr-xr-xbin/emerge-webrsync23
-rwxr-xr-xbin/env-update2
-rwxr-xr-xbin/etc-update2
-rwxr-xr-xbin/fixpackages2
-rwxr-xr-xbin/glsa-check2
-rw-r--r--bin/install-qa-check.d/10executable-issues4
-rw-r--r--bin/install-qa-check.d/10ignored-flags6
-rw-r--r--bin/install-qa-check.d/60pngfix14
-rwxr-xr-xbin/misc-functions.sh2
-rwxr-xr-xbin/portageq8
-rwxr-xr-xbin/quickpkg2
-rwxr-xr-xbin/regenworld2
-rw-r--r--cnf/make.globals2
-rw-r--r--lib/Makefile.in (renamed from pym/Makefile.in)0
-rw-r--r--lib/_emerge/AbstractDepPriority.py (renamed from pym/_emerge/AbstractDepPriority.py)0
-rw-r--r--lib/_emerge/AbstractEbuildProcess.py (renamed from pym/_emerge/AbstractEbuildProcess.py)0
-rw-r--r--lib/_emerge/AbstractPollTask.py (renamed from pym/_emerge/AbstractPollTask.py)0
-rw-r--r--lib/_emerge/AsynchronousLock.py (renamed from pym/_emerge/AsynchronousLock.py)0
-rw-r--r--lib/_emerge/AsynchronousTask.py (renamed from pym/_emerge/AsynchronousTask.py)0
-rw-r--r--lib/_emerge/AtomArg.py (renamed from pym/_emerge/AtomArg.py)0
-rw-r--r--lib/_emerge/Binpkg.py (renamed from pym/_emerge/Binpkg.py)0
-rw-r--r--lib/_emerge/BinpkgEnvExtractor.py (renamed from pym/_emerge/BinpkgEnvExtractor.py)0
-rw-r--r--lib/_emerge/BinpkgExtractorAsync.py (renamed from pym/_emerge/BinpkgExtractorAsync.py)0
-rw-r--r--lib/_emerge/BinpkgFetcher.py (renamed from pym/_emerge/BinpkgFetcher.py)0
-rw-r--r--lib/_emerge/BinpkgPrefetcher.py (renamed from pym/_emerge/BinpkgPrefetcher.py)0
-rw-r--r--lib/_emerge/BinpkgVerifier.py (renamed from pym/_emerge/BinpkgVerifier.py)0
-rw-r--r--lib/_emerge/Blocker.py (renamed from pym/_emerge/Blocker.py)0
-rw-r--r--lib/_emerge/BlockerCache.py (renamed from pym/_emerge/BlockerCache.py)0
-rw-r--r--lib/_emerge/BlockerDB.py (renamed from pym/_emerge/BlockerDB.py)0
-rw-r--r--lib/_emerge/BlockerDepPriority.py (renamed from pym/_emerge/BlockerDepPriority.py)0
-rw-r--r--lib/_emerge/CompositeTask.py (renamed from pym/_emerge/CompositeTask.py)0
-rw-r--r--lib/_emerge/DepPriority.py (renamed from pym/_emerge/DepPriority.py)0
-rw-r--r--lib/_emerge/DepPriorityNormalRange.py (renamed from pym/_emerge/DepPriorityNormalRange.py)0
-rw-r--r--lib/_emerge/DepPrioritySatisfiedRange.py (renamed from pym/_emerge/DepPrioritySatisfiedRange.py)0
-rw-r--r--lib/_emerge/Dependency.py (renamed from pym/_emerge/Dependency.py)0
-rw-r--r--lib/_emerge/DependencyArg.py (renamed from pym/_emerge/DependencyArg.py)0
-rw-r--r--lib/_emerge/EbuildBinpkg.py (renamed from pym/_emerge/EbuildBinpkg.py)0
-rw-r--r--lib/_emerge/EbuildBuild.py (renamed from pym/_emerge/EbuildBuild.py)0
-rw-r--r--lib/_emerge/EbuildBuildDir.py (renamed from pym/_emerge/EbuildBuildDir.py)0
-rw-r--r--lib/_emerge/EbuildExecuter.py (renamed from pym/_emerge/EbuildExecuter.py)0
-rw-r--r--lib/_emerge/EbuildFetcher.py (renamed from pym/_emerge/EbuildFetcher.py)0
-rw-r--r--lib/_emerge/EbuildFetchonly.py (renamed from pym/_emerge/EbuildFetchonly.py)0
-rw-r--r--lib/_emerge/EbuildIpcDaemon.py (renamed from pym/_emerge/EbuildIpcDaemon.py)0
-rw-r--r--lib/_emerge/EbuildMerge.py (renamed from pym/_emerge/EbuildMerge.py)0
-rw-r--r--lib/_emerge/EbuildMetadataPhase.py (renamed from pym/_emerge/EbuildMetadataPhase.py)0
-rw-r--r--lib/_emerge/EbuildPhase.py (renamed from pym/_emerge/EbuildPhase.py)0
-rw-r--r--lib/_emerge/EbuildProcess.py (renamed from pym/_emerge/EbuildProcess.py)0
-rw-r--r--lib/_emerge/EbuildSpawnProcess.py (renamed from pym/_emerge/EbuildSpawnProcess.py)0
-rw-r--r--lib/_emerge/FakeVartree.py (renamed from pym/_emerge/FakeVartree.py)0
-rw-r--r--lib/_emerge/FifoIpcDaemon.py (renamed from pym/_emerge/FifoIpcDaemon.py)0
-rw-r--r--lib/_emerge/JobStatusDisplay.py (renamed from pym/_emerge/JobStatusDisplay.py)0
-rw-r--r--lib/_emerge/MergeListItem.py (renamed from pym/_emerge/MergeListItem.py)0
-rw-r--r--lib/_emerge/MetadataRegen.py (renamed from pym/_emerge/MetadataRegen.py)0
-rw-r--r--lib/_emerge/MiscFunctionsProcess.py (renamed from pym/_emerge/MiscFunctionsProcess.py)0
-rw-r--r--lib/_emerge/Package.py (renamed from pym/_emerge/Package.py)5
-rw-r--r--lib/_emerge/PackageArg.py (renamed from pym/_emerge/PackageArg.py)0
-rw-r--r--lib/_emerge/PackageMerge.py (renamed from pym/_emerge/PackageMerge.py)0
-rw-r--r--lib/_emerge/PackagePhase.py (renamed from pym/_emerge/PackagePhase.py)0
-rw-r--r--lib/_emerge/PackageUninstall.py (renamed from pym/_emerge/PackageUninstall.py)0
-rw-r--r--lib/_emerge/PackageVirtualDbapi.py (renamed from pym/_emerge/PackageVirtualDbapi.py)0
-rw-r--r--lib/_emerge/PipeReader.py (renamed from pym/_emerge/PipeReader.py)0
-rw-r--r--lib/_emerge/PollScheduler.py (renamed from pym/_emerge/PollScheduler.py)0
-rw-r--r--lib/_emerge/ProgressHandler.py (renamed from pym/_emerge/ProgressHandler.py)0
-rw-r--r--lib/_emerge/RootConfig.py (renamed from pym/_emerge/RootConfig.py)0
-rw-r--r--lib/_emerge/Scheduler.py (renamed from pym/_emerge/Scheduler.py)3
-rw-r--r--lib/_emerge/SequentialTaskQueue.py (renamed from pym/_emerge/SequentialTaskQueue.py)0
-rw-r--r--lib/_emerge/SetArg.py (renamed from pym/_emerge/SetArg.py)0
-rw-r--r--lib/_emerge/SpawnProcess.py (renamed from pym/_emerge/SpawnProcess.py)0
-rw-r--r--lib/_emerge/SubProcess.py (renamed from pym/_emerge/SubProcess.py)0
-rw-r--r--lib/_emerge/Task.py (renamed from pym/_emerge/Task.py)0
-rw-r--r--lib/_emerge/TaskSequence.py (renamed from pym/_emerge/TaskSequence.py)0
-rw-r--r--lib/_emerge/UninstallFailure.py (renamed from pym/_emerge/UninstallFailure.py)0
-rw-r--r--lib/_emerge/UnmergeDepPriority.py (renamed from pym/_emerge/UnmergeDepPriority.py)0
-rw-r--r--lib/_emerge/UseFlagDisplay.py (renamed from pym/_emerge/UseFlagDisplay.py)0
-rw-r--r--lib/_emerge/UserQuery.py (renamed from pym/_emerge/UserQuery.py)0
-rw-r--r--lib/_emerge/__init__.py (renamed from pym/_emerge/__init__.py)0
-rw-r--r--lib/_emerge/_find_deep_system_runtime_deps.py (renamed from pym/_emerge/_find_deep_system_runtime_deps.py)0
-rw-r--r--lib/_emerge/_flush_elog_mod_echo.py (renamed from pym/_emerge/_flush_elog_mod_echo.py)0
-rw-r--r--lib/_emerge/actions.py (renamed from pym/_emerge/actions.py)0
-rw-r--r--lib/_emerge/chk_updated_cfg_files.py (renamed from pym/_emerge/chk_updated_cfg_files.py)0
-rw-r--r--lib/_emerge/clear_caches.py (renamed from pym/_emerge/clear_caches.py)0
-rw-r--r--lib/_emerge/countdown.py (renamed from pym/_emerge/countdown.py)0
-rw-r--r--lib/_emerge/create_depgraph_params.py (renamed from pym/_emerge/create_depgraph_params.py)0
-rw-r--r--lib/_emerge/create_world_atom.py (renamed from pym/_emerge/create_world_atom.py)0
-rw-r--r--lib/_emerge/depgraph.py (renamed from pym/_emerge/depgraph.py)14
-rw-r--r--lib/_emerge/emergelog.py (renamed from pym/_emerge/emergelog.py)0
-rw-r--r--lib/_emerge/getloadavg.py (renamed from pym/_emerge/getloadavg.py)0
-rw-r--r--lib/_emerge/help.py (renamed from pym/_emerge/help.py)0
-rw-r--r--lib/_emerge/is_valid_package_atom.py (renamed from pym/_emerge/is_valid_package_atom.py)0
-rw-r--r--lib/_emerge/main.py (renamed from pym/_emerge/main.py)0
-rw-r--r--lib/_emerge/post_emerge.py (renamed from pym/_emerge/post_emerge.py)0
-rw-r--r--lib/_emerge/resolver/DbapiProvidesIndex.py (renamed from pym/_emerge/resolver/DbapiProvidesIndex.py)0
-rw-r--r--lib/_emerge/resolver/__init__.py (renamed from pym/_emerge/resolver/__init__.py)0
-rw-r--r--lib/_emerge/resolver/backtracking.py (renamed from pym/_emerge/resolver/backtracking.py)0
-rw-r--r--lib/_emerge/resolver/circular_dependency.py (renamed from pym/_emerge/resolver/circular_dependency.py)0
-rw-r--r--lib/_emerge/resolver/output.py (renamed from pym/_emerge/resolver/output.py)0
-rw-r--r--lib/_emerge/resolver/output_helpers.py (renamed from pym/_emerge/resolver/output_helpers.py)0
-rw-r--r--lib/_emerge/resolver/package_tracker.py (renamed from pym/_emerge/resolver/package_tracker.py)0
-rw-r--r--lib/_emerge/resolver/slot_collision.py (renamed from pym/_emerge/resolver/slot_collision.py)0
-rw-r--r--lib/_emerge/search.py (renamed from pym/_emerge/search.py)0
-rw-r--r--lib/_emerge/show_invalid_depstring_notice.py (renamed from pym/_emerge/show_invalid_depstring_notice.py)0
-rw-r--r--lib/_emerge/stdout_spinner.py (renamed from pym/_emerge/stdout_spinner.py)0
-rw-r--r--lib/_emerge/unmerge.py (renamed from pym/_emerge/unmerge.py)0
-rw-r--r--lib/portage/__init__.py (renamed from pym/portage/__init__.py)0
-rw-r--r--lib/portage/_emirrordist/Config.py (renamed from pym/portage/_emirrordist/Config.py)0
-rw-r--r--lib/portage/_emirrordist/DeletionIterator.py (renamed from pym/portage/_emirrordist/DeletionIterator.py)0
-rw-r--r--lib/portage/_emirrordist/DeletionTask.py (renamed from pym/portage/_emirrordist/DeletionTask.py)0
-rw-r--r--lib/portage/_emirrordist/FetchIterator.py (renamed from pym/portage/_emirrordist/FetchIterator.py)0
-rw-r--r--lib/portage/_emirrordist/FetchTask.py (renamed from pym/portage/_emirrordist/FetchTask.py)0
-rw-r--r--lib/portage/_emirrordist/MirrorDistTask.py (renamed from pym/portage/_emirrordist/MirrorDistTask.py)0
-rw-r--r--lib/portage/_emirrordist/__init__.py (renamed from pym/portage/_emirrordist/__init__.py)0
-rw-r--r--lib/portage/_emirrordist/main.py (renamed from pym/portage/_emirrordist/main.py)0
-rw-r--r--lib/portage/_global_updates.py (renamed from pym/portage/_global_updates.py)0
-rw-r--r--lib/portage/_legacy_globals.py (renamed from pym/portage/_legacy_globals.py)0
-rw-r--r--lib/portage/_selinux.py (renamed from pym/portage/_selinux.py)0
-rw-r--r--lib/portage/_sets/ProfilePackageSet.py (renamed from pym/portage/_sets/ProfilePackageSet.py)0
-rw-r--r--lib/portage/_sets/__init__.py (renamed from pym/portage/_sets/__init__.py)0
-rw-r--r--lib/portage/_sets/base.py (renamed from pym/portage/_sets/base.py)0
-rw-r--r--lib/portage/_sets/dbapi.py (renamed from pym/portage/_sets/dbapi.py)0
-rw-r--r--lib/portage/_sets/files.py (renamed from pym/portage/_sets/files.py)0
-rw-r--r--lib/portage/_sets/libs.py (renamed from pym/portage/_sets/libs.py)0
-rw-r--r--lib/portage/_sets/profiles.py (renamed from pym/portage/_sets/profiles.py)0
-rw-r--r--lib/portage/_sets/security.py (renamed from pym/portage/_sets/security.py)0
-rw-r--r--lib/portage/_sets/shell.py (renamed from pym/portage/_sets/shell.py)0
-rw-r--r--lib/portage/cache/__init__.py (renamed from pym/portage/cache/__init__.py)0
-rw-r--r--lib/portage/cache/anydbm.py (renamed from pym/portage/cache/anydbm.py)0
-rw-r--r--lib/portage/cache/cache_errors.py (renamed from pym/portage/cache/cache_errors.py)0
-rw-r--r--lib/portage/cache/ebuild_xattr.py (renamed from pym/portage/cache/ebuild_xattr.py)0
-rw-r--r--lib/portage/cache/flat_hash.py (renamed from pym/portage/cache/flat_hash.py)0
-rw-r--r--lib/portage/cache/fs_template.py (renamed from pym/portage/cache/fs_template.py)0
-rw-r--r--lib/portage/cache/index/IndexStreamIterator.py (renamed from pym/portage/cache/index/IndexStreamIterator.py)0
-rw-r--r--lib/portage/cache/index/__init__.py (renamed from pym/portage/cache/index/__init__.py)0
-rw-r--r--lib/portage/cache/index/pkg_desc_index.py (renamed from pym/portage/cache/index/pkg_desc_index.py)0
-rw-r--r--lib/portage/cache/mappings.py (renamed from pym/portage/cache/mappings.py)0
-rw-r--r--lib/portage/cache/metadata.py (renamed from pym/portage/cache/metadata.py)0
-rw-r--r--lib/portage/cache/sql_template.py (renamed from pym/portage/cache/sql_template.py)0
-rw-r--r--lib/portage/cache/sqlite.py (renamed from pym/portage/cache/sqlite.py)0
-rw-r--r--lib/portage/cache/template.py (renamed from pym/portage/cache/template.py)0
-rw-r--r--lib/portage/cache/volatile.py (renamed from pym/portage/cache/volatile.py)0
-rw-r--r--lib/portage/checksum.py (renamed from pym/portage/checksum.py)0
-rw-r--r--lib/portage/const.py (renamed from pym/portage/const.py)0
-rw-r--r--lib/portage/const_autotool.py (renamed from pym/portage/const_autotool.py)0
-rw-r--r--lib/portage/cvstree.py (renamed from pym/portage/cvstree.py)0
-rw-r--r--lib/portage/data.py (renamed from pym/portage/data.py)0
-rw-r--r--lib/portage/dbapi/DummyTree.py (renamed from pym/portage/dbapi/DummyTree.py)0
-rw-r--r--lib/portage/dbapi/IndexedPortdb.py (renamed from pym/portage/dbapi/IndexedPortdb.py)0
-rw-r--r--lib/portage/dbapi/IndexedVardb.py (renamed from pym/portage/dbapi/IndexedVardb.py)0
-rw-r--r--lib/portage/dbapi/_ContentsCaseSensitivityManager.py (renamed from pym/portage/dbapi/_ContentsCaseSensitivityManager.py)0
-rw-r--r--lib/portage/dbapi/_MergeProcess.py (renamed from pym/portage/dbapi/_MergeProcess.py)0
-rw-r--r--lib/portage/dbapi/_SyncfsProcess.py (renamed from pym/portage/dbapi/_SyncfsProcess.py)0
-rw-r--r--lib/portage/dbapi/_VdbMetadataDelta.py (renamed from pym/portage/dbapi/_VdbMetadataDelta.py)0
-rw-r--r--lib/portage/dbapi/__init__.py (renamed from pym/portage/dbapi/__init__.py)12
-rw-r--r--lib/portage/dbapi/_expand_new_virt.py (renamed from pym/portage/dbapi/_expand_new_virt.py)0
-rw-r--r--lib/portage/dbapi/_similar_name_search.py (renamed from pym/portage/dbapi/_similar_name_search.py)0
-rw-r--r--lib/portage/dbapi/bintree.py (renamed from pym/portage/dbapi/bintree.py)4
-rw-r--r--lib/portage/dbapi/cpv_expand.py (renamed from pym/portage/dbapi/cpv_expand.py)0
-rw-r--r--lib/portage/dbapi/dep_expand.py (renamed from pym/portage/dbapi/dep_expand.py)0
-rw-r--r--lib/portage/dbapi/porttree.py (renamed from pym/portage/dbapi/porttree.py)81
-rw-r--r--lib/portage/dbapi/vartree.py (renamed from pym/portage/dbapi/vartree.py)25
-rw-r--r--lib/portage/dbapi/virtual.py (renamed from pym/portage/dbapi/virtual.py)0
-rw-r--r--lib/portage/debug.py (renamed from pym/portage/debug.py)2
-rw-r--r--lib/portage/dep/__init__.py (renamed from pym/portage/dep/__init__.py)0
-rw-r--r--lib/portage/dep/_dnf.py (renamed from pym/portage/dep/_dnf.py)0
-rw-r--r--lib/portage/dep/_slot_operator.py (renamed from pym/portage/dep/_slot_operator.py)0
-rw-r--r--lib/portage/dep/dep_check.py (renamed from pym/portage/dep/dep_check.py)0
-rw-r--r--lib/portage/dep/soname/SonameAtom.py (renamed from pym/portage/dep/soname/SonameAtom.py)0
-rw-r--r--lib/portage/dep/soname/__init__.py (renamed from pym/portage/dep/soname/__init__.py)0
-rw-r--r--lib/portage/dep/soname/multilib_category.py (renamed from pym/portage/dep/soname/multilib_category.py)0
-rw-r--r--lib/portage/dep/soname/parse.py (renamed from pym/portage/dep/soname/parse.py)0
-rw-r--r--lib/portage/dispatch_conf.py (renamed from pym/portage/dispatch_conf.py)0
-rw-r--r--lib/portage/eapi.py (renamed from pym/portage/eapi.py)2
-rw-r--r--lib/portage/eclass_cache.py (renamed from pym/portage/eclass_cache.py)0
-rw-r--r--lib/portage/elog/__init__.py (renamed from pym/portage/elog/__init__.py)0
-rw-r--r--lib/portage/elog/filtering.py (renamed from pym/portage/elog/filtering.py)0
-rw-r--r--lib/portage/elog/messages.py (renamed from pym/portage/elog/messages.py)0
-rw-r--r--lib/portage/elog/mod_custom.py (renamed from pym/portage/elog/mod_custom.py)0
-rw-r--r--lib/portage/elog/mod_echo.py (renamed from pym/portage/elog/mod_echo.py)0
-rw-r--r--lib/portage/elog/mod_mail.py (renamed from pym/portage/elog/mod_mail.py)0
-rw-r--r--lib/portage/elog/mod_mail_summary.py (renamed from pym/portage/elog/mod_mail_summary.py)0
-rw-r--r--lib/portage/elog/mod_save.py (renamed from pym/portage/elog/mod_save.py)0
-rw-r--r--lib/portage/elog/mod_save_summary.py (renamed from pym/portage/elog/mod_save_summary.py)0
-rw-r--r--lib/portage/elog/mod_syslog.py (renamed from pym/portage/elog/mod_syslog.py)0
-rw-r--r--lib/portage/emaint/__init__.py (renamed from pym/portage/emaint/__init__.py)0
-rw-r--r--lib/portage/emaint/defaults.py (renamed from pym/portage/emaint/defaults.py)0
-rw-r--r--lib/portage/emaint/main.py (renamed from pym/portage/emaint/main.py)0
-rw-r--r--lib/portage/emaint/modules/__init__.py (renamed from pym/portage/emaint/modules/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/binhost/__init__.py (renamed from pym/portage/emaint/modules/binhost/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/binhost/binhost.py (renamed from pym/portage/emaint/modules/binhost/binhost.py)0
-rw-r--r--lib/portage/emaint/modules/config/__init__.py (renamed from pym/portage/emaint/modules/config/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/config/config.py (renamed from pym/portage/emaint/modules/config/config.py)0
-rw-r--r--lib/portage/emaint/modules/logs/__init__.py (renamed from pym/portage/emaint/modules/logs/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/logs/logs.py (renamed from pym/portage/emaint/modules/logs/logs.py)0
-rw-r--r--lib/portage/emaint/modules/merges/__init__.py (renamed from pym/portage/emaint/modules/merges/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/merges/merges.py (renamed from pym/portage/emaint/modules/merges/merges.py)0
-rw-r--r--lib/portage/emaint/modules/move/__init__.py (renamed from pym/portage/emaint/modules/move/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/move/move.py (renamed from pym/portage/emaint/modules/move/move.py)0
-rw-r--r--lib/portage/emaint/modules/resume/__init__.py (renamed from pym/portage/emaint/modules/resume/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/resume/resume.py (renamed from pym/portage/emaint/modules/resume/resume.py)0
-rw-r--r--lib/portage/emaint/modules/sync/__init__.py (renamed from pym/portage/emaint/modules/sync/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/sync/sync.py (renamed from pym/portage/emaint/modules/sync/sync.py)0
-rw-r--r--lib/portage/emaint/modules/world/__init__.py (renamed from pym/portage/emaint/modules/world/__init__.py)0
-rw-r--r--lib/portage/emaint/modules/world/world.py (renamed from pym/portage/emaint/modules/world/world.py)0
-rw-r--r--lib/portage/env/__init__.py (renamed from pym/portage/env/__init__.py)0
-rw-r--r--lib/portage/env/config.py (renamed from pym/portage/env/config.py)0
-rw-r--r--lib/portage/env/loaders.py (renamed from pym/portage/env/loaders.py)0
-rw-r--r--lib/portage/env/validators.py (renamed from pym/portage/env/validators.py)0
-rw-r--r--lib/portage/exception.py (renamed from pym/portage/exception.py)0
-rw-r--r--lib/portage/getbinpkg.py (renamed from pym/portage/getbinpkg.py)0
-rw-r--r--lib/portage/glsa.py (renamed from pym/portage/glsa.py)0
-rw-r--r--lib/portage/localization.py (renamed from pym/portage/localization.py)0
-rw-r--r--lib/portage/locks.py (renamed from pym/portage/locks.py)0
-rw-r--r--lib/portage/mail.py (renamed from pym/portage/mail.py)0
-rw-r--r--lib/portage/manifest.py (renamed from pym/portage/manifest.py)0
-rw-r--r--lib/portage/metadata.py (renamed from pym/portage/metadata.py)0
-rw-r--r--lib/portage/module.py (renamed from pym/portage/module.py)0
-rw-r--r--lib/portage/news.py (renamed from pym/portage/news.py)0
-rw-r--r--lib/portage/output.py (renamed from pym/portage/output.py)0
-rw-r--r--lib/portage/package/__init__.py (renamed from pym/portage/package/__init__.py)0
-rw-r--r--lib/portage/package/ebuild/__init__.py (renamed from pym/portage/package/ebuild/__init__.py)0
-rw-r--r--lib/portage/package/ebuild/_config/KeywordsManager.py (renamed from pym/portage/package/ebuild/_config/KeywordsManager.py)0
-rw-r--r--lib/portage/package/ebuild/_config/LicenseManager.py (renamed from pym/portage/package/ebuild/_config/LicenseManager.py)0
-rw-r--r--lib/portage/package/ebuild/_config/LocationsManager.py (renamed from pym/portage/package/ebuild/_config/LocationsManager.py)0
-rw-r--r--lib/portage/package/ebuild/_config/MaskManager.py (renamed from pym/portage/package/ebuild/_config/MaskManager.py)0
-rw-r--r--lib/portage/package/ebuild/_config/UseManager.py (renamed from pym/portage/package/ebuild/_config/UseManager.py)0
-rw-r--r--lib/portage/package/ebuild/_config/VirtualsManager.py (renamed from pym/portage/package/ebuild/_config/VirtualsManager.py)0
-rw-r--r--lib/portage/package/ebuild/_config/__init__.py (renamed from pym/portage/package/ebuild/_config/__init__.py)0
-rw-r--r--lib/portage/package/ebuild/_config/env_var_validation.py (renamed from pym/portage/package/ebuild/_config/env_var_validation.py)0
-rw-r--r--lib/portage/package/ebuild/_config/features_set.py (renamed from pym/portage/package/ebuild/_config/features_set.py)0
-rw-r--r--lib/portage/package/ebuild/_config/helper.py (renamed from pym/portage/package/ebuild/_config/helper.py)0
-rw-r--r--lib/portage/package/ebuild/_config/special_env_vars.py (renamed from pym/portage/package/ebuild/_config/special_env_vars.py)0
-rw-r--r--lib/portage/package/ebuild/_config/unpack_dependencies.py (renamed from pym/portage/package/ebuild/_config/unpack_dependencies.py)0
-rw-r--r--lib/portage/package/ebuild/_ipc/ExitCommand.py (renamed from pym/portage/package/ebuild/_ipc/ExitCommand.py)0
-rw-r--r--lib/portage/package/ebuild/_ipc/IpcCommand.py (renamed from pym/portage/package/ebuild/_ipc/IpcCommand.py)0
-rw-r--r--lib/portage/package/ebuild/_ipc/QueryCommand.py (renamed from pym/portage/package/ebuild/_ipc/QueryCommand.py)0
-rw-r--r--lib/portage/package/ebuild/_ipc/__init__.py (renamed from pym/portage/package/ebuild/_ipc/__init__.py)0
-rw-r--r--lib/portage/package/ebuild/_metadata_invalid.py (renamed from pym/portage/package/ebuild/_metadata_invalid.py)0
-rw-r--r--lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py (renamed from pym/portage/package/ebuild/_parallel_manifest/ManifestProcess.py)0
-rw-r--r--lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py (renamed from pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py)0
-rw-r--r--lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py (renamed from pym/portage/package/ebuild/_parallel_manifest/ManifestTask.py)0
-rw-r--r--lib/portage/package/ebuild/_parallel_manifest/__init__.py (renamed from pym/portage/package/ebuild/_parallel_manifest/__init__.py)0
-rw-r--r--lib/portage/package/ebuild/_spawn_nofetch.py (renamed from pym/portage/package/ebuild/_spawn_nofetch.py)0
-rw-r--r--lib/portage/package/ebuild/config.py (renamed from pym/portage/package/ebuild/config.py)65
-rw-r--r--lib/portage/package/ebuild/deprecated_profile_check.py (renamed from pym/portage/package/ebuild/deprecated_profile_check.py)0
-rw-r--r--lib/portage/package/ebuild/digestcheck.py (renamed from pym/portage/package/ebuild/digestcheck.py)0
-rw-r--r--lib/portage/package/ebuild/digestgen.py (renamed from pym/portage/package/ebuild/digestgen.py)0
-rw-r--r--lib/portage/package/ebuild/doebuild.py (renamed from pym/portage/package/ebuild/doebuild.py)2
-rw-r--r--lib/portage/package/ebuild/fetch.py (renamed from pym/portage/package/ebuild/fetch.py)0
-rw-r--r--lib/portage/package/ebuild/getmaskingreason.py (renamed from pym/portage/package/ebuild/getmaskingreason.py)0
-rw-r--r--lib/portage/package/ebuild/getmaskingstatus.py (renamed from pym/portage/package/ebuild/getmaskingstatus.py)0
-rw-r--r--lib/portage/package/ebuild/prepare_build_dirs.py (renamed from pym/portage/package/ebuild/prepare_build_dirs.py)0
-rw-r--r--lib/portage/package/ebuild/profile_iuse.py (renamed from pym/portage/package/ebuild/profile_iuse.py)0
-rw-r--r--lib/portage/process.py (renamed from pym/portage/process.py)0
-rw-r--r--lib/portage/progress.py (renamed from pym/portage/progress.py)0
-rw-r--r--lib/portage/proxy/__init__.py (renamed from pym/portage/proxy/__init__.py)0
-rw-r--r--lib/portage/proxy/lazyimport.py (renamed from pym/portage/proxy/lazyimport.py)0
-rw-r--r--lib/portage/proxy/objectproxy.py (renamed from pym/portage/proxy/objectproxy.py)0
-rw-r--r--lib/portage/repository/__init__.py (renamed from pym/portage/repository/__init__.py)0
-rw-r--r--lib/portage/repository/config.py (renamed from pym/portage/repository/config.py)16
-rw-r--r--lib/portage/sync/__init__.py (renamed from pym/portage/sync/__init__.py)0
-rw-r--r--lib/portage/sync/config_checks.py (renamed from pym/portage/sync/config_checks.py)0
-rw-r--r--lib/portage/sync/controller.py (renamed from pym/portage/sync/controller.py)0
-rw-r--r--lib/portage/sync/getaddrinfo_validate.py (renamed from pym/portage/sync/getaddrinfo_validate.py)0
-rw-r--r--lib/portage/sync/modules/__init__.py (renamed from pym/portage/sync/modules/__init__.py)0
-rw-r--r--lib/portage/sync/modules/cvs/__init__.py (renamed from pym/portage/sync/modules/cvs/__init__.py)0
-rw-r--r--lib/portage/sync/modules/cvs/cvs.py (renamed from pym/portage/sync/modules/cvs/cvs.py)0
-rw-r--r--lib/portage/sync/modules/git/__init__.py (renamed from pym/portage/sync/modules/git/__init__.py)0
-rw-r--r--lib/portage/sync/modules/git/git.py (renamed from pym/portage/sync/modules/git/git.py)72
-rw-r--r--lib/portage/sync/modules/rsync/__init__.py (renamed from pym/portage/sync/modules/rsync/__init__.py)0
-rw-r--r--lib/portage/sync/modules/rsync/rsync.py (renamed from pym/portage/sync/modules/rsync/rsync.py)120
-rw-r--r--lib/portage/sync/modules/svn/__init__.py (renamed from pym/portage/sync/modules/svn/__init__.py)0
-rw-r--r--lib/portage/sync/modules/svn/svn.py (renamed from pym/portage/sync/modules/svn/svn.py)0
-rw-r--r--lib/portage/sync/modules/webrsync/__init__.py (renamed from pym/portage/sync/modules/webrsync/__init__.py)6
-rw-r--r--lib/portage/sync/modules/webrsync/webrsync.py136
-rw-r--r--lib/portage/sync/old_tree_timestamp.py (renamed from pym/portage/sync/old_tree_timestamp.py)0
-rw-r--r--lib/portage/sync/syncbase.py (renamed from pym/portage/sync/syncbase.py)41
-rw-r--r--lib/portage/tests/__init__.py (renamed from pym/portage/tests/__init__.py)0
-rw-r--r--lib/portage/tests/bin/__init__.py (renamed from pym/portage/tests/bin/__init__.py)0
-rw-r--r--lib/portage/tests/bin/__test__.py (renamed from pym/portage/tests/bin/__test__.py)0
-rw-r--r--lib/portage/tests/bin/setup_env.py (renamed from pym/portage/tests/bin/setup_env.py)0
-rw-r--r--lib/portage/tests/bin/test_dobin.py (renamed from pym/portage/tests/bin/test_dobin.py)0
-rw-r--r--lib/portage/tests/bin/test_dodir.py (renamed from pym/portage/tests/bin/test_dodir.py)0
-rw-r--r--lib/portage/tests/bin/test_doins.py (renamed from pym/portage/tests/bin/test_doins.py)0
-rw-r--r--lib/portage/tests/bin/test_eapi7_ver_funcs.py (renamed from pym/portage/tests/bin/test_eapi7_ver_funcs.py)0
-rw-r--r--lib/portage/tests/bin/test_filter_bash_env.py (renamed from pym/portage/tests/bin/test_filter_bash_env.py)0
-rw-r--r--lib/portage/tests/dbapi/__init__.py (renamed from pym/portage/tests/dbapi/__init__.py)0
-rw-r--r--lib/portage/tests/dbapi/__test__.py (renamed from pym/portage/tests/dbapi/__test__.py)0
-rw-r--r--lib/portage/tests/dbapi/test_fakedbapi.py (renamed from pym/portage/tests/dbapi/test_fakedbapi.py)0
-rw-r--r--lib/portage/tests/dbapi/test_portdb_cache.py (renamed from pym/portage/tests/dbapi/test_portdb_cache.py)0
-rw-r--r--lib/portage/tests/dep/__init__.py (renamed from pym/portage/tests/dep/__init__.py)0
-rw-r--r--lib/portage/tests/dep/__test__.py (renamed from pym/portage/tests/dep/__test__.py)0
-rw-r--r--lib/portage/tests/dep/testAtom.py (renamed from pym/portage/tests/dep/testAtom.py)0
-rw-r--r--lib/portage/tests/dep/testCheckRequiredUse.py (renamed from pym/portage/tests/dep/testCheckRequiredUse.py)0
-rw-r--r--lib/portage/tests/dep/testExtendedAtomDict.py (renamed from pym/portage/tests/dep/testExtendedAtomDict.py)0
-rw-r--r--lib/portage/tests/dep/testExtractAffectingUSE.py (renamed from pym/portage/tests/dep/testExtractAffectingUSE.py)0
-rw-r--r--lib/portage/tests/dep/testStandalone.py (renamed from pym/portage/tests/dep/testStandalone.py)0
-rw-r--r--lib/portage/tests/dep/test_best_match_to_list.py (renamed from pym/portage/tests/dep/test_best_match_to_list.py)0
-rw-r--r--lib/portage/tests/dep/test_dep_getcpv.py (renamed from pym/portage/tests/dep/test_dep_getcpv.py)0
-rw-r--r--lib/portage/tests/dep/test_dep_getrepo.py (renamed from pym/portage/tests/dep/test_dep_getrepo.py)0
-rw-r--r--lib/portage/tests/dep/test_dep_getslot.py (renamed from pym/portage/tests/dep/test_dep_getslot.py)0
-rw-r--r--lib/portage/tests/dep/test_dep_getusedeps.py (renamed from pym/portage/tests/dep/test_dep_getusedeps.py)0
-rw-r--r--lib/portage/tests/dep/test_dnf_convert.py (renamed from pym/portage/tests/dep/test_dnf_convert.py)0
-rw-r--r--lib/portage/tests/dep/test_get_operator.py (renamed from pym/portage/tests/dep/test_get_operator.py)0
-rw-r--r--lib/portage/tests/dep/test_get_required_use_flags.py (renamed from pym/portage/tests/dep/test_get_required_use_flags.py)0
-rw-r--r--lib/portage/tests/dep/test_isjustname.py (renamed from pym/portage/tests/dep/test_isjustname.py)0
-rw-r--r--lib/portage/tests/dep/test_isvalidatom.py (renamed from pym/portage/tests/dep/test_isvalidatom.py)0
-rw-r--r--lib/portage/tests/dep/test_match_from_list.py (renamed from pym/portage/tests/dep/test_match_from_list.py)0
-rw-r--r--lib/portage/tests/dep/test_overlap_dnf.py (renamed from pym/portage/tests/dep/test_overlap_dnf.py)0
-rw-r--r--lib/portage/tests/dep/test_paren_reduce.py (renamed from pym/portage/tests/dep/test_paren_reduce.py)0
-rw-r--r--lib/portage/tests/dep/test_use_reduce.py (renamed from pym/portage/tests/dep/test_use_reduce.py)0
-rw-r--r--lib/portage/tests/ebuild/__init__.py (renamed from pym/portage/tests/ebuild/__init__.py)0
-rw-r--r--lib/portage/tests/ebuild/__test__.py (renamed from pym/portage/tests/ebuild/__test__.py)0
-rw-r--r--lib/portage/tests/ebuild/test_array_fromfile_eof.py (renamed from pym/portage/tests/ebuild/test_array_fromfile_eof.py)0
-rw-r--r--lib/portage/tests/ebuild/test_config.py (renamed from pym/portage/tests/ebuild/test_config.py)0
-rw-r--r--lib/portage/tests/ebuild/test_doebuild_fd_pipes.py (renamed from pym/portage/tests/ebuild/test_doebuild_fd_pipes.py)0
-rw-r--r--lib/portage/tests/ebuild/test_doebuild_spawn.py (renamed from pym/portage/tests/ebuild/test_doebuild_spawn.py)0
-rw-r--r--lib/portage/tests/ebuild/test_ipc_daemon.py (renamed from pym/portage/tests/ebuild/test_ipc_daemon.py)0
-rw-r--r--lib/portage/tests/ebuild/test_spawn.py (renamed from pym/portage/tests/ebuild/test_spawn.py)0
-rw-r--r--lib/portage/tests/ebuild/test_use_expand_incremental.py (renamed from pym/portage/tests/ebuild/test_use_expand_incremental.py)0
-rw-r--r--lib/portage/tests/emerge/__init__.py (renamed from pym/portage/tests/emerge/__init__.py)0
-rw-r--r--lib/portage/tests/emerge/__test__.py (renamed from pym/portage/tests/emerge/__test__.py)0
-rw-r--r--lib/portage/tests/emerge/test_config_protect.py (renamed from pym/portage/tests/emerge/test_config_protect.py)0
-rw-r--r--lib/portage/tests/emerge/test_emerge_blocker_file_collision.py (renamed from pym/portage/tests/emerge/test_emerge_blocker_file_collision.py)0
-rw-r--r--lib/portage/tests/emerge/test_emerge_slot_abi.py (renamed from pym/portage/tests/emerge/test_emerge_slot_abi.py)0
-rw-r--r--lib/portage/tests/emerge/test_global_updates.py (renamed from pym/portage/tests/emerge/test_global_updates.py)0
-rw-r--r--lib/portage/tests/emerge/test_simple.py (renamed from pym/portage/tests/emerge/test_simple.py)0
-rw-r--r--lib/portage/tests/env/__init__.py (renamed from pym/portage/tests/env/__init__.py)0
-rw-r--r--lib/portage/tests/env/__test__.py (renamed from pym/portage/tests/env/__test__.py)0
-rw-r--r--lib/portage/tests/env/config/__init__.py (renamed from pym/portage/tests/env/config/__init__.py)0
-rw-r--r--lib/portage/tests/env/config/__test__.py (renamed from pym/portage/tests/env/config/__test__.py)0
-rw-r--r--lib/portage/tests/env/config/test_PackageKeywordsFile.py (renamed from pym/portage/tests/env/config/test_PackageKeywordsFile.py)0
-rw-r--r--lib/portage/tests/env/config/test_PackageMaskFile.py (renamed from pym/portage/tests/env/config/test_PackageMaskFile.py)0
-rw-r--r--lib/portage/tests/env/config/test_PackageUseFile.py (renamed from pym/portage/tests/env/config/test_PackageUseFile.py)0
-rw-r--r--lib/portage/tests/env/config/test_PortageModulesFile.py (renamed from pym/portage/tests/env/config/test_PortageModulesFile.py)0
-rw-r--r--lib/portage/tests/glsa/__init__.py (renamed from pym/portage/tests/glsa/__init__.py)0
-rw-r--r--lib/portage/tests/glsa/__test__.py (renamed from pym/portage/tests/glsa/__test__.py)0
-rw-r--r--lib/portage/tests/glsa/test_security_set.py (renamed from pym/portage/tests/glsa/test_security_set.py)0
-rw-r--r--lib/portage/tests/lafilefixer/__init__.py (renamed from pym/portage/tests/lafilefixer/__init__.py)0
-rw-r--r--lib/portage/tests/lafilefixer/__test__.py (renamed from pym/portage/tests/lafilefixer/__test__.py)0
-rw-r--r--lib/portage/tests/lafilefixer/test_lafilefixer.py (renamed from pym/portage/tests/lafilefixer/test_lafilefixer.py)0
-rw-r--r--lib/portage/tests/lazyimport/__init__.py (renamed from pym/portage/tests/lazyimport/__init__.py)0
-rw-r--r--lib/portage/tests/lazyimport/__test__.py (renamed from pym/portage/tests/lazyimport/__test__.py)0
-rw-r--r--lib/portage/tests/lazyimport/test_lazy_import_portage_baseline.py (renamed from pym/portage/tests/lazyimport/test_lazy_import_portage_baseline.py)0
-rw-r--r--lib/portage/tests/lazyimport/test_preload_portage_submodules.py (renamed from pym/portage/tests/lazyimport/test_preload_portage_submodules.py)0
-rw-r--r--lib/portage/tests/lint/__init__.py (renamed from pym/portage/tests/lint/__init__.py)0
-rw-r--r--lib/portage/tests/lint/__test__.py (renamed from pym/portage/tests/lint/__test__.py)0
-rw-r--r--lib/portage/tests/lint/metadata.py (renamed from pym/portage/tests/lint/metadata.py)0
-rw-r--r--lib/portage/tests/lint/test_bash_syntax.py (renamed from pym/portage/tests/lint/test_bash_syntax.py)0
-rw-r--r--lib/portage/tests/lint/test_compile_modules.py (renamed from pym/portage/tests/lint/test_compile_modules.py)0
-rw-r--r--lib/portage/tests/lint/test_import_modules.py (renamed from pym/portage/tests/lint/test_import_modules.py)0
-rw-r--r--lib/portage/tests/locks/__init__.py (renamed from pym/portage/tests/locks/__init__.py)0
-rw-r--r--lib/portage/tests/locks/__test__.py (renamed from pym/portage/tests/locks/__test__.py)0
-rw-r--r--lib/portage/tests/locks/test_asynchronous_lock.py (renamed from pym/portage/tests/locks/test_asynchronous_lock.py)0
-rw-r--r--lib/portage/tests/locks/test_lock_nonblock.py (renamed from pym/portage/tests/locks/test_lock_nonblock.py)0
-rw-r--r--lib/portage/tests/news/__init__.py (renamed from pym/portage/tests/news/__init__.py)0
-rw-r--r--lib/portage/tests/news/__test__.py (renamed from pym/portage/tests/news/__test__.py)0
-rw-r--r--lib/portage/tests/news/test_NewsItem.py (renamed from pym/portage/tests/news/test_NewsItem.py)0
-rw-r--r--lib/portage/tests/process/__init__.py (renamed from pym/portage/tests/process/__init__.py)0
-rw-r--r--lib/portage/tests/process/__test__.py (renamed from pym/portage/tests/process/__test__.py)0
-rw-r--r--lib/portage/tests/process/test_PopenProcess.py (renamed from pym/portage/tests/process/test_PopenProcess.py)0
-rw-r--r--lib/portage/tests/process/test_PopenProcessBlockingIO.py (renamed from pym/portage/tests/process/test_PopenProcessBlockingIO.py)0
-rw-r--r--lib/portage/tests/process/test_poll.py (renamed from pym/portage/tests/process/test_poll.py)0
-rw-r--r--lib/portage/tests/resolver/ResolverPlayground.py (renamed from pym/portage/tests/resolver/ResolverPlayground.py)0
-rw-r--r--lib/portage/tests/resolver/__init__.py (renamed from pym/portage/tests/resolver/__init__.py)0
-rw-r--r--lib/portage/tests/resolver/__test__.py (renamed from pym/portage/tests/resolver/__test__.py)0
-rw-r--r--lib/portage/tests/resolver/binpkg_multi_instance/__init__.py (renamed from pym/portage/tests/resolver/binpkg_multi_instance/__init__.py)0
-rw-r--r--lib/portage/tests/resolver/binpkg_multi_instance/__test__.py (renamed from pym/portage/tests/resolver/binpkg_multi_instance/__test__.py)0
-rw-r--r--lib/portage/tests/resolver/binpkg_multi_instance/test_build_id_profile_format.py (renamed from pym/portage/tests/resolver/binpkg_multi_instance/test_build_id_profile_format.py)0
-rw-r--r--lib/portage/tests/resolver/binpkg_multi_instance/test_rebuilt_binaries.py (renamed from pym/portage/tests/resolver/binpkg_multi_instance/test_rebuilt_binaries.py)0
-rw-r--r--lib/portage/tests/resolver/soname/__init__.py (renamed from pym/portage/tests/resolver/soname/__init__.py)0
-rw-r--r--lib/portage/tests/resolver/soname/__test__.py (renamed from pym/portage/tests/resolver/soname/__test__.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_autounmask.py (renamed from pym/portage/tests/resolver/soname/test_autounmask.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_depclean.py (renamed from pym/portage/tests/resolver/soname/test_depclean.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_downgrade.py (renamed from pym/portage/tests/resolver/soname/test_downgrade.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_or_choices.py (renamed from pym/portage/tests/resolver/soname/test_or_choices.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_reinstall.py (renamed from pym/portage/tests/resolver/soname/test_reinstall.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_skip_update.py (renamed from pym/portage/tests/resolver/soname/test_skip_update.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_slot_conflict_reinstall.py (renamed from pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_slot_conflict_update.py (renamed from pym/portage/tests/resolver/soname/test_slot_conflict_update.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_soname_provided.py (renamed from pym/portage/tests/resolver/soname/test_soname_provided.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_unsatisfiable.py (renamed from pym/portage/tests/resolver/soname/test_unsatisfiable.py)0
-rw-r--r--lib/portage/tests/resolver/soname/test_unsatisfied.py (renamed from pym/portage/tests/resolver/soname/test_unsatisfied.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask.py (renamed from pym/portage/tests/resolver/test_autounmask.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask_binpkg_use.py (renamed from pym/portage/tests/resolver/test_autounmask_binpkg_use.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask_keep_keywords.py (renamed from pym/portage/tests/resolver/test_autounmask_keep_keywords.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask_multilib_use.py (renamed from pym/portage/tests/resolver/test_autounmask_multilib_use.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask_parent.py (renamed from pym/portage/tests/resolver/test_autounmask_parent.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask_use_backtrack.py (renamed from pym/portage/tests/resolver/test_autounmask_use_backtrack.py)0
-rw-r--r--lib/portage/tests/resolver/test_autounmask_use_breakage.py (renamed from pym/portage/tests/resolver/test_autounmask_use_breakage.py)0
-rw-r--r--lib/portage/tests/resolver/test_backtracking.py (renamed from pym/portage/tests/resolver/test_backtracking.py)0
-rw-r--r--lib/portage/tests/resolver/test_bdeps.py (renamed from pym/portage/tests/resolver/test_bdeps.py)0
-rw-r--r--lib/portage/tests/resolver/test_binary_pkg_ebuild_visibility.py (renamed from pym/portage/tests/resolver/test_binary_pkg_ebuild_visibility.py)0
-rw-r--r--lib/portage/tests/resolver/test_blocker.py (renamed from pym/portage/tests/resolver/test_blocker.py)0
-rw-r--r--lib/portage/tests/resolver/test_changed_deps.py (renamed from pym/portage/tests/resolver/test_changed_deps.py)0
-rw-r--r--lib/portage/tests/resolver/test_circular_choices.py (renamed from pym/portage/tests/resolver/test_circular_choices.py)0
-rw-r--r--lib/portage/tests/resolver/test_circular_dependencies.py (renamed from pym/portage/tests/resolver/test_circular_dependencies.py)0
-rw-r--r--lib/portage/tests/resolver/test_complete_graph.py (renamed from pym/portage/tests/resolver/test_complete_graph.py)0
-rw-r--r--lib/portage/tests/resolver/test_complete_if_new_subslot_without_revbump.py (renamed from pym/portage/tests/resolver/test_complete_if_new_subslot_without_revbump.py)0
-rw-r--r--lib/portage/tests/resolver/test_depclean.py (renamed from pym/portage/tests/resolver/test_depclean.py)0
-rw-r--r--lib/portage/tests/resolver/test_depclean_order.py (renamed from pym/portage/tests/resolver/test_depclean_order.py)0
-rw-r--r--lib/portage/tests/resolver/test_depclean_slot_unavailable.py (renamed from pym/portage/tests/resolver/test_depclean_slot_unavailable.py)0
-rw-r--r--lib/portage/tests/resolver/test_depth.py (renamed from pym/portage/tests/resolver/test_depth.py)0
-rw-r--r--lib/portage/tests/resolver/test_disjunctive_depend_order.py (renamed from pym/portage/tests/resolver/test_disjunctive_depend_order.py)0
-rw-r--r--lib/portage/tests/resolver/test_eapi.py (renamed from pym/portage/tests/resolver/test_eapi.py)0
-rw-r--r--lib/portage/tests/resolver/test_features_test_use.py88
-rw-r--r--lib/portage/tests/resolver/test_imagemagick_graphicsmagick.py (renamed from pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py)0
-rw-r--r--lib/portage/tests/resolver/test_keywords.py (renamed from pym/portage/tests/resolver/test_keywords.py)0
-rw-r--r--lib/portage/tests/resolver/test_merge_order.py (renamed from pym/portage/tests/resolver/test_merge_order.py)0
-rw-r--r--lib/portage/tests/resolver/test_missing_iuse_and_evaluated_atoms.py (renamed from pym/portage/tests/resolver/test_missing_iuse_and_evaluated_atoms.py)0
-rw-r--r--lib/portage/tests/resolver/test_multirepo.py (renamed from pym/portage/tests/resolver/test_multirepo.py)0
-rw-r--r--lib/portage/tests/resolver/test_multislot.py (renamed from pym/portage/tests/resolver/test_multislot.py)0
-rw-r--r--lib/portage/tests/resolver/test_old_dep_chain_display.py (renamed from pym/portage/tests/resolver/test_old_dep_chain_display.py)0
-rw-r--r--lib/portage/tests/resolver/test_onlydeps.py (renamed from pym/portage/tests/resolver/test_onlydeps.py)0
-rw-r--r--lib/portage/tests/resolver/test_onlydeps_circular.py (renamed from pym/portage/tests/resolver/test_onlydeps_circular.py)0
-rw-r--r--lib/portage/tests/resolver/test_onlydeps_minimal.py (renamed from pym/portage/tests/resolver/test_onlydeps_minimal.py)0
-rw-r--r--lib/portage/tests/resolver/test_or_choices.py (renamed from pym/portage/tests/resolver/test_or_choices.py)0
-rw-r--r--lib/portage/tests/resolver/test_or_downgrade_installed.py (renamed from pym/portage/tests/resolver/test_or_downgrade_installed.py)0
-rw-r--r--lib/portage/tests/resolver/test_or_upgrade_installed.py (renamed from pym/portage/tests/resolver/test_or_upgrade_installed.py)0
-rw-r--r--lib/portage/tests/resolver/test_output.py (renamed from pym/portage/tests/resolver/test_output.py)0
-rw-r--r--lib/portage/tests/resolver/test_package_tracker.py (renamed from pym/portage/tests/resolver/test_package_tracker.py)0
-rw-r--r--lib/portage/tests/resolver/test_profile_default_eapi.py (renamed from pym/portage/tests/resolver/test_profile_default_eapi.py)0
-rw-r--r--lib/portage/tests/resolver/test_profile_package_set.py (renamed from pym/portage/tests/resolver/test_profile_package_set.py)0
-rw-r--r--lib/portage/tests/resolver/test_rebuild.py (renamed from pym/portage/tests/resolver/test_rebuild.py)0
-rw-r--r--lib/portage/tests/resolver/test_regular_slot_change_without_revbump.py (renamed from pym/portage/tests/resolver/test_regular_slot_change_without_revbump.py)0
-rw-r--r--lib/portage/tests/resolver/test_required_use.py (renamed from pym/portage/tests/resolver/test_required_use.py)0
-rw-r--r--lib/portage/tests/resolver/test_runtime_cycle_merge_order.py (renamed from pym/portage/tests/resolver/test_runtime_cycle_merge_order.py)0
-rw-r--r--lib/portage/tests/resolver/test_simple.py (renamed from pym/portage/tests/resolver/test_simple.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_abi.py (renamed from pym/portage/tests/resolver/test_slot_abi.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_abi_downgrade.py (renamed from pym/portage/tests/resolver/test_slot_abi_downgrade.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_change_without_revbump.py (renamed from pym/portage/tests/resolver/test_slot_change_without_revbump.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_collisions.py (renamed from pym/portage/tests/resolver/test_slot_collisions.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_conflict_force_rebuild.py (renamed from pym/portage/tests/resolver/test_slot_conflict_force_rebuild.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_conflict_mask_update.py (renamed from pym/portage/tests/resolver/test_slot_conflict_mask_update.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_conflict_rebuild.py (renamed from pym/portage/tests/resolver/test_slot_conflict_rebuild.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py (renamed from pym/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_conflict_update.py (renamed from pym/portage/tests/resolver/test_slot_conflict_update.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_autounmask.py (renamed from pym/portage/tests/resolver/test_slot_operator_autounmask.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_complete_graph.py (renamed from pym/portage/tests/resolver/test_slot_operator_complete_graph.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_exclusive_slots.py (renamed from pym/portage/tests/resolver/test_slot_operator_exclusive_slots.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_rebuild.py (renamed from pym/portage/tests/resolver/test_slot_operator_rebuild.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_required_use.py (renamed from pym/portage/tests/resolver/test_slot_operator_required_use.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_reverse_deps.py (renamed from pym/portage/tests/resolver/test_slot_operator_reverse_deps.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py (renamed from pym/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_unsatisfied.py (renamed from pym/portage/tests/resolver/test_slot_operator_unsatisfied.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_unsolved.py (renamed from pym/portage/tests/resolver/test_slot_operator_unsolved.py)0
-rw-r--r--lib/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py (renamed from pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py)0
-rw-r--r--lib/portage/tests/resolver/test_solve_non_slot_operator_slot_conflicts.py (renamed from pym/portage/tests/resolver/test_solve_non_slot_operator_slot_conflicts.py)0
-rw-r--r--lib/portage/tests/resolver/test_targetroot.py (renamed from pym/portage/tests/resolver/test_targetroot.py)0
-rw-r--r--lib/portage/tests/resolver/test_unpack_dependencies.py (renamed from pym/portage/tests/resolver/test_unpack_dependencies.py)0
-rw-r--r--lib/portage/tests/resolver/test_use_aliases.py (renamed from pym/portage/tests/resolver/test_use_aliases.py)0
-rw-r--r--lib/portage/tests/resolver/test_use_dep_defaults.py (renamed from pym/portage/tests/resolver/test_use_dep_defaults.py)0
-rw-r--r--lib/portage/tests/resolver/test_useflags.py (renamed from pym/portage/tests/resolver/test_useflags.py)0
-rw-r--r--lib/portage/tests/resolver/test_virtual_minimize_children.py (renamed from pym/portage/tests/resolver/test_virtual_minimize_children.py)0
-rw-r--r--lib/portage/tests/resolver/test_virtual_slot.py (renamed from pym/portage/tests/resolver/test_virtual_slot.py)0
-rw-r--r--lib/portage/tests/resolver/test_with_test_deps.py (renamed from pym/portage/tests/resolver/test_with_test_deps.py)0
-rwxr-xr-xlib/portage/tests/runTests.py (renamed from pym/portage/tests/runTests.py)0
-rw-r--r--lib/portage/tests/sets/__init__.py (renamed from pym/portage/tests/sets/__init__.py)0
-rw-r--r--lib/portage/tests/sets/__test__.py (renamed from pym/portage/tests/sets/__test__.py)0
-rw-r--r--lib/portage/tests/sets/base/__init__.py (renamed from pym/portage/tests/sets/base/__init__.py)0
-rw-r--r--lib/portage/tests/sets/base/__test__.py (renamed from pym/portage/tests/sets/base/__test__.py)0
-rw-r--r--lib/portage/tests/sets/base/testInternalPackageSet.py (renamed from pym/portage/tests/sets/base/testInternalPackageSet.py)0
-rw-r--r--lib/portage/tests/sets/files/__init__.py (renamed from pym/portage/tests/sets/files/__init__.py)0
-rw-r--r--lib/portage/tests/sets/files/__test__.py (renamed from pym/portage/tests/sets/files/__test__.py)0
-rw-r--r--lib/portage/tests/sets/files/testConfigFileSet.py (renamed from pym/portage/tests/sets/files/testConfigFileSet.py)0
-rw-r--r--lib/portage/tests/sets/files/testStaticFileSet.py (renamed from pym/portage/tests/sets/files/testStaticFileSet.py)0
-rw-r--r--lib/portage/tests/sets/shell/__init__.py (renamed from pym/portage/tests/sets/shell/__init__.py)0
-rw-r--r--lib/portage/tests/sets/shell/__test__.py (renamed from pym/portage/tests/sets/shell/__test__.py)0
-rw-r--r--lib/portage/tests/sets/shell/testShell.py (renamed from pym/portage/tests/sets/shell/testShell.py)0
-rw-r--r--lib/portage/tests/sync/__init__.py (renamed from pym/portage/tests/sync/__init__.py)0
-rw-r--r--lib/portage/tests/sync/__test__.py (renamed from pym/portage/tests/sync/__test__.py)0
-rw-r--r--lib/portage/tests/sync/test_sync_local.py (renamed from pym/portage/tests/sync/test_sync_local.py)15
-rw-r--r--lib/portage/tests/unicode/__init__.py (renamed from pym/portage/tests/unicode/__init__.py)0
-rw-r--r--lib/portage/tests/unicode/__test__.py (renamed from pym/portage/tests/unicode/__test__.py)0
-rw-r--r--lib/portage/tests/unicode/test_string_format.py (renamed from pym/portage/tests/unicode/test_string_format.py)0
-rw-r--r--lib/portage/tests/update/__init__.py (renamed from pym/portage/tests/update/__init__.py)0
-rw-r--r--lib/portage/tests/update/__test__.py (renamed from pym/portage/tests/update/__test__.py)0
-rw-r--r--lib/portage/tests/update/test_move_ent.py (renamed from pym/portage/tests/update/test_move_ent.py)0
-rw-r--r--lib/portage/tests/update/test_move_slot_ent.py (renamed from pym/portage/tests/update/test_move_slot_ent.py)0
-rw-r--r--lib/portage/tests/update/test_update_dbentry.py (renamed from pym/portage/tests/update/test_update_dbentry.py)0
-rw-r--r--lib/portage/tests/util/__init__.py (renamed from pym/portage/tests/util/__init__.py)0
-rw-r--r--lib/portage/tests/util/__test__.py (renamed from pym/portage/tests/util/__test__.py)0
-rw-r--r--lib/portage/tests/util/dyn_libs/__init__.py (renamed from pym/portage/tests/util/dyn_libs/__init__.py)0
-rw-r--r--lib/portage/tests/util/dyn_libs/__test__.py (renamed from pym/portage/tests/util/dyn_libs/__test__.py)0
-rw-r--r--lib/portage/tests/util/dyn_libs/test_soname_deps.py (renamed from pym/portage/tests/util/dyn_libs/test_soname_deps.py)0
-rw-r--r--lib/portage/tests/util/eventloop/__init__.py (renamed from pym/portage/tests/util/eventloop/__init__.py)0
-rw-r--r--lib/portage/tests/util/eventloop/__test__.py (renamed from pym/portage/tests/util/eventloop/__test__.py)0
-rw-r--r--lib/portage/tests/util/eventloop/test_call_soon_fifo.py (renamed from pym/portage/tests/util/eventloop/test_call_soon_fifo.py)0
-rw-r--r--lib/portage/tests/util/file_copy/__init__.py (renamed from pym/portage/tests/util/file_copy/__init__.py)0
-rw-r--r--lib/portage/tests/util/file_copy/__test__.py (renamed from pym/portage/tests/util/file_copy/__test__.py)0
-rw-r--r--lib/portage/tests/util/file_copy/test_copyfile.py (renamed from pym/portage/tests/util/file_copy/test_copyfile.py)0
-rw-r--r--lib/portage/tests/util/futures/__init__.py (renamed from pym/portage/tests/util/futures/__init__.py)0
-rw-r--r--lib/portage/tests/util/futures/__test__.py (renamed from pym/portage/tests/util/futures/__test__.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/__init__.py (renamed from pym/portage/tests/util/futures/asyncio/__init__.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/__test__.py (renamed from pym/portage/tests/util/futures/asyncio/__test__.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_child_watcher.py (renamed from pym/portage/tests/util/futures/asyncio/test_child_watcher.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_event_loop_in_fork.py (renamed from pym/portage/tests/util/futures/asyncio/test_event_loop_in_fork.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_pipe_closed.py (renamed from pym/portage/tests/util/futures/asyncio/test_pipe_closed.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py (renamed from pym/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_run_until_complete.py (renamed from pym/portage/tests/util/futures/asyncio/test_run_until_complete.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py (renamed from pym/portage/tests/util/futures/asyncio/test_subprocess_exec.py)0
-rw-r--r--lib/portage/tests/util/futures/asyncio/test_wakeup_fd_sigchld.py (renamed from pym/portage/tests/util/futures/asyncio/test_wakeup_fd_sigchld.py)0
-rw-r--r--lib/portage/tests/util/futures/test_compat_coroutine.py159
-rw-r--r--lib/portage/tests/util/futures/test_done_callback.py (renamed from pym/portage/tests/util/futures/test_done_callback.py)0
-rw-r--r--lib/portage/tests/util/futures/test_iter_completed.py (renamed from pym/portage/tests/util/futures/test_iter_completed.py)0
-rw-r--r--lib/portage/tests/util/futures/test_retry.py (renamed from pym/portage/tests/util/futures/test_retry.py)0
-rw-r--r--lib/portage/tests/util/test_checksum.py (renamed from pym/portage/tests/util/test_checksum.py)0
-rw-r--r--lib/portage/tests/util/test_digraph.py (renamed from pym/portage/tests/util/test_digraph.py)0
-rw-r--r--lib/portage/tests/util/test_getconfig.py (renamed from pym/portage/tests/util/test_getconfig.py)0
-rw-r--r--lib/portage/tests/util/test_grabdict.py (renamed from pym/portage/tests/util/test_grabdict.py)0
-rw-r--r--lib/portage/tests/util/test_install_mask.py129
-rw-r--r--lib/portage/tests/util/test_normalizedPath.py (renamed from pym/portage/tests/util/test_normalizedPath.py)0
-rw-r--r--lib/portage/tests/util/test_stackDictList.py (renamed from pym/portage/tests/util/test_stackDictList.py)0
-rw-r--r--lib/portage/tests/util/test_stackDicts.py (renamed from pym/portage/tests/util/test_stackDicts.py)0
-rw-r--r--lib/portage/tests/util/test_stackLists.py (renamed from pym/portage/tests/util/test_stackLists.py)0
-rw-r--r--lib/portage/tests/util/test_uniqueArray.py (renamed from pym/portage/tests/util/test_uniqueArray.py)0
-rw-r--r--lib/portage/tests/util/test_varExpand.py (renamed from pym/portage/tests/util/test_varExpand.py)0
-rw-r--r--lib/portage/tests/util/test_whirlpool.py (renamed from pym/portage/tests/util/test_whirlpool.py)0
-rw-r--r--lib/portage/tests/util/test_xattr.py (renamed from pym/portage/tests/util/test_xattr.py)0
-rw-r--r--lib/portage/tests/versions/__init__.py (renamed from pym/portage/tests/versions/__init__.py)0
-rw-r--r--lib/portage/tests/versions/__test__.py (renamed from pym/portage/tests/versions/__test__.py)0
-rw-r--r--lib/portage/tests/versions/test_cpv_sort_key.py (renamed from pym/portage/tests/versions/test_cpv_sort_key.py)0
-rw-r--r--lib/portage/tests/versions/test_vercmp.py (renamed from pym/portage/tests/versions/test_vercmp.py)0
-rw-r--r--lib/portage/tests/xpak/__init__.py (renamed from pym/portage/tests/xpak/__init__.py)0
-rw-r--r--lib/portage/tests/xpak/__test__.py (renamed from pym/portage/tests/xpak/__test__.py)0
-rw-r--r--lib/portage/tests/xpak/test_decodeint.py (renamed from pym/portage/tests/xpak/test_decodeint.py)0
-rw-r--r--lib/portage/update.py (renamed from pym/portage/update.py)0
-rw-r--r--lib/portage/util/ExtractKernelVersion.py (renamed from pym/portage/util/ExtractKernelVersion.py)0
-rw-r--r--lib/portage/util/SlotObject.py (renamed from pym/portage/util/SlotObject.py)0
-rw-r--r--lib/portage/util/_ShelveUnicodeWrapper.py (renamed from pym/portage/util/_ShelveUnicodeWrapper.py)0
-rw-r--r--lib/portage/util/__init__.py (renamed from pym/portage/util/__init__.py)0
-rw-r--r--lib/portage/util/_async/AsyncFunction.py (renamed from pym/portage/util/_async/AsyncFunction.py)0
-rw-r--r--lib/portage/util/_async/AsyncScheduler.py (renamed from pym/portage/util/_async/AsyncScheduler.py)0
-rw-r--r--lib/portage/util/_async/AsyncTaskFuture.py (renamed from pym/portage/util/_async/AsyncTaskFuture.py)0
-rw-r--r--lib/portage/util/_async/FileCopier.py (renamed from pym/portage/util/_async/FileCopier.py)0
-rw-r--r--lib/portage/util/_async/FileDigester.py (renamed from pym/portage/util/_async/FileDigester.py)0
-rw-r--r--lib/portage/util/_async/ForkProcess.py (renamed from pym/portage/util/_async/ForkProcess.py)0
-rw-r--r--lib/portage/util/_async/PipeLogger.py (renamed from pym/portage/util/_async/PipeLogger.py)0
-rw-r--r--lib/portage/util/_async/PipeReaderBlockingIO.py (renamed from pym/portage/util/_async/PipeReaderBlockingIO.py)0
-rw-r--r--lib/portage/util/_async/PopenProcess.py (renamed from pym/portage/util/_async/PopenProcess.py)0
-rw-r--r--lib/portage/util/_async/SchedulerInterface.py (renamed from pym/portage/util/_async/SchedulerInterface.py)0
-rw-r--r--lib/portage/util/_async/TaskScheduler.py (renamed from pym/portage/util/_async/TaskScheduler.py)0
-rw-r--r--lib/portage/util/_async/__init__.py (renamed from pym/portage/util/_async/__init__.py)0
-rw-r--r--lib/portage/util/_async/run_main_scheduler.py (renamed from pym/portage/util/_async/run_main_scheduler.py)0
-rw-r--r--lib/portage/util/_ctypes.py (renamed from pym/portage/util/_ctypes.py)0
-rw-r--r--lib/portage/util/_desktop_entry.py (renamed from pym/portage/util/_desktop_entry.py)0
-rw-r--r--lib/portage/util/_dyn_libs/LinkageMapELF.py (renamed from pym/portage/util/_dyn_libs/LinkageMapELF.py)0
-rw-r--r--lib/portage/util/_dyn_libs/LinkageMapMachO.py (renamed from pym/portage/util/_dyn_libs/LinkageMapMachO.py)0
-rw-r--r--lib/portage/util/_dyn_libs/LinkageMapPeCoff.py (renamed from pym/portage/util/_dyn_libs/LinkageMapPeCoff.py)0
-rw-r--r--lib/portage/util/_dyn_libs/LinkageMapXCoff.py (renamed from pym/portage/util/_dyn_libs/LinkageMapXCoff.py)0
-rw-r--r--lib/portage/util/_dyn_libs/NeededEntry.py (renamed from pym/portage/util/_dyn_libs/NeededEntry.py)0
-rw-r--r--lib/portage/util/_dyn_libs/PreservedLibsRegistry.py (renamed from pym/portage/util/_dyn_libs/PreservedLibsRegistry.py)0
-rw-r--r--lib/portage/util/_dyn_libs/__init__.py (renamed from pym/portage/util/_dyn_libs/__init__.py)0
-rw-r--r--lib/portage/util/_dyn_libs/display_preserved_libs.py (renamed from pym/portage/util/_dyn_libs/display_preserved_libs.py)0
-rw-r--r--lib/portage/util/_dyn_libs/soname_deps.py (renamed from pym/portage/util/_dyn_libs/soname_deps.py)0
-rw-r--r--lib/portage/util/_eventloop/EventLoop.py (renamed from pym/portage/util/_eventloop/EventLoop.py)50
-rw-r--r--lib/portage/util/_eventloop/PollConstants.py (renamed from pym/portage/util/_eventloop/PollConstants.py)0
-rw-r--r--lib/portage/util/_eventloop/PollSelectAdapter.py (renamed from pym/portage/util/_eventloop/PollSelectAdapter.py)0
-rw-r--r--lib/portage/util/_eventloop/__init__.py (renamed from pym/portage/util/_eventloop/__init__.py)0
-rw-r--r--lib/portage/util/_eventloop/asyncio_event_loop.py (renamed from pym/portage/util/_eventloop/asyncio_event_loop.py)31
-rw-r--r--lib/portage/util/_eventloop/global_event_loop.py (renamed from pym/portage/util/_eventloop/global_event_loop.py)0
-rw-r--r--lib/portage/util/_get_vm_info.py (renamed from pym/portage/util/_get_vm_info.py)0
-rw-r--r--lib/portage/util/_info_files.py (renamed from pym/portage/util/_info_files.py)0
-rw-r--r--lib/portage/util/_path.py (renamed from pym/portage/util/_path.py)0
-rw-r--r--lib/portage/util/_pty.py (renamed from pym/portage/util/_pty.py)0
-rw-r--r--lib/portage/util/_urlopen.py (renamed from pym/portage/util/_urlopen.py)0
-rw-r--r--lib/portage/util/_xattr.py (renamed from pym/portage/util/_xattr.py)0
-rw-r--r--lib/portage/util/backoff.py (renamed from pym/portage/util/backoff.py)0
-rw-r--r--lib/portage/util/changelog.py (renamed from pym/portage/util/changelog.py)0
-rw-r--r--lib/portage/util/compression_probe.py (renamed from pym/portage/util/compression_probe.py)0
-rw-r--r--lib/portage/util/configparser.py (renamed from pym/portage/util/configparser.py)0
-rw-r--r--lib/portage/util/cpuinfo.py (renamed from pym/portage/util/cpuinfo.py)0
-rw-r--r--lib/portage/util/digraph.py (renamed from pym/portage/util/digraph.py)0
-rw-r--r--lib/portage/util/elf/__init__.py (renamed from pym/portage/util/elf/__init__.py)0
-rw-r--r--lib/portage/util/elf/constants.py (renamed from pym/portage/util/elf/constants.py)0
-rw-r--r--lib/portage/util/elf/header.py (renamed from pym/portage/util/elf/header.py)0
-rw-r--r--lib/portage/util/endian/__init__.py (renamed from pym/portage/util/endian/__init__.py)0
-rw-r--r--lib/portage/util/endian/decode.py (renamed from pym/portage/util/endian/decode.py)0
-rw-r--r--lib/portage/util/env_update.py (renamed from pym/portage/util/env_update.py)0
-rw-r--r--lib/portage/util/file_copy/__init__.py (renamed from pym/portage/util/file_copy/__init__.py)0
-rw-r--r--lib/portage/util/formatter.py (renamed from pym/portage/util/formatter.py)0
-rw-r--r--lib/portage/util/futures/__init__.py (renamed from pym/portage/util/futures/__init__.py)0
-rw-r--r--lib/portage/util/futures/_asyncio/__init__.py (renamed from pym/portage/util/futures/_asyncio/__init__.py)0
-rw-r--r--lib/portage/util/futures/_asyncio/tasks.py (renamed from pym/portage/util/futures/_asyncio/tasks.py)0
-rw-r--r--lib/portage/util/futures/compat_coroutine.py112
-rw-r--r--lib/portage/util/futures/events.py (renamed from pym/portage/util/futures/events.py)0
-rw-r--r--lib/portage/util/futures/executor/__init__.py (renamed from pym/portage/util/futures/executor/__init__.py)0
-rw-r--r--lib/portage/util/futures/executor/fork.py (renamed from pym/portage/util/futures/executor/fork.py)0
-rw-r--r--lib/portage/util/futures/extendedfutures.py (renamed from pym/portage/util/futures/extendedfutures.py)0
-rw-r--r--lib/portage/util/futures/futures.py (renamed from pym/portage/util/futures/futures.py)0
-rw-r--r--lib/portage/util/futures/iter_completed.py (renamed from pym/portage/util/futures/iter_completed.py)0
-rw-r--r--lib/portage/util/futures/retry.py (renamed from pym/portage/util/futures/retry.py)0
-rw-r--r--lib/portage/util/futures/transports.py (renamed from pym/portage/util/futures/transports.py)0
-rw-r--r--lib/portage/util/futures/unix_events.py (renamed from pym/portage/util/futures/unix_events.py)0
-rw-r--r--lib/portage/util/install_mask.py (renamed from pym/portage/util/install_mask.py)7
-rw-r--r--lib/portage/util/iterators/MultiIterGroupBy.py (renamed from pym/portage/util/iterators/MultiIterGroupBy.py)0
-rw-r--r--lib/portage/util/iterators/__init__.py (renamed from pym/portage/util/iterators/__init__.py)0
-rw-r--r--lib/portage/util/lafilefixer.py (renamed from pym/portage/util/lafilefixer.py)0
-rw-r--r--lib/portage/util/listdir.py (renamed from pym/portage/util/listdir.py)0
-rw-r--r--lib/portage/util/locale.py (renamed from pym/portage/util/locale.py)0
-rw-r--r--lib/portage/util/monotonic.py (renamed from pym/portage/util/monotonic.py)0
-rw-r--r--lib/portage/util/movefile.py (renamed from pym/portage/util/movefile.py)0
-rw-r--r--lib/portage/util/mtimedb.py (renamed from pym/portage/util/mtimedb.py)0
-rw-r--r--lib/portage/util/path.py (renamed from pym/portage/util/path.py)0
-rw-r--r--lib/portage/util/socks5.py (renamed from pym/portage/util/socks5.py)0
-rw-r--r--lib/portage/util/whirlpool.py (renamed from pym/portage/util/whirlpool.py)0
-rw-r--r--lib/portage/util/writeable_check.py (renamed from pym/portage/util/writeable_check.py)0
-rw-r--r--lib/portage/versions.py (renamed from pym/portage/versions.py)0
-rw-r--r--lib/portage/xml/__init__.py (renamed from pym/portage/xml/__init__.py)0
-rw-r--r--lib/portage/xml/metadata.py (renamed from pym/portage/xml/metadata.py)0
-rw-r--r--lib/portage/xpak.py (renamed from pym/portage/xpak.py)0
-rw-r--r--man/color.map.52
-rw-r--r--man/make.conf.56
-rw-r--r--man/portage.523
-rw-r--r--man/ru/color.map.52
-rwxr-xr-xmisc/emerge-delta-webrsync26
-rw-r--r--pym/portage/sync/modules/webrsync/webrsync.py70
-rw-r--r--pym/portage/tests/resolver/test_features_test_use.py68
-rw-r--r--repoman/RELEASE-NOTES7
-rw-r--r--repoman/TEST-NOTES6
-rwxr-xr-xrepoman/bin/repoman4
-rw-r--r--repoman/cnf/qa_data/qa_data.yaml2
-rw-r--r--repoman/cnf/repository/qa_data.yaml2
-rw-r--r--repoman/lib/repoman/__init__.py (renamed from repoman/pym/repoman/__init__.py)0
-rw-r--r--repoman/lib/repoman/_portage.py (renamed from repoman/pym/repoman/_portage.py)0
-rw-r--r--repoman/lib/repoman/_subprocess.py (renamed from repoman/pym/repoman/_subprocess.py)0
-rw-r--r--repoman/lib/repoman/actions.py (renamed from repoman/pym/repoman/actions.py)0
-rw-r--r--repoman/lib/repoman/argparser.py (renamed from repoman/pym/repoman/argparser.py)0
-rw-r--r--repoman/lib/repoman/check_missingslot.py (renamed from repoman/pym/repoman/check_missingslot.py)0
-rw-r--r--repoman/lib/repoman/checks/__init__.py (renamed from repoman/pym/repoman/checks/__init__.py)0
-rw-r--r--repoman/lib/repoman/checks/herds/__init__.py (renamed from repoman/pym/repoman/checks/herds/__init__.py)0
-rw-r--r--repoman/lib/repoman/checks/herds/herdbase.py (renamed from repoman/pym/repoman/checks/herds/herdbase.py)0
-rw-r--r--repoman/lib/repoman/checks/herds/metadata.py (renamed from repoman/pym/repoman/checks/herds/metadata.py)0
-rw-r--r--repoman/lib/repoman/config.py (renamed from repoman/pym/repoman/config.py)0
-rw-r--r--repoman/lib/repoman/copyrights.py (renamed from repoman/pym/repoman/copyrights.py)0
-rw-r--r--repoman/lib/repoman/errors.py (renamed from repoman/pym/repoman/errors.py)0
-rw-r--r--repoman/lib/repoman/gpg.py (renamed from repoman/pym/repoman/gpg.py)0
-rwxr-xr-xrepoman/lib/repoman/main.py (renamed from repoman/pym/repoman/main.py)0
-rw-r--r--repoman/lib/repoman/metadata.py (renamed from repoman/pym/repoman/metadata.py)0
-rw-r--r--repoman/lib/repoman/modules/__init__.py (renamed from repoman/pym/repoman/modules/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/commit/__init__.py (renamed from repoman/pym/repoman/modules/commit/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/commit/manifest.py (renamed from repoman/pym/repoman/modules/commit/manifest.py)0
-rw-r--r--repoman/lib/repoman/modules/commit/repochecks.py (renamed from repoman/pym/repoman/modules/commit/repochecks.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/assignment/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/assignment/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/assignment/assignment.py (renamed from repoman/pym/repoman/modules/linechecks/assignment/assignment.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/base.py (renamed from repoman/pym/repoman/modules/linechecks/base.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/config.py (renamed from repoman/pym/repoman/modules/linechecks/config.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/controller.py (renamed from repoman/pym/repoman/modules/linechecks/controller.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/depend/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/depend/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/depend/implicit.py (renamed from repoman/pym/repoman/modules/linechecks/depend/implicit.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/deprecated/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/deprecated/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/deprecated/deprecated.py (renamed from repoman/pym/repoman/modules/linechecks/deprecated/deprecated.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/deprecated/inherit.py (renamed from repoman/pym/repoman/modules/linechecks/deprecated/inherit.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/do/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/do/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/do/dosym.py (renamed from repoman/pym/repoman/modules/linechecks/do/dosym.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/eapi/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/eapi/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/eapi/checks.py (renamed from repoman/pym/repoman/modules/linechecks/eapi/checks.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/eapi/definition.py (renamed from repoman/pym/repoman/modules/linechecks/eapi/definition.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/emake/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/emake/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/emake/emake.py (renamed from repoman/pym/repoman/modules/linechecks/emake/emake.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/gentoo_header/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/gentoo_header/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/gentoo_header/header.py (renamed from repoman/pym/repoman/modules/linechecks/gentoo_header/header.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/helpers/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/helpers/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/helpers/offset.py (renamed from repoman/pym/repoman/modules/linechecks/helpers/offset.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/nested/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/nested/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/nested/nested.py (renamed from repoman/pym/repoman/modules/linechecks/nested/nested.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/nested/nesteddie.py (renamed from repoman/pym/repoman/modules/linechecks/nested/nesteddie.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/patches/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/patches/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/patches/patches.py (renamed from repoman/pym/repoman/modules/linechecks/patches/patches.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/phases/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/phases/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/phases/phase.py (renamed from repoman/pym/repoman/modules/linechecks/phases/phase.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/portage/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/portage/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/portage/internal.py (renamed from repoman/pym/repoman/modules/linechecks/portage/internal.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/quotes/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/quotes/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/quotes/quoteda.py (renamed from repoman/pym/repoman/modules/linechecks/quotes/quoteda.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/quotes/quotes.py (renamed from repoman/pym/repoman/modules/linechecks/quotes/quotes.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/uri/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/uri/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/uri/uri.py (renamed from repoman/pym/repoman/modules/linechecks/uri/uri.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/use/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/use/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/use/builtwith.py (renamed from repoman/pym/repoman/modules/linechecks/use/builtwith.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/useless/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/useless/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/useless/cd.py (renamed from repoman/pym/repoman/modules/linechecks/useless/cd.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/useless/dodoc.py (renamed from repoman/pym/repoman/modules/linechecks/useless/dodoc.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/whitespace/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/whitespace/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/whitespace/blank.py (renamed from repoman/pym/repoman/modules/linechecks/whitespace/blank.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/whitespace/whitespace.py (renamed from repoman/pym/repoman/modules/linechecks/whitespace/whitespace.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/workaround/__init__.py (renamed from repoman/pym/repoman/modules/linechecks/workaround/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/linechecks/workaround/workarounds.py (renamed from repoman/pym/repoman/modules/linechecks/workaround/workarounds.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/__init__.py (renamed from repoman/pym/repoman/modules/scan/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/depend/__init__.py (renamed from repoman/pym/repoman/modules/scan/depend/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/depend/_depend_checks.py (renamed from repoman/pym/repoman/modules/scan/depend/_depend_checks.py)9
-rw-r--r--repoman/lib/repoman/modules/scan/depend/_gen_arches.py (renamed from repoman/pym/repoman/modules/scan/depend/_gen_arches.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/depend/profile.py (renamed from repoman/pym/repoman/modules/scan/depend/profile.py)36
-rw-r--r--repoman/lib/repoman/modules/scan/directories/__init__.py (renamed from repoman/pym/repoman/modules/scan/directories/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/directories/files.py (renamed from repoman/pym/repoman/modules/scan/directories/files.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/directories/mtime.py (renamed from repoman/pym/repoman/modules/scan/directories/mtime.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/eapi/__init__.py (renamed from repoman/pym/repoman/modules/scan/eapi/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/eapi/eapi.py (renamed from repoman/pym/repoman/modules/scan/eapi/eapi.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/ebuild/__init__.py (renamed from repoman/pym/repoman/modules/scan/ebuild/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/ebuild/ebuild.py (renamed from repoman/pym/repoman/modules/scan/ebuild/ebuild.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/ebuild/multicheck.py (renamed from repoman/pym/repoman/modules/scan/ebuild/multicheck.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/eclasses/__init__.py (renamed from repoman/pym/repoman/modules/scan/eclasses/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/eclasses/live.py (renamed from repoman/pym/repoman/modules/scan/eclasses/live.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/eclasses/ruby.py (renamed from repoman/pym/repoman/modules/scan/eclasses/ruby.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/fetch/__init__.py (renamed from repoman/pym/repoman/modules/scan/fetch/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/fetch/fetches.py (renamed from repoman/pym/repoman/modules/scan/fetch/fetches.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/keywords/__init__.py (renamed from repoman/pym/repoman/modules/scan/keywords/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/keywords/keywords.py (renamed from repoman/pym/repoman/modules/scan/keywords/keywords.py)21
-rw-r--r--repoman/lib/repoman/modules/scan/manifest/__init__.py (renamed from repoman/pym/repoman/modules/scan/manifest/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/manifest/manifests.py (renamed from repoman/pym/repoman/modules/scan/manifest/manifests.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/metadata/__init__.py (renamed from repoman/pym/repoman/modules/scan/metadata/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/metadata/description.py (renamed from repoman/pym/repoman/modules/scan/metadata/description.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py (renamed from repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/metadata/pkgmetadata.py (renamed from repoman/pym/repoman/modules/scan/metadata/pkgmetadata.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/metadata/restrict.py (renamed from repoman/pym/repoman/modules/scan/metadata/restrict.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/metadata/use_flags.py (renamed from repoman/pym/repoman/modules/scan/metadata/use_flags.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/module.py (renamed from repoman/pym/repoman/modules/scan/module.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/options/__init__.py (renamed from repoman/pym/repoman/modules/scan/options/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/options/options.py (renamed from repoman/pym/repoman/modules/scan/options/options.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/scan.py (renamed from repoman/pym/repoman/modules/scan/scan.py)0
-rw-r--r--repoman/lib/repoman/modules/scan/scanbase.py (renamed from repoman/pym/repoman/modules/scan/scanbase.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/None/__init__.py (renamed from repoman/pym/repoman/modules/vcs/None/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/None/changes.py (renamed from repoman/pym/repoman/modules/vcs/None/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/None/status.py (renamed from repoman/pym/repoman/modules/vcs/None/status.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/__init__.py (renamed from repoman/pym/repoman/modules/vcs/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/bzr/__init__.py (renamed from repoman/pym/repoman/modules/vcs/bzr/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/bzr/changes.py (renamed from repoman/pym/repoman/modules/vcs/bzr/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/bzr/status.py (renamed from repoman/pym/repoman/modules/vcs/bzr/status.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/changes.py (renamed from repoman/pym/repoman/modules/vcs/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/cvs/__init__.py (renamed from repoman/pym/repoman/modules/vcs/cvs/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/cvs/changes.py (renamed from repoman/pym/repoman/modules/vcs/cvs/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/cvs/status.py (renamed from repoman/pym/repoman/modules/vcs/cvs/status.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/git/__init__.py (renamed from repoman/pym/repoman/modules/vcs/git/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/git/changes.py (renamed from repoman/pym/repoman/modules/vcs/git/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/git/status.py (renamed from repoman/pym/repoman/modules/vcs/git/status.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/hg/__init__.py (renamed from repoman/pym/repoman/modules/vcs/hg/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/hg/changes.py (renamed from repoman/pym/repoman/modules/vcs/hg/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/hg/status.py (renamed from repoman/pym/repoman/modules/vcs/hg/status.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/settings.py (renamed from repoman/pym/repoman/modules/vcs/settings.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/svn/__init__.py (renamed from repoman/pym/repoman/modules/vcs/svn/__init__.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/svn/changes.py (renamed from repoman/pym/repoman/modules/vcs/svn/changes.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/svn/status.py (renamed from repoman/pym/repoman/modules/vcs/svn/status.py)0
-rw-r--r--repoman/lib/repoman/modules/vcs/vcs.py (renamed from repoman/pym/repoman/modules/vcs/vcs.py)0
-rw-r--r--repoman/lib/repoman/profile.py (renamed from repoman/pym/repoman/profile.py)0
-rw-r--r--repoman/lib/repoman/qa_data.py (renamed from repoman/pym/repoman/qa_data.py)0
-rw-r--r--repoman/lib/repoman/qa_tracker.py (renamed from repoman/pym/repoman/qa_tracker.py)0
-rw-r--r--repoman/lib/repoman/repos.py (renamed from repoman/pym/repoman/repos.py)0
-rw-r--r--repoman/lib/repoman/scanner.py (renamed from repoman/pym/repoman/scanner.py)0
-rw-r--r--repoman/lib/repoman/tests/__init__.py (renamed from repoman/pym/repoman/tests/__init__.py)0
-rw-r--r--repoman/lib/repoman/tests/__test__.py (renamed from repoman/pym/repoman/tests/__test__.py)0
-rw-r--r--repoman/lib/repoman/tests/changelog/__init__.py (renamed from repoman/pym/repoman/tests/changelog/__init__.py)0
-rw-r--r--repoman/lib/repoman/tests/changelog/__test__.py (renamed from repoman/pym/repoman/tests/changelog/__test__.py)0
-rw-r--r--repoman/lib/repoman/tests/changelog/test_echangelog.py (renamed from repoman/pym/repoman/tests/changelog/test_echangelog.py)0
-rw-r--r--repoman/lib/repoman/tests/commit/__init__.py (renamed from repoman/pym/repoman/tests/commit/__init__.py)0
-rw-r--r--repoman/lib/repoman/tests/commit/__test__.py (renamed from repoman/pym/repoman/tests/commit/__test__.py)0
-rw-r--r--repoman/lib/repoman/tests/commit/test_commitmsg.py (renamed from repoman/pym/repoman/tests/commit/test_commitmsg.py)0
-rw-r--r--repoman/lib/repoman/tests/runTests.py (renamed from repoman/pym/repoman/tests/runTests.py)2
-rw-r--r--repoman/lib/repoman/tests/simple/__init__.py (renamed from repoman/pym/repoman/tests/simple/__init__.py)0
-rw-r--r--repoman/lib/repoman/tests/simple/__test__.py (renamed from repoman/pym/repoman/tests/simple/__test__.py)0
-rw-r--r--repoman/lib/repoman/tests/simple/test_simple.py (renamed from repoman/pym/repoman/tests/simple/test_simple.py)0
-rw-r--r--repoman/lib/repoman/utilities.py (renamed from repoman/pym/repoman/utilities.py)0
-rw-r--r--repoman/man/repoman.13
-rwxr-xr-xrepoman/runtests4
-rwxr-xr-xrepoman/setup.py24
-rwxr-xr-xruntests4
-rwxr-xr-xsetup.py8
-rw-r--r--testpath4
-rw-r--r--tox.ini16
781 files changed, 1354 insertions, 376 deletions
diff --git a/.gitignore b/.gitignore
index 9c13ef473..a9f772c4c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ __pycache__/
*.so
/build
/tags
+/.tox/
setup.cfg
repoman/build
diff --git a/.travis.yml b/.travis.yml
index b13d8295e..27c1c78d4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,18 +8,7 @@ python:
# command to install dependencies
install:
- - sudo apt-get update -qq
- - sudo apt-get install -y libxml2-utils
- - pip install lxml
- # python3.6+ has sha3 built-in, for older versions install pysha3
- # (except for pypy where pysha3 is broken)
- - "[[ ${TRAVIS_PYTHON_VERSION} == 3.[6789] || ${TRAVIS_PYTHON_VERSION} == pypy ]] || pip install pysha3"
- # python3.6+ has blake2 built-in, for older versions install pyblake2
- - "[[ ${TRAVIS_PYTHON_VERSION} == 3.[6789] ]] || pip install pyblake2"
- # always install pygost for Streebog
- - pip install pygost
- # pyyaml is needed for building
- - pip install pyyaml
+ - pip install tox
script:
- printf "[build_ext]\nportage-ext-modules=true" >> setup.cfg
@@ -40,13 +29,8 @@ script:
-i '{}' +
- ./setup.py test
- ./setup.py install --root=/tmp/install-root
- # prevent repoman tests from trying to fetch metadata.xsd
- - mkdir -p /tmp/install-root/usr/lib/portage/cnf
- - cp repoman/cnf/metadata.xsd /tmp/install-root/usr/lib/portage/cnf/
- - sudo rsync -a /tmp/install-root/. /
- - python -b -Wd -m portage.tests.runTests
- # repoman test block
- - repoman/setup.py test
- - repoman/setup.py install --root=/tmp/install-root
- - sudo rsync -a /tmp/install-root/. /
- - python -b -Wd -m repoman.tests.runTests
+ - if [[ ${TRAVIS_PYTHON_VERSION} == ?.? ]]; then
+ tox -e py${TRAVIS_PYTHON_VERSION/./};
+ else
+ tox -e ${TRAVIS_PYTHON_VERSION};
+ fi
diff --git a/NEWS b/NEWS
index 3839b8bfb..f77c310e3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,15 @@
News (mainly features/major bug fixes)
+portage-2.3.42
+----------------
+* Sync with rsync quarantines data prior to verification, using the
+ rsync --link-dest option (can be disabled by setting
+ "sync-allow-hardlinks = no" in repos.conf).
+* Sync with git quarantines data prior to verification, see
+ https://wiki.gentoo.org/wiki/Portage_Security#git-mirror_repo.
+* Sync with shallow git pull is supported, by "setting sync-depth = 1"
+ in repos.conf.
+
portage-2.3.32
----------------
* EAPI 7 support.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index f74bb3d61..b03d0ae3f 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,6 +1,56 @@
Release Notes; upgrade information mainly.
Features/major bugfixes are listed in NEWS
+portage-2.3.44
+==================================
+* Bug Fixes:
+ - Bug 630292 parallel pngfix
+ - Bug 661834 rsync: fix _commit_download to drop privileges
+ - Bug 661838 webrsync: support sync-openpgp-key-path
+ - Bug 661906 git: fix key refresh failure to trigger abort
+
+
+portage-2.3.43
+==================================
+* Bug Fixes:
+ - Bug 640058 failure to unmerge gentoo-sources include-prefixes
+ directory
+ - Bug 649806 eliminate redundant stat calls on profile.bashrc files
+ - Bug 650814 eliminate unnecessary access syscalls on ebuilds
+ - Bug 660982 repoman incorrectly reports IUSE.missing
+ - Bug 661276 fix make.conf PORTDIR override when path does not exist
+
+
+portage-2.3.42
+==================================
+* Bug Fixes:
+ - Bug 552814 support shallow git pull by setting sync-depth = 1
+ in repos.conf
+ - Bug 659564 AttributeError unevaluated_atom with emerge
+ --ignore-soname-deps=n
+ - Bug 660372 GitSync: abort checkout for signature problem
+ - Bug 660410 rsync: quarantine data prior to verification
+ - Bug 660426 Add python2 compatible coroutine support
+ - Bug 660732 GitSync: add key refresh retry
+
+
+portage-2.3.41
+==================================
+* Bug Fixes:
+ - Bug 600804 revert portage uid/gid mapping behavior for PMS
+ - Bug 656542 ebuild command PermissionError from prepare_build_dirs
+ - Bug 656750 PollSelectAdapter has no attribute close
+ - Bug 656942 event loop recursion for emerge --nodeps --keep-going
+ - Bug 657360 event loop recursion for emerge --pretend --fetch
+ - Bug 657420 'str' has no attribute 'soname' for emerge --depclean
+ - Bug 657422 "[Errno 7] Argument list too long" with --usepkgonly
+ - Bug 657436 CancelledError triggered by Ctrl-C/SIGINT/TERM
+ - Bug 658322 support trailing slash in INSTALL_MASK patterns
+ - Bug 658684 fix emerge hang after unhandled exception with no tty
+ - Bug 658806 compress-build-logs EOFError
+ - Bug 659228 fix QA_FLAGS_IGNORED for EAPI 7
+
+
portage-2.3.40
==================================
* Bug Fixes:
diff --git a/TEST-NOTES b/TEST-NOTES
index f9c6ab0cd..8be5f9cf3 100644
--- a/TEST-NOTES
+++ b/TEST-NOTES
@@ -4,7 +4,7 @@ UnitTests
Portage has some tests that use the unittest framework that ships with python (2.3-2.4ish)
Tests have a specific naming convention.
-in pym/portage/tests/ there is a runTest script that invokes pym/portage/tests/__init__.py
+in lib/portage/tests/ there is a runTest script that invokes lib/portage/tests/__init__.py
This init looks at a hardcoded list of test dirs to search for tests.
If you add a new dir and don't see your new tests, make sure that the dir is in this list.
@@ -15,14 +15,14 @@ you should have files of the form test_${function}.py.
So if I was to write a vercmp test, and vercmp is in portage_versions.
-pym/portage/tests/portage_versions/test_vercmp.py
+lib/portage/tests/portage_versions/test_vercmp.py
would be the filename.
The __init__.py file now does recursive tests, but you need to tell it so. For example, if
you had cache tests the dir format would be something like...
-pym/portage/tests/cache/flat_hash/test_foo.py
+lib/portage/tests/cache/flat_hash/test_foo.py
and you would put "cache/flat_hash" into the testDirs variable in __init__.py.
diff --git a/bin/archive-conf b/bin/archive-conf
index b427b8803..6271b833c 100755
--- a/bin/archive-conf
+++ b/bin/archive-conf
@@ -15,7 +15,7 @@ import sys
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
diff --git a/bin/binhost-snapshot b/bin/binhost-snapshot
index 7a921fd6b..41d556831 100755
--- a/bin/binhost-snapshot
+++ b/bin/binhost-snapshot
@@ -15,7 +15,7 @@ except ImportError:
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
diff --git a/bin/clean_locks b/bin/clean_locks
index ecbedffcb..a35b9f73a 100755
--- a/bin/clean_locks
+++ b/bin/clean_locks
@@ -7,7 +7,7 @@ from __future__ import print_function
import sys, errno
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
diff --git a/bin/dispatch-conf b/bin/dispatch-conf
index 1ea3dbcdd..fb16cb63f 100755
--- a/bin/dispatch-conf
+++ b/bin/dispatch-conf
@@ -24,7 +24,7 @@ from random import random
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os, shutil
diff --git a/bin/ebuild b/bin/ebuild
index 75860e1a8..b87f2a1d7 100755
--- a/bin/ebuild
+++ b/bin/ebuild
@@ -42,7 +42,7 @@ import io
import os
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os
diff --git a/bin/ebuild-ipc.py b/bin/ebuild-ipc.py
index 8de1c44f5..773054f5d 100755
--- a/bin/ebuild-ipc.py
+++ b/bin/ebuild-ipc.py
@@ -26,7 +26,7 @@ else:
signal.signal(debug_signum, debug_signal)
if os.path.isfile(os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), ".portage_not_installed")):
- pym_paths = [os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "pym")]
+ pym_paths = [os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "lib")]
sys.path.insert(0, pym_paths[0])
else:
import distutils.sysconfig
diff --git a/bin/egencache b/bin/egencache
index 31cfa1098..04c8af2f0 100755
--- a/bin/egencache
+++ b/bin/egencache
@@ -44,7 +44,7 @@ import re
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os, _encodings, _unicode_encode, _unicode_decode
diff --git a/bin/emaint b/bin/emaint
index 37b8eb347..ea97c9b04 100755
--- a/bin/emaint
+++ b/bin/emaint
@@ -27,7 +27,7 @@ except KeyboardInterrupt:
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage.emaint.main import emaint_main
diff --git a/bin/emerge b/bin/emerge
index 703da20d7..65547e390 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -38,7 +38,7 @@ try:
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
portage._disable_legacy_globals()
diff --git a/bin/emerge-webrsync b/bin/emerge-webrsync
index c4f3b98c0..f9da96ffa 100755
--- a/bin/emerge-webrsync
+++ b/bin/emerge-webrsync
@@ -10,7 +10,14 @@
# - all output should prob be converted to e* funcs
# - add support for ROOT
+# repos.conf configuration for use with emerge --sync and emaint sync
+# using keyring from app-crypt/openpgp-keys-gentoo-release:
+# [gentoo]
+# sync-type = webrsync
+# sync-webrsync-verify-signature = true
+# sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
#
+# Alternative (legacy) PORTAGE_GPG_DIR configuration:
# gpg key import
# KEY_ID=0x96D8BF6D
# gpg --homedir /etc/portage/gnupg --keyserver subkeys.pgp.net --recv-keys $KEY_ID
@@ -73,7 +80,14 @@ do_verbose=0
do_debug=0
keep=false
-if has webrsync-gpg ${FEATURES} ; then
+if has $(__repo_attr "${repo_name}" sync-webrsync-verify-signature | \
+ LC_ALL=C tr '[:upper:]' '[:lower:]') true yes; then
+ if [[ ! -d ${PORTAGE_GPG_DIR} ]]; then
+ eecho "Do not call ${argv0##*/} directly, instead call emerge --sync or emaint sync."
+ exit 1
+ fi
+ WEBSYNC_VERIFY_SIGNATURE=1
+elif has webrsync-gpg ${FEATURES}; then
WEBSYNC_VERIFY_SIGNATURE=1
else
WEBSYNC_VERIFY_SIGNATURE=0
@@ -197,6 +211,13 @@ check_file_signature() {
fi
done <<< "${gnupg_status}"
fi
+ if [[ ${r} -ne 0 ]]; then
+ # Exit early since it's typically inappropriate to
+ # try other mirrors in this case (it may indicate
+ # a keyring problem).
+ eecho "signature verification failed"
+ exit 1
+ fi
else
eecho "cannot check signature: gpg binary not found"
exit 1
diff --git a/bin/env-update b/bin/env-update
index 889fc4967..6ffadc638 100755
--- a/bin/env-update
+++ b/bin/env-update
@@ -27,7 +27,7 @@ if len(sys.argv) > 1:
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
diff --git a/bin/etc-update b/bin/etc-update
index 1356b7768..4208b9f2b 100755
--- a/bin/etc-update
+++ b/bin/etc-update
@@ -37,7 +37,7 @@ OS_RELEASE_ID=$(cat /etc/os-release 2>/dev/null | grep '^ID=' | cut -d'=' -f2 |
case $OS_RELEASE_ID in
suse|opensuse|opensuse-leap|opensuse-tumbleweed) OS_FAMILY='rpm' ;;
fedora|rhel) OS_FAMILY='rpm' ;;
- arch|archarm|manjaro|antergos) OS_FAMILY='arch' NEW_EXT='pacnew';;
+ arch|archarm|arch32|manjaro|antergos) OS_FAMILY='arch' NEW_EXT='pacnew';;
*) OS_FAMILY='gentoo' ;;
esac
diff --git a/bin/fixpackages b/bin/fixpackages
index d950063b0..f43506600 100755
--- a/bin/fixpackages
+++ b/bin/fixpackages
@@ -10,7 +10,7 @@ import sys
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os
diff --git a/bin/glsa-check b/bin/glsa-check
index 2d6361beb..470003215 100755
--- a/bin/glsa-check
+++ b/bin/glsa-check
@@ -12,7 +12,7 @@ import operator
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os
diff --git a/bin/install-qa-check.d/10executable-issues b/bin/install-qa-check.d/10executable-issues
index 24973fe0d..8a2c8e875 100644
--- a/bin/install-qa-check.d/10executable-issues
+++ b/bin/install-qa-check.d/10executable-issues
@@ -66,7 +66,7 @@ elf_check() {
[[ -n ${!qa_var} ]] && QA_TEXTRELS=${!qa_var}
[[ -n ${QA_STRICT_TEXTRELS} ]] && QA_TEXTRELS=""
export QA_TEXTRELS="${QA_TEXTRELS} lib*/modules/*.ko"
- f=$(scanelf -qyRF '%t %p' "${ED}" | grep -v 'usr/lib/debug/')
+ f=$(scanelf -qyRF '%t %p' "${ED%/}/" | grep -v 'usr/lib/debug/')
if [[ -n ${f} ]] ; then
scanelf -qyRAF '%T %p' "${PORTAGE_BUILDDIR}"/ &> "${T}"/scanelf-textrel.log
__vecho -ne '\n'
@@ -109,7 +109,7 @@ elf_check() {
[[ -n ${QA_STRICT_WX_LOAD} ]] && QA_WX_LOAD=""
export QA_EXECSTACK="${QA_EXECSTACK} lib*/modules/*.ko"
export QA_WX_LOAD="${QA_WX_LOAD} lib*/modules/*.ko"
- f=$(scanelf -qyRAF '%e %p' "${ED}" | grep -v 'usr/lib/debug/')
+ f=$(scanelf -qyRAF '%e %p' "${ED%/}/" | grep -v 'usr/lib/debug/')
;;
esac
;;
diff --git a/bin/install-qa-check.d/10ignored-flags b/bin/install-qa-check.d/10ignored-flags
index dc160e182..09bcb57fc 100644
--- a/bin/install-qa-check.d/10ignored-flags
+++ b/bin/install-qa-check.d/10ignored-flags
@@ -26,7 +26,7 @@ ignored_flag_check() {
[[ "${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
+ 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.
@@ -66,8 +66,8 @@ ignored_flag_check() {
# Check for files built without respecting LDFLAGS
if [[ "${LDFLAGS}" == *,--defsym=__gentoo_check_ldflags__* ]] && \
! has binchecks ${RESTRICT} ; then
- f=$(LC_ALL=C comm -3 <(scanelf -qyRF '#k%p' -k .dynsym "${ED}" | LC_ALL=C sort) \
- <(scanelf -qyRF '#s%p' -s __gentoo_check_ldflags__ "${ED}" | LC_ALL=C sort))
+ f=$(LC_ALL=C comm -3 <(scanelf -qyRF '#k%p' -k .dynsym "${ED%/}/" | LC_ALL=C sort) \
+ <(scanelf -qyRF '#s%p' -s __gentoo_check_ldflags__ "${ED%/}/" | LC_ALL=C sort))
if [[ -n ${f} ]] ; then
echo "${f}" > "${T}"/scanelf-ignored-LDFLAGS.log
if [ "${QA_STRICT_FLAGS_IGNORED-unset}" = unset ] ; then
diff --git a/bin/install-qa-check.d/60pngfix b/bin/install-qa-check.d/60pngfix
index 8d53040b6..b69c55614 100644
--- a/bin/install-qa-check.d/60pngfix
+++ b/bin/install-qa-check.d/60pngfix
@@ -1,7 +1,17 @@
# Check for issues with PNG files
+source "${PORTAGE_BIN_PATH}/helper-functions.sh" || exit 1
+
pngfix_check() {
- local pngfix=$(type -P pngfix)
+ local chunksize=1 jobs pngfix=$(type -P pngfix) xargs=(${XARGS})
+
+ if "${xargs[@]}" --help | grep -q -- --max-procs=; then
+ jobs=$(makeopts_jobs)
+ if [[ ${jobs} -gt 1 ]]; then
+ xargs+=("--max-procs=${jobs}" -L "${chunksize}")
+ fi
+ fi
+
if [[ -n ${pngfix} ]] ; then
local pngout=()
local next
@@ -25,7 +35,7 @@ pngfix_check() {
fi
eqawarn " ${pngout[@]:7}: ${error}"
fi
- done < <(find "${ED}" -type f -name '*.png' -exec "${pngfix}" {} +)
+ done < <(find "${ED}" -type f -name '*.png' -print0 | "${xargs[@]}" -0 "${pngfix}")
fi
}
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index b36ae8217..6cb88898e 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -276,7 +276,7 @@ install_qa_check_elf() {
if type -P scanelf > /dev/null ; then
# Save NEEDED information after removing self-contained providers
rm -f "$PORTAGE_BUILDDIR"/build-info/NEEDED{,.ELF.2}
- scanelf -qyRF '%a;%p;%S;%r;%n' "${D}" | { while IFS= read -r l; do
+ scanelf -qyRF '%a;%p;%S;%r;%n' "${D%/}/" | { while IFS= read -r l; do
arch=${l%%;*}; l=${l#*;}
obj="/${l%%;*}"; l=${l#*;}
soname=${l%%;*}; l=${l#*;}
diff --git a/bin/portageq b/bin/portageq
index 7b9addb67..327ef3057 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -24,11 +24,9 @@ except KeyboardInterrupt:
import os
import types
-# for an explanation on this logic, see pym/_emerge/__init__.py
-# this differs from master, we need to revisit this when we can install
-# using distutils, like master
-if os.environ.__contains__("PORTAGE_PYTHONPATH"):
- pym_paths = [ os.environ["PORTAGE_PYTHONPATH"] ]
+if os.path.isfile(os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), ".portage_not_installed")):
+ pym_paths = [os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "lib")]
+ sys.path.insert(0, pym_paths[0])
else:
pym_paths = [ os.path.join(os.path.dirname(
os.path.dirname(os.path.realpath(__file__))), "pym") ]
diff --git a/bin/quickpkg b/bin/quickpkg
index d4ccd2b43..06fa232e1 100755
--- a/bin/quickpkg
+++ b/bin/quickpkg
@@ -14,7 +14,7 @@ import tarfile
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os
diff --git a/bin/regenworld b/bin/regenworld
index d89f42819..45394ab5b 100755
--- a/bin/regenworld
+++ b/bin/regenworld
@@ -7,7 +7,7 @@ from __future__ import print_function
import sys
from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
+ sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "lib"))
import portage
portage._internal_caller = True
from portage import os
diff --git a/cnf/make.globals b/cnf/make.globals
index 131c5076d..49a09f664 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -112,7 +112,7 @@ CONFIG_PROTECT="/etc"
CONFIG_PROTECT_MASK="/etc/env.d"
# Disable auto-use
-USE_ORDER="env:pkg:conf:defaults:pkginternal:repo:env.d"
+USE_ORDER="env:pkg:conf:defaults:pkginternal:features:repo:env.d"
# Default portage user/group
PORTAGE_USER='@portageuser@'
diff --git a/pym/Makefile.in b/lib/Makefile.in
index a32b219d6..a32b219d6 100644
--- a/pym/Makefile.in
+++ b/lib/Makefile.in
diff --git a/pym/_emerge/AbstractDepPriority.py b/lib/_emerge/AbstractDepPriority.py
index 1fcd04345..1fcd04345 100644
--- a/pym/_emerge/AbstractDepPriority.py
+++ b/lib/_emerge/AbstractDepPriority.py
diff --git a/pym/_emerge/AbstractEbuildProcess.py b/lib/_emerge/AbstractEbuildProcess.py
index bda0bd83f..bda0bd83f 100644
--- a/pym/_emerge/AbstractEbuildProcess.py
+++ b/lib/_emerge/AbstractEbuildProcess.py
diff --git a/pym/_emerge/AbstractPollTask.py b/lib/_emerge/AbstractPollTask.py
index 4157794c6..4157794c6 100644
--- a/pym/_emerge/AbstractPollTask.py
+++ b/lib/_emerge/AbstractPollTask.py
diff --git a/pym/_emerge/AsynchronousLock.py b/lib/_emerge/AsynchronousLock.py
index aed1bcb15..aed1bcb15 100644
--- a/pym/_emerge/AsynchronousLock.py
+++ b/lib/_emerge/AsynchronousLock.py
diff --git a/pym/_emerge/AsynchronousTask.py b/lib/_emerge/AsynchronousTask.py
index cf6e6dc44..cf6e6dc44 100644
--- a/pym/_emerge/AsynchronousTask.py
+++ b/lib/_emerge/AsynchronousTask.py
diff --git a/pym/_emerge/AtomArg.py b/lib/_emerge/AtomArg.py
index 343d7aaab..343d7aaab 100644
--- a/pym/_emerge/AtomArg.py
+++ b/lib/_emerge/AtomArg.py
diff --git a/pym/_emerge/Binpkg.py b/lib/_emerge/Binpkg.py
index 7791ec236..7791ec236 100644
--- a/pym/_emerge/Binpkg.py
+++ b/lib/_emerge/Binpkg.py
diff --git a/pym/_emerge/BinpkgEnvExtractor.py b/lib/_emerge/BinpkgEnvExtractor.py
index 5ba14955d..5ba14955d 100644
--- a/pym/_emerge/BinpkgEnvExtractor.py
+++ b/lib/_emerge/BinpkgEnvExtractor.py
diff --git a/pym/_emerge/BinpkgExtractorAsync.py b/lib/_emerge/BinpkgExtractorAsync.py
index 3733bdeb5..3733bdeb5 100644
--- a/pym/_emerge/BinpkgExtractorAsync.py
+++ b/lib/_emerge/BinpkgExtractorAsync.py
diff --git a/pym/_emerge/BinpkgFetcher.py b/lib/_emerge/BinpkgFetcher.py
index 36d027de3..36d027de3 100644
--- a/pym/_emerge/BinpkgFetcher.py
+++ b/lib/_emerge/BinpkgFetcher.py
diff --git a/pym/_emerge/BinpkgPrefetcher.py b/lib/_emerge/BinpkgPrefetcher.py
index 7ca897049..7ca897049 100644
--- a/pym/_emerge/BinpkgPrefetcher.py
+++ b/lib/_emerge/BinpkgPrefetcher.py
diff --git a/pym/_emerge/BinpkgVerifier.py b/lib/_emerge/BinpkgVerifier.py
index 7a6d15e80..7a6d15e80 100644
--- a/pym/_emerge/BinpkgVerifier.py
+++ b/lib/_emerge/BinpkgVerifier.py
diff --git a/pym/_emerge/Blocker.py b/lib/_emerge/Blocker.py
index 93046069d..93046069d 100644
--- a/pym/_emerge/Blocker.py
+++ b/lib/_emerge/Blocker.py
diff --git a/pym/_emerge/BlockerCache.py b/lib/_emerge/BlockerCache.py
index 53342d6d6..53342d6d6 100644
--- a/pym/_emerge/BlockerCache.py
+++ b/lib/_emerge/BlockerCache.py
diff --git a/pym/_emerge/BlockerDB.py b/lib/_emerge/BlockerDB.py
index 5b3b01c37..5b3b01c37 100644
--- a/pym/_emerge/BlockerDB.py
+++ b/lib/_emerge/BlockerDB.py
diff --git a/pym/_emerge/BlockerDepPriority.py b/lib/_emerge/BlockerDepPriority.py
index 1004a3717..1004a3717 100644
--- a/pym/_emerge/BlockerDepPriority.py
+++ b/lib/_emerge/BlockerDepPriority.py
diff --git a/pym/_emerge/CompositeTask.py b/lib/_emerge/CompositeTask.py
index 1edec4a17..1edec4a17 100644
--- a/pym/_emerge/CompositeTask.py
+++ b/lib/_emerge/CompositeTask.py
diff --git a/pym/_emerge/DepPriority.py b/lib/_emerge/DepPriority.py
index 34fdb481c..34fdb481c 100644
--- a/pym/_emerge/DepPriority.py
+++ b/lib/_emerge/DepPriority.py
diff --git a/pym/_emerge/DepPriorityNormalRange.py b/lib/_emerge/DepPriorityNormalRange.py
index 86395549f..86395549f 100644
--- a/pym/_emerge/DepPriorityNormalRange.py
+++ b/lib/_emerge/DepPriorityNormalRange.py
diff --git a/pym/_emerge/DepPrioritySatisfiedRange.py b/lib/_emerge/DepPrioritySatisfiedRange.py
index 391f5409b..391f5409b 100644
--- a/pym/_emerge/DepPrioritySatisfiedRange.py
+++ b/lib/_emerge/DepPrioritySatisfiedRange.py
diff --git a/pym/_emerge/Dependency.py b/lib/_emerge/Dependency.py
index 2ec860f83..2ec860f83 100644
--- a/pym/_emerge/Dependency.py
+++ b/lib/_emerge/Dependency.py
diff --git a/pym/_emerge/DependencyArg.py b/lib/_emerge/DependencyArg.py
index 29a0072c4..29a0072c4 100644
--- a/pym/_emerge/DependencyArg.py
+++ b/lib/_emerge/DependencyArg.py
diff --git a/pym/_emerge/EbuildBinpkg.py b/lib/_emerge/EbuildBinpkg.py
index 6e098eb8a..6e098eb8a 100644
--- a/pym/_emerge/EbuildBinpkg.py
+++ b/lib/_emerge/EbuildBinpkg.py
diff --git a/pym/_emerge/EbuildBuild.py b/lib/_emerge/EbuildBuild.py
index ab5a4da74..ab5a4da74 100644
--- a/pym/_emerge/EbuildBuild.py
+++ b/lib/_emerge/EbuildBuild.py
diff --git a/pym/_emerge/EbuildBuildDir.py b/lib/_emerge/EbuildBuildDir.py
index 477113db8..477113db8 100644
--- a/pym/_emerge/EbuildBuildDir.py
+++ b/lib/_emerge/EbuildBuildDir.py
diff --git a/pym/_emerge/EbuildExecuter.py b/lib/_emerge/EbuildExecuter.py
index d387b42be..d387b42be 100644
--- a/pym/_emerge/EbuildExecuter.py
+++ b/lib/_emerge/EbuildExecuter.py
diff --git a/pym/_emerge/EbuildFetcher.py b/lib/_emerge/EbuildFetcher.py
index ad5109c28..ad5109c28 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/lib/_emerge/EbuildFetcher.py
diff --git a/pym/_emerge/EbuildFetchonly.py b/lib/_emerge/EbuildFetchonly.py
index eec2ad208..eec2ad208 100644
--- a/pym/_emerge/EbuildFetchonly.py
+++ b/lib/_emerge/EbuildFetchonly.py
diff --git a/pym/_emerge/EbuildIpcDaemon.py b/lib/_emerge/EbuildIpcDaemon.py
index d0dbe18bd..d0dbe18bd 100644
--- a/pym/_emerge/EbuildIpcDaemon.py
+++ b/lib/_emerge/EbuildIpcDaemon.py
diff --git a/pym/_emerge/EbuildMerge.py b/lib/_emerge/EbuildMerge.py
index bedea902d..bedea902d 100644
--- a/pym/_emerge/EbuildMerge.py
+++ b/lib/_emerge/EbuildMerge.py
diff --git a/pym/_emerge/EbuildMetadataPhase.py b/lib/_emerge/EbuildMetadataPhase.py
index 4940d40b6..4940d40b6 100644
--- a/pym/_emerge/EbuildMetadataPhase.py
+++ b/lib/_emerge/EbuildMetadataPhase.py
diff --git a/pym/_emerge/EbuildPhase.py b/lib/_emerge/EbuildPhase.py
index 4104cefa7..4104cefa7 100644
--- a/pym/_emerge/EbuildPhase.py
+++ b/lib/_emerge/EbuildPhase.py
diff --git a/pym/_emerge/EbuildProcess.py b/lib/_emerge/EbuildProcess.py
index 333ad7bd0..333ad7bd0 100644
--- a/pym/_emerge/EbuildProcess.py
+++ b/lib/_emerge/EbuildProcess.py
diff --git a/pym/_emerge/EbuildSpawnProcess.py b/lib/_emerge/EbuildSpawnProcess.py
index 26d26fc77..26d26fc77 100644
--- a/pym/_emerge/EbuildSpawnProcess.py
+++ b/lib/_emerge/EbuildSpawnProcess.py
diff --git a/pym/_emerge/FakeVartree.py b/lib/_emerge/FakeVartree.py
index 3f82e97e9..3f82e97e9 100644
--- a/pym/_emerge/FakeVartree.py
+++ b/lib/_emerge/FakeVartree.py
diff --git a/pym/_emerge/FifoIpcDaemon.py b/lib/_emerge/FifoIpcDaemon.py
index 0cbaa13c7..0cbaa13c7 100644
--- a/pym/_emerge/FifoIpcDaemon.py
+++ b/lib/_emerge/FifoIpcDaemon.py
diff --git a/pym/_emerge/JobStatusDisplay.py b/lib/_emerge/JobStatusDisplay.py
index b8e142af9..b8e142af9 100644
--- a/pym/_emerge/JobStatusDisplay.py
+++ b/lib/_emerge/JobStatusDisplay.py
diff --git a/pym/_emerge/MergeListItem.py b/lib/_emerge/MergeListItem.py
index 938f8014a..938f8014a 100644
--- a/pym/_emerge/MergeListItem.py
+++ b/lib/_emerge/MergeListItem.py
diff --git a/pym/_emerge/MetadataRegen.py b/lib/_emerge/MetadataRegen.py
index 8eb110a46..8eb110a46 100644
--- a/pym/_emerge/MetadataRegen.py
+++ b/lib/_emerge/MetadataRegen.py
diff --git a/pym/_emerge/MiscFunctionsProcess.py b/lib/_emerge/MiscFunctionsProcess.py
index 89fd22635..89fd22635 100644
--- a/pym/_emerge/MiscFunctionsProcess.py
+++ b/lib/_emerge/MiscFunctionsProcess.py
diff --git a/pym/_emerge/Package.py b/lib/_emerge/Package.py
index 1d3457ed8..2a303835a 100644
--- a/pym/_emerge/Package.py
+++ b/lib/_emerge/Package.py
@@ -93,7 +93,10 @@ 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)
usealiases = self.root_config.settings._use_manager.getUseAliases(self)
self.iuse = self._iuse(self, self._metadata["IUSE"].split(),
implicit_match, usealiases, self.eapi)
diff --git a/pym/_emerge/PackageArg.py b/lib/_emerge/PackageArg.py
index ebfe4b21b..ebfe4b21b 100644
--- a/pym/_emerge/PackageArg.py
+++ b/lib/_emerge/PackageArg.py
diff --git a/pym/_emerge/PackageMerge.py b/lib/_emerge/PackageMerge.py
index 1e7b58ba3..1e7b58ba3 100644
--- a/pym/_emerge/PackageMerge.py
+++ b/lib/_emerge/PackageMerge.py
diff --git a/pym/_emerge/PackagePhase.py b/lib/_emerge/PackagePhase.py
index 107e2ca36..107e2ca36 100644
--- a/pym/_emerge/PackagePhase.py
+++ b/lib/_emerge/PackagePhase.py
diff --git a/pym/_emerge/PackageUninstall.py b/lib/_emerge/PackageUninstall.py
index 43210b4bc..43210b4bc 100644
--- a/pym/_emerge/PackageUninstall.py
+++ b/lib/_emerge/PackageUninstall.py
diff --git a/pym/_emerge/PackageVirtualDbapi.py b/lib/_emerge/PackageVirtualDbapi.py
index 26293dd98..26293dd98 100644
--- a/pym/_emerge/PackageVirtualDbapi.py
+++ b/lib/_emerge/PackageVirtualDbapi.py
diff --git a/pym/_emerge/PipeReader.py b/lib/_emerge/PipeReader.py
index 1aa5ee3bf..1aa5ee3bf 100644
--- a/pym/_emerge/PipeReader.py
+++ b/lib/_emerge/PipeReader.py
diff --git a/pym/_emerge/PollScheduler.py b/lib/_emerge/PollScheduler.py
index 569879b36..569879b36 100644
--- a/pym/_emerge/PollScheduler.py
+++ b/lib/_emerge/PollScheduler.py
diff --git a/pym/_emerge/ProgressHandler.py b/lib/_emerge/ProgressHandler.py
index f5afe6d87..f5afe6d87 100644
--- a/pym/_emerge/ProgressHandler.py
+++ b/lib/_emerge/ProgressHandler.py
diff --git a/pym/_emerge/RootConfig.py b/lib/_emerge/RootConfig.py
index 3648d01d7..3648d01d7 100644
--- a/pym/_emerge/RootConfig.py
+++ b/lib/_emerge/RootConfig.py
diff --git a/pym/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py
index 422308184..49b376281 100644
--- a/pym/_emerge/Scheduler.py
+++ b/lib/_emerge/Scheduler.py
@@ -1436,6 +1436,9 @@ class Scheduler(PollScheduler):
if self._main_loadavg_handle is not None:
self._main_loadavg_handle.cancel()
self._main_loadavg_handle = None
+ if self._job_delay_timeout_id is not None:
+ self._job_delay_timeout_id.cancel()
+ self._job_delay_timeout_id = None
def _choose_pkg(self):
"""
diff --git a/pym/_emerge/SequentialTaskQueue.py b/lib/_emerge/SequentialTaskQueue.py
index 80908936c..80908936c 100644
--- a/pym/_emerge/SequentialTaskQueue.py
+++ b/lib/_emerge/SequentialTaskQueue.py
diff --git a/pym/_emerge/SetArg.py b/lib/_emerge/SetArg.py
index 5c8297547..5c8297547 100644
--- a/pym/_emerge/SetArg.py
+++ b/lib/_emerge/SetArg.py
diff --git a/pym/_emerge/SpawnProcess.py b/lib/_emerge/SpawnProcess.py
index cd535d143..cd535d143 100644
--- a/pym/_emerge/SpawnProcess.py
+++ b/lib/_emerge/SpawnProcess.py
diff --git a/pym/_emerge/SubProcess.py b/lib/_emerge/SubProcess.py
index 7d6b03272..7d6b03272 100644
--- a/pym/_emerge/SubProcess.py
+++ b/lib/_emerge/SubProcess.py
diff --git a/pym/_emerge/Task.py b/lib/_emerge/Task.py
index 250d45802..250d45802 100644
--- a/pym/_emerge/Task.py
+++ b/lib/_emerge/Task.py
diff --git a/pym/_emerge/TaskSequence.py b/lib/_emerge/TaskSequence.py
index 1f2ba94c2..1f2ba94c2 100644
--- a/pym/_emerge/TaskSequence.py
+++ b/lib/_emerge/TaskSequence.py
diff --git a/pym/_emerge/UninstallFailure.py b/lib/_emerge/UninstallFailure.py
index e4f28347a..e4f28347a 100644
--- a/pym/_emerge/UninstallFailure.py
+++ b/lib/_emerge/UninstallFailure.py
diff --git a/pym/_emerge/UnmergeDepPriority.py b/lib/_emerge/UnmergeDepPriority.py
index ec44a67a1..ec44a67a1 100644
--- a/pym/_emerge/UnmergeDepPriority.py
+++ b/lib/_emerge/UnmergeDepPriority.py
diff --git a/pym/_emerge/UseFlagDisplay.py b/lib/_emerge/UseFlagDisplay.py
index 12820e9d1..12820e9d1 100644
--- a/pym/_emerge/UseFlagDisplay.py
+++ b/lib/_emerge/UseFlagDisplay.py
diff --git a/pym/_emerge/UserQuery.py b/lib/_emerge/UserQuery.py
index e20bbc6c3..e20bbc6c3 100644
--- a/pym/_emerge/UserQuery.py
+++ b/lib/_emerge/UserQuery.py
diff --git a/pym/_emerge/__init__.py b/lib/_emerge/__init__.py
index f98c56457..f98c56457 100644
--- a/pym/_emerge/__init__.py
+++ b/lib/_emerge/__init__.py
diff --git a/pym/_emerge/_find_deep_system_runtime_deps.py b/lib/_emerge/_find_deep_system_runtime_deps.py
index ca09d83ac..ca09d83ac 100644
--- a/pym/_emerge/_find_deep_system_runtime_deps.py
+++ b/lib/_emerge/_find_deep_system_runtime_deps.py
diff --git a/pym/_emerge/_flush_elog_mod_echo.py b/lib/_emerge/_flush_elog_mod_echo.py
index 9ac65b8ae..9ac65b8ae 100644
--- a/pym/_emerge/_flush_elog_mod_echo.py
+++ b/lib/_emerge/_flush_elog_mod_echo.py
diff --git a/pym/_emerge/actions.py b/lib/_emerge/actions.py
index a9856de94..a9856de94 100644
--- a/pym/_emerge/actions.py
+++ b/lib/_emerge/actions.py
diff --git a/pym/_emerge/chk_updated_cfg_files.py b/lib/_emerge/chk_updated_cfg_files.py
index e5e090767..e5e090767 100644
--- a/pym/_emerge/chk_updated_cfg_files.py
+++ b/lib/_emerge/chk_updated_cfg_files.py
diff --git a/pym/_emerge/clear_caches.py b/lib/_emerge/clear_caches.py
index cb0db105b..cb0db105b 100644
--- a/pym/_emerge/clear_caches.py
+++ b/lib/_emerge/clear_caches.py
diff --git a/pym/_emerge/countdown.py b/lib/_emerge/countdown.py
index 62e3c8dea..62e3c8dea 100644
--- a/pym/_emerge/countdown.py
+++ b/lib/_emerge/countdown.py
diff --git a/pym/_emerge/create_depgraph_params.py b/lib/_emerge/create_depgraph_params.py
index 08605baa1..08605baa1 100644
--- a/pym/_emerge/create_depgraph_params.py
+++ b/lib/_emerge/create_depgraph_params.py
diff --git a/pym/_emerge/create_world_atom.py b/lib/_emerge/create_world_atom.py
index 947f8088a..947f8088a 100644
--- a/pym/_emerge/create_world_atom.py
+++ b/lib/_emerge/create_world_atom.py
diff --git a/pym/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index f7bac69f9..cb8afa903 100644
--- a/pym/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -5613,10 +5613,6 @@ class depgraph(object):
if cp_list:
atom_set = InternalPackageSet(initial_atoms=(atom,),
allow_repo=True)
- if atom.repo is None and hasattr(db, "getRepositories"):
- repo_list = db.getRepositories(catpkg=atom_exp.cp)
- else:
- repo_list = [atom.repo]
# descending order
cp_list.reverse()
@@ -5624,13 +5620,11 @@ class depgraph(object):
# Call match_from_list on one cpv at a time, in order
# to avoid unnecessary match_from_list comparisons on
# versions that are never yielded from this method.
- if not match_from_list(atom_exp, [cpv]):
- continue
- for repo in repo_list:
-
+ if match_from_list(atom_exp, [cpv]):
try:
pkg = self._pkg(cpv, pkg_type, root_config,
- installed=installed, onlydeps=onlydeps, myrepo=repo)
+ installed=installed, onlydeps=onlydeps,
+ myrepo=getattr(cpv, 'repo', None))
except portage.exception.PackageNotFound:
pass
else:
@@ -8422,7 +8416,7 @@ class depgraph(object):
else:
# Display the specific atom from SetArg or
# Package types.
- if atom != atom.unevaluated_atom:
+ if atom.package and atom != atom.unevaluated_atom:
# Show the unevaluated atom, since it can reveal
# issues with conditional use-flags missing
# from IUSE.
diff --git a/pym/_emerge/emergelog.py b/lib/_emerge/emergelog.py
index 9397acaa7..9397acaa7 100644
--- a/pym/_emerge/emergelog.py
+++ b/lib/_emerge/emergelog.py
diff --git a/pym/_emerge/getloadavg.py b/lib/_emerge/getloadavg.py
index e4cb009cb..e4cb009cb 100644
--- a/pym/_emerge/getloadavg.py
+++ b/lib/_emerge/getloadavg.py
diff --git a/pym/_emerge/help.py b/lib/_emerge/help.py
index dd3a3475c..dd3a3475c 100644
--- a/pym/_emerge/help.py
+++ b/lib/_emerge/help.py
diff --git a/pym/_emerge/is_valid_package_atom.py b/lib/_emerge/is_valid_package_atom.py
index 17f764266..17f764266 100644
--- a/pym/_emerge/is_valid_package_atom.py
+++ b/lib/_emerge/is_valid_package_atom.py
diff --git a/pym/_emerge/main.py b/lib/_emerge/main.py
index e8b2c2e13..e8b2c2e13 100644
--- a/pym/_emerge/main.py
+++ b/lib/_emerge/main.py
diff --git a/pym/_emerge/post_emerge.py b/lib/_emerge/post_emerge.py
index 7e6063c52..7e6063c52 100644
--- a/pym/_emerge/post_emerge.py
+++ b/lib/_emerge/post_emerge.py
diff --git a/pym/_emerge/resolver/DbapiProvidesIndex.py b/lib/_emerge/resolver/DbapiProvidesIndex.py
index 1650edd4e..1650edd4e 100644
--- a/pym/_emerge/resolver/DbapiProvidesIndex.py
+++ b/lib/_emerge/resolver/DbapiProvidesIndex.py
diff --git a/pym/_emerge/resolver/__init__.py b/lib/_emerge/resolver/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/_emerge/resolver/__init__.py
+++ b/lib/_emerge/resolver/__init__.py
diff --git a/pym/_emerge/resolver/backtracking.py b/lib/_emerge/resolver/backtracking.py
index c29b9d42a..c29b9d42a 100644
--- a/pym/_emerge/resolver/backtracking.py
+++ b/lib/_emerge/resolver/backtracking.py
diff --git a/pym/_emerge/resolver/circular_dependency.py b/lib/_emerge/resolver/circular_dependency.py
index 5c119567b..5c119567b 100644
--- a/pym/_emerge/resolver/circular_dependency.py
+++ b/lib/_emerge/resolver/circular_dependency.py
diff --git a/pym/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py
index 24340576c..24340576c 100644
--- a/pym/_emerge/resolver/output.py
+++ b/lib/_emerge/resolver/output.py
diff --git a/pym/_emerge/resolver/output_helpers.py b/lib/_emerge/resolver/output_helpers.py
index b83717e93..b83717e93 100644
--- a/pym/_emerge/resolver/output_helpers.py
+++ b/lib/_emerge/resolver/output_helpers.py
diff --git a/pym/_emerge/resolver/package_tracker.py b/lib/_emerge/resolver/package_tracker.py
index ccb0b11cf..ccb0b11cf 100644
--- a/pym/_emerge/resolver/package_tracker.py
+++ b/lib/_emerge/resolver/package_tracker.py
diff --git a/pym/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py
index f676b38c8..f676b38c8 100644
--- a/pym/_emerge/resolver/slot_collision.py
+++ b/lib/_emerge/resolver/slot_collision.py
diff --git a/pym/_emerge/search.py b/lib/_emerge/search.py
index eb52b2ca3..eb52b2ca3 100644
--- a/pym/_emerge/search.py
+++ b/lib/_emerge/search.py
diff --git a/pym/_emerge/show_invalid_depstring_notice.py b/lib/_emerge/show_invalid_depstring_notice.py
index e11ea65ed..e11ea65ed 100644
--- a/pym/_emerge/show_invalid_depstring_notice.py
+++ b/lib/_emerge/show_invalid_depstring_notice.py
diff --git a/pym/_emerge/stdout_spinner.py b/lib/_emerge/stdout_spinner.py
index 670686adf..670686adf 100644
--- a/pym/_emerge/stdout_spinner.py
+++ b/lib/_emerge/stdout_spinner.py
diff --git a/pym/_emerge/unmerge.py b/lib/_emerge/unmerge.py
index 8923e20ea..8923e20ea 100644
--- a/pym/_emerge/unmerge.py
+++ b/lib/_emerge/unmerge.py
diff --git a/pym/portage/__init__.py b/lib/portage/__init__.py
index f9cc1a87c..f9cc1a87c 100644
--- a/pym/portage/__init__.py
+++ b/lib/portage/__init__.py
diff --git a/pym/portage/_emirrordist/Config.py b/lib/portage/_emirrordist/Config.py
index 574a83559..574a83559 100644
--- a/pym/portage/_emirrordist/Config.py
+++ b/lib/portage/_emirrordist/Config.py
diff --git a/pym/portage/_emirrordist/DeletionIterator.py b/lib/portage/_emirrordist/DeletionIterator.py
index dff52c042..dff52c042 100644
--- a/pym/portage/_emirrordist/DeletionIterator.py
+++ b/lib/portage/_emirrordist/DeletionIterator.py
diff --git a/pym/portage/_emirrordist/DeletionTask.py b/lib/portage/_emirrordist/DeletionTask.py
index 7d10957fa..7d10957fa 100644
--- a/pym/portage/_emirrordist/DeletionTask.py
+++ b/lib/portage/_emirrordist/DeletionTask.py
diff --git a/pym/portage/_emirrordist/FetchIterator.py b/lib/portage/_emirrordist/FetchIterator.py
index 4ad797502..4ad797502 100644
--- a/pym/portage/_emirrordist/FetchIterator.py
+++ b/lib/portage/_emirrordist/FetchIterator.py
diff --git a/pym/portage/_emirrordist/FetchTask.py b/lib/portage/_emirrordist/FetchTask.py
index 1440b697c..1440b697c 100644
--- a/pym/portage/_emirrordist/FetchTask.py
+++ b/lib/portage/_emirrordist/FetchTask.py
diff --git a/pym/portage/_emirrordist/MirrorDistTask.py b/lib/portage/_emirrordist/MirrorDistTask.py
index 8eb3081c6..8eb3081c6 100644
--- a/pym/portage/_emirrordist/MirrorDistTask.py
+++ b/lib/portage/_emirrordist/MirrorDistTask.py
diff --git a/pym/portage/_emirrordist/__init__.py b/lib/portage/_emirrordist/__init__.py
index 6cde9320b..6cde9320b 100644
--- a/pym/portage/_emirrordist/__init__.py
+++ b/lib/portage/_emirrordist/__init__.py
diff --git a/pym/portage/_emirrordist/main.py b/lib/portage/_emirrordist/main.py
index b63837b2a..b63837b2a 100644
--- a/pym/portage/_emirrordist/main.py
+++ b/lib/portage/_emirrordist/main.py
diff --git a/pym/portage/_global_updates.py b/lib/portage/_global_updates.py
index 81ee484ee..81ee484ee 100644
--- a/pym/portage/_global_updates.py
+++ b/lib/portage/_global_updates.py
diff --git a/pym/portage/_legacy_globals.py b/lib/portage/_legacy_globals.py
index 45113d150..45113d150 100644
--- a/pym/portage/_legacy_globals.py
+++ b/lib/portage/_legacy_globals.py
diff --git a/pym/portage/_selinux.py b/lib/portage/_selinux.py
index 985e96628..985e96628 100644
--- a/pym/portage/_selinux.py
+++ b/lib/portage/_selinux.py
diff --git a/pym/portage/_sets/ProfilePackageSet.py b/lib/portage/_sets/ProfilePackageSet.py
index fec937391..fec937391 100644
--- a/pym/portage/_sets/ProfilePackageSet.py
+++ b/lib/portage/_sets/ProfilePackageSet.py
diff --git a/pym/portage/_sets/__init__.py b/lib/portage/_sets/__init__.py
index 2c9bf9715..2c9bf9715 100644
--- a/pym/portage/_sets/__init__.py
+++ b/lib/portage/_sets/__init__.py
diff --git a/pym/portage/_sets/base.py b/lib/portage/_sets/base.py
index aba295602..aba295602 100644
--- a/pym/portage/_sets/base.py
+++ b/lib/portage/_sets/base.py
diff --git a/pym/portage/_sets/dbapi.py b/lib/portage/_sets/dbapi.py
index 299cb8157..299cb8157 100644
--- a/pym/portage/_sets/dbapi.py
+++ b/lib/portage/_sets/dbapi.py
diff --git a/pym/portage/_sets/files.py b/lib/portage/_sets/files.py
index e045701ff..e045701ff 100644
--- a/pym/portage/_sets/files.py
+++ b/lib/portage/_sets/files.py
diff --git a/pym/portage/_sets/libs.py b/lib/portage/_sets/libs.py
index 022e076f5..022e076f5 100644
--- a/pym/portage/_sets/libs.py
+++ b/lib/portage/_sets/libs.py
diff --git a/pym/portage/_sets/profiles.py b/lib/portage/_sets/profiles.py
index bccc02e7c..bccc02e7c 100644
--- a/pym/portage/_sets/profiles.py
+++ b/lib/portage/_sets/profiles.py
diff --git a/pym/portage/_sets/security.py b/lib/portage/_sets/security.py
index f8dbef2be..f8dbef2be 100644
--- a/pym/portage/_sets/security.py
+++ b/lib/portage/_sets/security.py
diff --git a/pym/portage/_sets/shell.py b/lib/portage/_sets/shell.py
index 2c95845c8..2c95845c8 100644
--- a/pym/portage/_sets/shell.py
+++ b/lib/portage/_sets/shell.py
diff --git a/pym/portage/cache/__init__.py b/lib/portage/cache/__init__.py
index e7fe599f0..e7fe599f0 100644
--- a/pym/portage/cache/__init__.py
+++ b/lib/portage/cache/__init__.py
diff --git a/pym/portage/cache/anydbm.py b/lib/portage/cache/anydbm.py
index 88d85b0da..88d85b0da 100644
--- a/pym/portage/cache/anydbm.py
+++ b/lib/portage/cache/anydbm.py
diff --git a/pym/portage/cache/cache_errors.py b/lib/portage/cache/cache_errors.py
index 3c1f2397e..3c1f2397e 100644
--- a/pym/portage/cache/cache_errors.py
+++ b/lib/portage/cache/cache_errors.py
diff --git a/pym/portage/cache/ebuild_xattr.py b/lib/portage/cache/ebuild_xattr.py
index cc6b06246..cc6b06246 100644
--- a/pym/portage/cache/ebuild_xattr.py
+++ b/lib/portage/cache/ebuild_xattr.py
diff --git a/pym/portage/cache/flat_hash.py b/lib/portage/cache/flat_hash.py
index 79783245b..79783245b 100644
--- a/pym/portage/cache/flat_hash.py
+++ b/lib/portage/cache/flat_hash.py
diff --git a/pym/portage/cache/fs_template.py b/lib/portage/cache/fs_template.py
index e3c3c12c2..e3c3c12c2 100644
--- a/pym/portage/cache/fs_template.py
+++ b/lib/portage/cache/fs_template.py
diff --git a/pym/portage/cache/index/IndexStreamIterator.py b/lib/portage/cache/index/IndexStreamIterator.py
index 972aee116..972aee116 100644
--- a/pym/portage/cache/index/IndexStreamIterator.py
+++ b/lib/portage/cache/index/IndexStreamIterator.py
diff --git a/pym/portage/cache/index/__init__.py b/lib/portage/cache/index/__init__.py
index 7cd880e11..7cd880e11 100644
--- a/pym/portage/cache/index/__init__.py
+++ b/lib/portage/cache/index/__init__.py
diff --git a/pym/portage/cache/index/pkg_desc_index.py b/lib/portage/cache/index/pkg_desc_index.py
index dbcbb8313..dbcbb8313 100644
--- a/pym/portage/cache/index/pkg_desc_index.py
+++ b/lib/portage/cache/index/pkg_desc_index.py
diff --git a/pym/portage/cache/mappings.py b/lib/portage/cache/mappings.py
index 921fdaf1b..921fdaf1b 100644
--- a/pym/portage/cache/mappings.py
+++ b/lib/portage/cache/mappings.py
diff --git a/pym/portage/cache/metadata.py b/lib/portage/cache/metadata.py
index 59b25b606..59b25b606 100644
--- a/pym/portage/cache/metadata.py
+++ b/lib/portage/cache/metadata.py
diff --git a/pym/portage/cache/sql_template.py b/lib/portage/cache/sql_template.py
index d023b1b5d..d023b1b5d 100644
--- a/pym/portage/cache/sql_template.py
+++ b/lib/portage/cache/sql_template.py
diff --git a/pym/portage/cache/sqlite.py b/lib/portage/cache/sqlite.py
index 69150f679..69150f679 100644
--- a/pym/portage/cache/sqlite.py
+++ b/lib/portage/cache/sqlite.py
diff --git a/pym/portage/cache/template.py b/lib/portage/cache/template.py
index 8662d859f..8662d859f 100644
--- a/pym/portage/cache/template.py
+++ b/lib/portage/cache/template.py
diff --git a/pym/portage/cache/volatile.py b/lib/portage/cache/volatile.py
index 55167451b..55167451b 100644
--- a/pym/portage/cache/volatile.py
+++ b/lib/portage/cache/volatile.py
diff --git a/pym/portage/checksum.py b/lib/portage/checksum.py
index 4174638e6..4174638e6 100644
--- a/pym/portage/checksum.py
+++ b/lib/portage/checksum.py
diff --git a/pym/portage/const.py b/lib/portage/const.py
index 65bcf46f9..65bcf46f9 100644
--- a/pym/portage/const.py
+++ b/lib/portage/const.py
diff --git a/pym/portage/const_autotool.py b/lib/portage/const_autotool.py
index d12003c46..d12003c46 100644
--- a/pym/portage/const_autotool.py
+++ b/lib/portage/const_autotool.py
diff --git a/pym/portage/cvstree.py b/lib/portage/cvstree.py
index 87bbed8bb..87bbed8bb 100644
--- a/pym/portage/cvstree.py
+++ b/lib/portage/cvstree.py
diff --git a/pym/portage/data.py b/lib/portage/data.py
index 25a074848..25a074848 100644
--- a/pym/portage/data.py
+++ b/lib/portage/data.py
diff --git a/pym/portage/dbapi/DummyTree.py b/lib/portage/dbapi/DummyTree.py
index 6579e88e2..6579e88e2 100644
--- a/pym/portage/dbapi/DummyTree.py
+++ b/lib/portage/dbapi/DummyTree.py
diff --git a/pym/portage/dbapi/IndexedPortdb.py b/lib/portage/dbapi/IndexedPortdb.py
index 510e0278c..510e0278c 100644
--- a/pym/portage/dbapi/IndexedPortdb.py
+++ b/lib/portage/dbapi/IndexedPortdb.py
diff --git a/pym/portage/dbapi/IndexedVardb.py b/lib/portage/dbapi/IndexedVardb.py
index e2910b27f..e2910b27f 100644
--- a/pym/portage/dbapi/IndexedVardb.py
+++ b/lib/portage/dbapi/IndexedVardb.py
diff --git a/pym/portage/dbapi/_ContentsCaseSensitivityManager.py b/lib/portage/dbapi/_ContentsCaseSensitivityManager.py
index c479ec971..c479ec971 100644
--- a/pym/portage/dbapi/_ContentsCaseSensitivityManager.py
+++ b/lib/portage/dbapi/_ContentsCaseSensitivityManager.py
diff --git a/pym/portage/dbapi/_MergeProcess.py b/lib/portage/dbapi/_MergeProcess.py
index 371550079..371550079 100644
--- a/pym/portage/dbapi/_MergeProcess.py
+++ b/lib/portage/dbapi/_MergeProcess.py
diff --git a/pym/portage/dbapi/_SyncfsProcess.py b/lib/portage/dbapi/_SyncfsProcess.py
index 767dc2061..767dc2061 100644
--- a/pym/portage/dbapi/_SyncfsProcess.py
+++ b/lib/portage/dbapi/_SyncfsProcess.py
diff --git a/pym/portage/dbapi/_VdbMetadataDelta.py b/lib/portage/dbapi/_VdbMetadataDelta.py
index 7461f87c5..7461f87c5 100644
--- a/pym/portage/dbapi/_VdbMetadataDelta.py
+++ b/lib/portage/dbapi/_VdbMetadataDelta.py
diff --git a/pym/portage/dbapi/__init__.py b/lib/portage/dbapi/__init__.py
index d320cc75f..6fca6090c 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/lib/portage/dbapi/__init__.py
@@ -216,6 +216,18 @@ class dbapi(object):
yield cpv
+ def _repoman_iuse_implicit_cnstr(self, pkg, metadata):
+ """
+ In repoman's version of _iuse_implicit_cnstr, account for modifications
+ of the self.settings reference between calls.
+ """
+ eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
+ if eapi_attrs.iuse_effective:
+ iuse_implicit_match = lambda flag: self.settings._iuse_effective_match(flag)
+ else:
+ iuse_implicit_match = lambda flag: self.settings._iuse_implicit_match(flag)
+ return iuse_implicit_match
+
def _iuse_implicit_cnstr(self, pkg, metadata):
"""
Construct a callable that checks if a given USE flag should
diff --git a/pym/portage/dbapi/_expand_new_virt.py b/lib/portage/dbapi/_expand_new_virt.py
index 9aa603d11..9aa603d11 100644
--- a/pym/portage/dbapi/_expand_new_virt.py
+++ b/lib/portage/dbapi/_expand_new_virt.py
diff --git a/pym/portage/dbapi/_similar_name_search.py b/lib/portage/dbapi/_similar_name_search.py
index b6e4a1fbe..b6e4a1fbe 100644
--- a/pym/portage/dbapi/_similar_name_search.py
+++ b/lib/portage/dbapi/_similar_name_search.py
diff --git a/pym/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py
index 5376b7e17..3f2f0052f 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@ -1321,7 +1321,9 @@ class binarytree(object):
for k, v in iter_iuse_vars(src):
v_before = dest.get(k)
if v_before is not None:
- v = v_before + ' ' + v
+ merged_values = set(v_before.split())
+ merged_values.update(v.split())
+ v = ' '.join(sorted(merged_values))
dest[k] = v
if 'ARCH' not in dest and 'ARCH' in src:
diff --git a/pym/portage/dbapi/cpv_expand.py b/lib/portage/dbapi/cpv_expand.py
index 70ee78245..70ee78245 100644
--- a/pym/portage/dbapi/cpv_expand.py
+++ b/lib/portage/dbapi/cpv_expand.py
diff --git a/pym/portage/dbapi/dep_expand.py b/lib/portage/dbapi/dep_expand.py
index 9515b7dec..9515b7dec 100644
--- a/pym/portage/dbapi/dep_expand.py
+++ b/lib/portage/dbapi/dep_expand.py
diff --git a/pym/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
index 3e36024ff..677452273 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/lib/portage/dbapi/porttree.py
@@ -322,6 +322,26 @@ class portdbapi(dbapi):
self._better_cache = None
self._broken_ebuilds = set()
+ def _set_porttrees(self, porttrees):
+ """
+ Consumers, such as repoman and emirrordist, may modify the porttrees
+ attribute in order to modify the effective set of repositories for
+ all portdbapi operations.
+
+ @param porttrees: list of repo locations, in ascending order by
+ repo priority
+ @type porttrees: list
+ """
+ self._porttrees_repos = portage.OrderedDict((repo.name, repo)
+ for repo in (self.repositories.get_repo_for_location(location)
+ for location in porttrees))
+ self._porttrees = tuple(porttrees)
+
+ def _get_porttrees(self):
+ return self._porttrees
+
+ porttrees = property(_get_porttrees, _set_porttrees)
+
@property
def _event_loop(self):
if portage._internal_caller:
@@ -459,6 +479,9 @@ class portdbapi(dbapi):
mytree = self.treemap.get(myrepo)
if mytree is None:
return (None, 0)
+ elif mytree is not None:
+ # myrepo enables cached results when available
+ myrepo = self.repositories.location_map.get(mytree)
mysplit = mycpv.split("/")
psplit = pkgsplit(mysplit[1])
@@ -495,6 +518,14 @@ class portdbapi(dbapi):
relative_path = mysplit[0] + _os.sep + psplit[0] + _os.sep + \
mysplit[1] + ".ebuild"
+ # There is no need to access the filesystem when the package
+ # comes from this db and the package repo attribute corresponds
+ # to the desired repo, since the file was previously found by
+ # the cp_list method.
+ if (myrepo is not None and myrepo == getattr(mycpv, 'repo', None)
+ and self is getattr(mycpv, '_db', None)):
+ return (mytree + _os.sep + relative_path, mytree)
+
for x in mytrees:
filename = x + _os.sep + relative_path
if _os.access(_unicode_encode(filename,
@@ -950,18 +981,24 @@ class portdbapi(dbapi):
return cachelist[:]
mysplit = mycp.split("/")
invalid_category = mysplit[0] not in self._categories
- d={}
+ # Process repos in ascending order by repo.priority, so that
+ # stable sort by version produces results ordered by
+ # (pkg.version, repo.priority).
if mytree is not None:
if isinstance(mytree, basestring):
- mytrees = [mytree]
+ repos = [self.repositories.get_repo_for_location(mytree)]
else:
# assume it's iterable
- mytrees = mytree
+ repos = [self.repositories.get_repo_for_location(location)
+ for location in mytree]
elif self._better_cache is None:
- mytrees = self.porttrees
+ repos = self._porttrees_repos.values()
else:
- mytrees = [repo.location for repo in self._better_cache[mycp]]
- for oroot in mytrees:
+ repos = [repo for repo in reversed(self._better_cache[mycp])
+ if repo.name in self._porttrees_repos]
+ mylist = []
+ for repo in repos:
+ oroot = repo.location
try:
file_list = os.listdir(os.path.join(oroot, mycp))
except OSError:
@@ -986,16 +1023,17 @@ class portdbapi(dbapi):
writemsg(_("\nInvalid ebuild version: %s\n") % \
os.path.join(oroot, mycp, x), noiselevel=-1)
continue
- d[_pkg_str(mysplit[0]+"/"+pf, db=self)] = None
- if invalid_category and d:
+ mylist.append(_pkg_str(mysplit[0]+"/"+pf, db=self, repo=repo.name))
+ if invalid_category and mylist:
writemsg(_("\n!!! '%s' has a category that is not listed in " \
"%setc/portage/categories\n") % \
(mycp, self.settings["PORTAGE_CONFIGROOT"]), noiselevel=-1)
mylist = []
- else:
- mylist = list(d)
- # Always sort in ascending order here since it's handy
- # and the result can be easily cached and reused.
+ # Always sort in ascending order here since it's handy and
+ # the result can be easily cached and reused. Since mylist
+ # is initially in ascending order by repo.priority, stable
+ # sort by version produces results in ascending order by
+ # (pkg.version, repo.priority).
self._cpv_sort_ascending(mylist)
if self.frozen and mytree is None:
cachelist = mylist[:]
@@ -1091,20 +1129,10 @@ class portdbapi(dbapi):
else:
iterfunc = iter
- if mydep.repo is not None:
- repos = [mydep.repo]
- else:
- # We iterate over self.porttrees, since it's common to
- # tweak this attribute in order to adjust match behavior.
- repos = []
- for tree in reversed(self.porttrees):
- repos.append(self.repositories.get_name_for_location(tree))
-
for cpv in iterfunc(mylist):
- for repo in repos:
try:
metadata = dict(zip(aux_keys,
- self.aux_get(cpv, aux_keys, myrepo=repo)))
+ self.aux_get(cpv, aux_keys, myrepo=cpv.repo)))
except KeyError:
# ebuild not in this repo, or masked by corruption
continue
@@ -1128,11 +1156,8 @@ class portdbapi(dbapi):
continue
myval.append(pkg_str)
- # only yield a given cpv once
- break
-
- if myval and single_match:
- break
+ if single_match:
+ break
if single_match:
if myval:
diff --git a/pym/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
index 77a72b5b1..943ba4ff8 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/lib/portage/dbapi/vartree.py
@@ -2767,9 +2767,13 @@ class dblink(object):
real_root = self.settings['ROOT']
dirs = sorted(dirs)
- dirs.reverse()
+ revisit = {}
- for obj, inode_key in dirs:
+ while True:
+ try:
+ obj, inode_key = dirs.pop()
+ except IndexError:
+ break
# Treat any directory named "info" as a candidate here,
# since it might have been in INFOPATH previously even
# though it may not be there now.
@@ -2832,6 +2836,7 @@ class dblink(object):
raise
if e.errno != errno.ENOENT:
show_unmerge("---", unmerge_desc["!empty"], "dir", obj)
+ revisit[obj] = inode_key
# Since we didn't remove this directory, record the directory
# itself for use in syncfs calls, if we have removed another
@@ -2852,6 +2857,7 @@ class dblink(object):
# no need to protect symlinks that point to it.
unmerge_syms = protected_symlinks.pop(inode_key, None)
if unmerge_syms is not None:
+ parents = []
for relative_path in unmerge_syms:
obj = os.path.join(real_root,
relative_path.lstrip(os.sep))
@@ -2863,6 +2869,21 @@ class dblink(object):
raise
del e
show_unmerge("!!!", "", "sym", obj)
+ else:
+ parents.append(os.path.dirname(obj))
+
+ if parents:
+ # Revisit parents recursively (bug 640058).
+ recursive_parents = []
+ for parent in set(parents):
+ while parent in revisit:
+ recursive_parents.append(parent)
+ parent = os.path.dirname(parent)
+ if parent == '/':
+ break
+
+ for parent in sorted(set(recursive_parents)):
+ dirs.append((parent, revisit.pop(parent)))
def isowner(self, filename, destroot=None):
"""
diff --git a/pym/portage/dbapi/virtual.py b/lib/portage/dbapi/virtual.py
index 3f7e6c221..3f7e6c221 100644
--- a/pym/portage/dbapi/virtual.py
+++ b/lib/portage/dbapi/virtual.py
diff --git a/pym/portage/debug.py b/lib/portage/debug.py
index d5a8cfbf6..193e62291 100644
--- a/pym/portage/debug.py
+++ b/lib/portage/debug.py
@@ -33,7 +33,7 @@ class trace_handler(object):
for x in python_system_paths:
self.ignore_prefixes.append(x + os.sep)
- self.trim_filename = prefix_trimmer(os.path.join(portage.const.PORTAGE_BASE_PATH, "pym") + os.sep).trim
+ self.trim_filename = prefix_trimmer(os.path.join(portage.const.PORTAGE_BASE_PATH, "lib") + os.sep).trim
self.show_local_lines = False
self.max_repr_length = 200
diff --git a/pym/portage/dep/__init__.py b/lib/portage/dep/__init__.py
index 26595da47..26595da47 100644
--- a/pym/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
diff --git a/pym/portage/dep/_dnf.py b/lib/portage/dep/_dnf.py
index 59657fd6a..59657fd6a 100644
--- a/pym/portage/dep/_dnf.py
+++ b/lib/portage/dep/_dnf.py
diff --git a/pym/portage/dep/_slot_operator.py b/lib/portage/dep/_slot_operator.py
index bae94b30a..bae94b30a 100644
--- a/pym/portage/dep/_slot_operator.py
+++ b/lib/portage/dep/_slot_operator.py
diff --git a/pym/portage/dep/dep_check.py b/lib/portage/dep/dep_check.py
index 2896e2389..2896e2389 100644
--- a/pym/portage/dep/dep_check.py
+++ b/lib/portage/dep/dep_check.py
diff --git a/pym/portage/dep/soname/SonameAtom.py b/lib/portage/dep/soname/SonameAtom.py
index a7dad973d..a7dad973d 100644
--- a/pym/portage/dep/soname/SonameAtom.py
+++ b/lib/portage/dep/soname/SonameAtom.py
diff --git a/pym/portage/dep/soname/__init__.py b/lib/portage/dep/soname/__init__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/dep/soname/__init__.py
+++ b/lib/portage/dep/soname/__init__.py
diff --git a/pym/portage/dep/soname/multilib_category.py b/lib/portage/dep/soname/multilib_category.py
index 84e018fb0..84e018fb0 100644
--- a/pym/portage/dep/soname/multilib_category.py
+++ b/lib/portage/dep/soname/multilib_category.py
diff --git a/pym/portage/dep/soname/parse.py b/lib/portage/dep/soname/parse.py
index 3f3757209..3f3757209 100644
--- a/pym/portage/dep/soname/parse.py
+++ b/lib/portage/dep/soname/parse.py
diff --git a/pym/portage/dispatch_conf.py b/lib/portage/dispatch_conf.py
index eaea59393..eaea59393 100644
--- a/pym/portage/dispatch_conf.py
+++ b/lib/portage/dispatch_conf.py
diff --git a/pym/portage/eapi.py b/lib/portage/eapi.py
index 158d58243..5e12e976d 100644
--- a/pym/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -170,7 +170,7 @@ def _get_eapi_attrs(eapi):
exports_EBUILD_PHASE_FUNC = (eapi is None or eapi_exports_EBUILD_PHASE_FUNC(eapi)),
exports_PORTDIR = (eapi is None or eapi_exports_PORTDIR(eapi)),
exports_ECLASSDIR = (eapi is not None and eapi_exports_ECLASSDIR(eapi)),
- feature_flag_test = True,
+ feature_flag_test = False,
feature_flag_targetroot = (eapi is not None and eapi_has_targetroot(eapi)),
hdepend = (eapi is not None and eapi_has_hdepend(eapi)),
iuse_defaults = (eapi is None or eapi_has_iuse_defaults(eapi)),
diff --git a/pym/portage/eclass_cache.py b/lib/portage/eclass_cache.py
index d2d9e2710..d2d9e2710 100644
--- a/pym/portage/eclass_cache.py
+++ b/lib/portage/eclass_cache.py
diff --git a/pym/portage/elog/__init__.py b/lib/portage/elog/__init__.py
index cc086123f..cc086123f 100644
--- a/pym/portage/elog/__init__.py
+++ b/lib/portage/elog/__init__.py
diff --git a/pym/portage/elog/filtering.py b/lib/portage/elog/filtering.py
index 82181a4cb..82181a4cb 100644
--- a/pym/portage/elog/filtering.py
+++ b/lib/portage/elog/filtering.py
diff --git a/pym/portage/elog/messages.py b/lib/portage/elog/messages.py
index a4897d8d8..a4897d8d8 100644
--- a/pym/portage/elog/messages.py
+++ b/lib/portage/elog/messages.py
diff --git a/pym/portage/elog/mod_custom.py b/lib/portage/elog/mod_custom.py
index e1a5223d6..e1a5223d6 100644
--- a/pym/portage/elog/mod_custom.py
+++ b/lib/portage/elog/mod_custom.py
diff --git a/pym/portage/elog/mod_echo.py b/lib/portage/elog/mod_echo.py
index fb86547a4..fb86547a4 100644
--- a/pym/portage/elog/mod_echo.py
+++ b/lib/portage/elog/mod_echo.py
diff --git a/pym/portage/elog/mod_mail.py b/lib/portage/elog/mod_mail.py
index 086c683a6..086c683a6 100644
--- a/pym/portage/elog/mod_mail.py
+++ b/lib/portage/elog/mod_mail.py
diff --git a/pym/portage/elog/mod_mail_summary.py b/lib/portage/elog/mod_mail_summary.py
index 0bd67f22b..0bd67f22b 100644
--- a/pym/portage/elog/mod_mail_summary.py
+++ b/lib/portage/elog/mod_mail_summary.py
diff --git a/pym/portage/elog/mod_save.py b/lib/portage/elog/mod_save.py
index 829ec6c5e..829ec6c5e 100644
--- a/pym/portage/elog/mod_save.py
+++ b/lib/portage/elog/mod_save.py
diff --git a/pym/portage/elog/mod_save_summary.py b/lib/portage/elog/mod_save_summary.py
index 786f89454..786f89454 100644
--- a/pym/portage/elog/mod_save_summary.py
+++ b/lib/portage/elog/mod_save_summary.py
diff --git a/pym/portage/elog/mod_syslog.py b/lib/portage/elog/mod_syslog.py
index 8b26ffa1e..8b26ffa1e 100644
--- a/pym/portage/elog/mod_syslog.py
+++ b/lib/portage/elog/mod_syslog.py
diff --git a/pym/portage/emaint/__init__.py b/lib/portage/emaint/__init__.py
index 48bc6e2ae..48bc6e2ae 100644
--- a/pym/portage/emaint/__init__.py
+++ b/lib/portage/emaint/__init__.py
diff --git a/pym/portage/emaint/defaults.py b/lib/portage/emaint/defaults.py
index 30f36af50..30f36af50 100644
--- a/pym/portage/emaint/defaults.py
+++ b/lib/portage/emaint/defaults.py
diff --git a/pym/portage/emaint/main.py b/lib/portage/emaint/main.py
index f448d6baa..f448d6baa 100644
--- a/pym/portage/emaint/main.py
+++ b/lib/portage/emaint/main.py
diff --git a/pym/portage/emaint/modules/__init__.py b/lib/portage/emaint/modules/__init__.py
index f67197d9f..f67197d9f 100644
--- a/pym/portage/emaint/modules/__init__.py
+++ b/lib/portage/emaint/modules/__init__.py
diff --git a/pym/portage/emaint/modules/binhost/__init__.py b/lib/portage/emaint/modules/binhost/__init__.py
index d535b47dd..d535b47dd 100644
--- a/pym/portage/emaint/modules/binhost/__init__.py
+++ b/lib/portage/emaint/modules/binhost/__init__.py
diff --git a/pym/portage/emaint/modules/binhost/binhost.py b/lib/portage/emaint/modules/binhost/binhost.py
index d3df0cbce..d3df0cbce 100644
--- a/pym/portage/emaint/modules/binhost/binhost.py
+++ b/lib/portage/emaint/modules/binhost/binhost.py
diff --git a/pym/portage/emaint/modules/config/__init__.py b/lib/portage/emaint/modules/config/__init__.py
index e94e767e0..e94e767e0 100644
--- a/pym/portage/emaint/modules/config/__init__.py
+++ b/lib/portage/emaint/modules/config/__init__.py
diff --git a/pym/portage/emaint/modules/config/config.py b/lib/portage/emaint/modules/config/config.py
index a0d56992c..a0d56992c 100644
--- a/pym/portage/emaint/modules/config/config.py
+++ b/lib/portage/emaint/modules/config/config.py
diff --git a/pym/portage/emaint/modules/logs/__init__.py b/lib/portage/emaint/modules/logs/__init__.py
index 5b78d71ff..5b78d71ff 100644
--- a/pym/portage/emaint/modules/logs/__init__.py
+++ b/lib/portage/emaint/modules/logs/__init__.py
diff --git a/pym/portage/emaint/modules/logs/logs.py b/lib/portage/emaint/modules/logs/logs.py
index 97b45475d..97b45475d 100644
--- a/pym/portage/emaint/modules/logs/logs.py
+++ b/lib/portage/emaint/modules/logs/logs.py
diff --git a/pym/portage/emaint/modules/merges/__init__.py b/lib/portage/emaint/modules/merges/__init__.py
index 89aa758a0..89aa758a0 100644
--- a/pym/portage/emaint/modules/merges/__init__.py
+++ b/lib/portage/emaint/modules/merges/__init__.py
diff --git a/pym/portage/emaint/modules/merges/merges.py b/lib/portage/emaint/modules/merges/merges.py
index 416a725ff..416a725ff 100644
--- a/pym/portage/emaint/modules/merges/merges.py
+++ b/lib/portage/emaint/modules/merges/merges.py
diff --git a/pym/portage/emaint/modules/move/__init__.py b/lib/portage/emaint/modules/move/__init__.py
index 0dbd86b0d..0dbd86b0d 100644
--- a/pym/portage/emaint/modules/move/__init__.py
+++ b/lib/portage/emaint/modules/move/__init__.py
diff --git a/pym/portage/emaint/modules/move/move.py b/lib/portage/emaint/modules/move/move.py
index e9a6acb6b..e9a6acb6b 100644
--- a/pym/portage/emaint/modules/move/move.py
+++ b/lib/portage/emaint/modules/move/move.py
diff --git a/pym/portage/emaint/modules/resume/__init__.py b/lib/portage/emaint/modules/resume/__init__.py
index 0c86f9536..0c86f9536 100644
--- a/pym/portage/emaint/modules/resume/__init__.py
+++ b/lib/portage/emaint/modules/resume/__init__.py
diff --git a/pym/portage/emaint/modules/resume/resume.py b/lib/portage/emaint/modules/resume/resume.py
index 580643b26..580643b26 100644
--- a/pym/portage/emaint/modules/resume/resume.py
+++ b/lib/portage/emaint/modules/resume/resume.py
diff --git a/pym/portage/emaint/modules/sync/__init__.py b/lib/portage/emaint/modules/sync/__init__.py
index 23f3a2e37..23f3a2e37 100644
--- a/pym/portage/emaint/modules/sync/__init__.py
+++ b/lib/portage/emaint/modules/sync/__init__.py
diff --git a/pym/portage/emaint/modules/sync/sync.py b/lib/portage/emaint/modules/sync/sync.py
index ebdc362e1..ebdc362e1 100644
--- a/pym/portage/emaint/modules/sync/sync.py
+++ b/lib/portage/emaint/modules/sync/sync.py
diff --git a/pym/portage/emaint/modules/world/__init__.py b/lib/portage/emaint/modules/world/__init__.py
index eaf3e5eff..eaf3e5eff 100644
--- a/pym/portage/emaint/modules/world/__init__.py
+++ b/lib/portage/emaint/modules/world/__init__.py
diff --git a/pym/portage/emaint/modules/world/world.py b/lib/portage/emaint/modules/world/world.py
index d142c3dda..d142c3dda 100644
--- a/pym/portage/emaint/modules/world/world.py
+++ b/lib/portage/emaint/modules/world/world.py
diff --git a/pym/portage/env/__init__.py b/lib/portage/env/__init__.py
index 17b66d17c..17b66d17c 100644
--- a/pym/portage/env/__init__.py
+++ b/lib/portage/env/__init__.py
diff --git a/pym/portage/env/config.py b/lib/portage/env/config.py
index 865d8353a..865d8353a 100644
--- a/pym/portage/env/config.py
+++ b/lib/portage/env/config.py
diff --git a/pym/portage/env/loaders.py b/lib/portage/env/loaders.py
index f86988471..f86988471 100644
--- a/pym/portage/env/loaders.py
+++ b/lib/portage/env/loaders.py
diff --git a/pym/portage/env/validators.py b/lib/portage/env/validators.py
index 4d11d69fe..4d11d69fe 100644
--- a/pym/portage/env/validators.py
+++ b/lib/portage/env/validators.py
diff --git a/pym/portage/exception.py b/lib/portage/exception.py
index aed8beeb9..aed8beeb9 100644
--- a/pym/portage/exception.py
+++ b/lib/portage/exception.py
diff --git a/pym/portage/getbinpkg.py b/lib/portage/getbinpkg.py
index 997cd2eab..997cd2eab 100644
--- a/pym/portage/getbinpkg.py
+++ b/lib/portage/getbinpkg.py
diff --git a/pym/portage/glsa.py b/lib/portage/glsa.py
index ccf93439d..ccf93439d 100644
--- a/pym/portage/glsa.py
+++ b/lib/portage/glsa.py
diff --git a/pym/portage/localization.py b/lib/portage/localization.py
index b215b9cba..b215b9cba 100644
--- a/pym/portage/localization.py
+++ b/lib/portage/localization.py
diff --git a/pym/portage/locks.py b/lib/portage/locks.py
index f61e1819a..f61e1819a 100644
--- a/pym/portage/locks.py
+++ b/lib/portage/locks.py
diff --git a/pym/portage/mail.py b/lib/portage/mail.py
index 11923eea6..11923eea6 100644
--- a/pym/portage/mail.py
+++ b/lib/portage/mail.py
diff --git a/pym/portage/manifest.py b/lib/portage/manifest.py
index 4bca61e86..4bca61e86 100644
--- a/pym/portage/manifest.py
+++ b/lib/portage/manifest.py
diff --git a/pym/portage/metadata.py b/lib/portage/metadata.py
index 1abec5a89..1abec5a89 100644
--- a/pym/portage/metadata.py
+++ b/lib/portage/metadata.py
diff --git a/pym/portage/module.py b/lib/portage/module.py
index bd7c94d4e..bd7c94d4e 100644
--- a/pym/portage/module.py
+++ b/lib/portage/module.py
diff --git a/pym/portage/news.py b/lib/portage/news.py
index d4f1429b2..d4f1429b2 100644
--- a/pym/portage/news.py
+++ b/lib/portage/news.py
diff --git a/pym/portage/output.py b/lib/portage/output.py
index 1070d0ef3..1070d0ef3 100644
--- a/pym/portage/output.py
+++ b/lib/portage/output.py
diff --git a/pym/portage/package/__init__.py b/lib/portage/package/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/package/__init__.py
+++ b/lib/portage/package/__init__.py
diff --git a/pym/portage/package/ebuild/__init__.py b/lib/portage/package/ebuild/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/package/ebuild/__init__.py
+++ b/lib/portage/package/ebuild/__init__.py
diff --git a/pym/portage/package/ebuild/_config/KeywordsManager.py b/lib/portage/package/ebuild/_config/KeywordsManager.py
index fd0a6318d..fd0a6318d 100644
--- a/pym/portage/package/ebuild/_config/KeywordsManager.py
+++ b/lib/portage/package/ebuild/_config/KeywordsManager.py
diff --git a/pym/portage/package/ebuild/_config/LicenseManager.py b/lib/portage/package/ebuild/_config/LicenseManager.py
index 1d4e08207..1d4e08207 100644
--- a/pym/portage/package/ebuild/_config/LicenseManager.py
+++ b/lib/portage/package/ebuild/_config/LicenseManager.py
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/lib/portage/package/ebuild/_config/LocationsManager.py
index f7d7209ff..f7d7209ff 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/lib/portage/package/ebuild/_config/LocationsManager.py
diff --git a/pym/portage/package/ebuild/_config/MaskManager.py b/lib/portage/package/ebuild/_config/MaskManager.py
index 40cc6e0c4..40cc6e0c4 100644
--- a/pym/portage/package/ebuild/_config/MaskManager.py
+++ b/lib/portage/package/ebuild/_config/MaskManager.py
diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/lib/portage/package/ebuild/_config/UseManager.py
index 7302876ab..7302876ab 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/lib/portage/package/ebuild/_config/UseManager.py
diff --git a/pym/portage/package/ebuild/_config/VirtualsManager.py b/lib/portage/package/ebuild/_config/VirtualsManager.py
index c4d1e3635..c4d1e3635 100644
--- a/pym/portage/package/ebuild/_config/VirtualsManager.py
+++ b/lib/portage/package/ebuild/_config/VirtualsManager.py
diff --git a/pym/portage/package/ebuild/_config/__init__.py b/lib/portage/package/ebuild/_config/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/package/ebuild/_config/__init__.py
+++ b/lib/portage/package/ebuild/_config/__init__.py
diff --git a/pym/portage/package/ebuild/_config/env_var_validation.py b/lib/portage/package/ebuild/_config/env_var_validation.py
index d3db545cb..d3db545cb 100644
--- a/pym/portage/package/ebuild/_config/env_var_validation.py
+++ b/lib/portage/package/ebuild/_config/env_var_validation.py
diff --git a/pym/portage/package/ebuild/_config/features_set.py b/lib/portage/package/ebuild/_config/features_set.py
index 62236fd89..62236fd89 100644
--- a/pym/portage/package/ebuild/_config/features_set.py
+++ b/lib/portage/package/ebuild/_config/features_set.py
diff --git a/pym/portage/package/ebuild/_config/helper.py b/lib/portage/package/ebuild/_config/helper.py
index ee0c090a0..ee0c090a0 100644
--- a/pym/portage/package/ebuild/_config/helper.py
+++ b/lib/portage/package/ebuild/_config/helper.py
diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/lib/portage/package/ebuild/_config/special_env_vars.py
index e2ea8c393..e2ea8c393 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/lib/portage/package/ebuild/_config/special_env_vars.py
diff --git a/pym/portage/package/ebuild/_config/unpack_dependencies.py b/lib/portage/package/ebuild/_config/unpack_dependencies.py
index 137518949..137518949 100644
--- a/pym/portage/package/ebuild/_config/unpack_dependencies.py
+++ b/lib/portage/package/ebuild/_config/unpack_dependencies.py
diff --git a/pym/portage/package/ebuild/_ipc/ExitCommand.py b/lib/portage/package/ebuild/_ipc/ExitCommand.py
index f14050b91..f14050b91 100644
--- a/pym/portage/package/ebuild/_ipc/ExitCommand.py
+++ b/lib/portage/package/ebuild/_ipc/ExitCommand.py
diff --git a/pym/portage/package/ebuild/_ipc/IpcCommand.py b/lib/portage/package/ebuild/_ipc/IpcCommand.py
index efb27f0a2..efb27f0a2 100644
--- a/pym/portage/package/ebuild/_ipc/IpcCommand.py
+++ b/lib/portage/package/ebuild/_ipc/IpcCommand.py
diff --git a/pym/portage/package/ebuild/_ipc/QueryCommand.py b/lib/portage/package/ebuild/_ipc/QueryCommand.py
index fa6d1ea16..fa6d1ea16 100644
--- a/pym/portage/package/ebuild/_ipc/QueryCommand.py
+++ b/lib/portage/package/ebuild/_ipc/QueryCommand.py
diff --git a/pym/portage/package/ebuild/_ipc/__init__.py b/lib/portage/package/ebuild/_ipc/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/package/ebuild/_ipc/__init__.py
+++ b/lib/portage/package/ebuild/_ipc/__init__.py
diff --git a/pym/portage/package/ebuild/_metadata_invalid.py b/lib/portage/package/ebuild/_metadata_invalid.py
index bcf1f7fcd..bcf1f7fcd 100644
--- a/pym/portage/package/ebuild/_metadata_invalid.py
+++ b/lib/portage/package/ebuild/_metadata_invalid.py
diff --git a/pym/portage/package/ebuild/_parallel_manifest/ManifestProcess.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
index 44e257664..44e257664 100644
--- a/pym/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py
diff --git a/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
index fabea9bc1..fabea9bc1 100644
--- a/pym/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestScheduler.py
diff --git a/pym/portage/package/ebuild/_parallel_manifest/ManifestTask.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
index 6bf5e82ef..6bf5e82ef 100644
--- a/pym/portage/package/ebuild/_parallel_manifest/ManifestTask.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestTask.py
diff --git a/pym/portage/package/ebuild/_parallel_manifest/__init__.py b/lib/portage/package/ebuild/_parallel_manifest/__init__.py
index 418ad862b..418ad862b 100644
--- a/pym/portage/package/ebuild/_parallel_manifest/__init__.py
+++ b/lib/portage/package/ebuild/_parallel_manifest/__init__.py
diff --git a/pym/portage/package/ebuild/_spawn_nofetch.py b/lib/portage/package/ebuild/_spawn_nofetch.py
index bbfd5b72b..bbfd5b72b 100644
--- a/pym/portage/package/ebuild/_spawn_nofetch.py
+++ b/lib/portage/package/ebuild/_spawn_nofetch.py
diff --git a/pym/portage/package/ebuild/config.py b/lib/portage/package/ebuild/config.py
index 059aa83ce..2eb766d0f 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -274,6 +274,7 @@ class config(object):
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
@@ -293,6 +294,7 @@ class config(object):
self.configlist = [
self.configdict['env.d'],
self.configdict['repo'],
+ self.configdict['features'],
self.configdict['pkginternal'],
self.configdict['globals'],
self.configdict['defaults'],
@@ -460,7 +462,7 @@ class config(object):
# back up our incremental variables:
self.configdict={}
self._use_expand_dict = {}
- # configlist will contain: [ env.d, globals, defaults, conf, pkg, backupenv, env ]
+ # configlist will contain: [ env.d, globals, features, defaults, conf, pkg, backupenv, env ]
self.configlist.append({})
self.configdict["env.d"] = self.configlist[-1]
@@ -468,6 +470,9 @@ class config(object):
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.
@@ -725,6 +730,10 @@ class config(object):
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(
@@ -863,7 +872,7 @@ class config(object):
# 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:repo:env.d"
+ 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:
@@ -1293,6 +1302,7 @@ class config(object):
del self._penv[:]
self.configdict["pkg"].clear()
self.configdict["pkginternal"].clear()
+ self.configdict["features"].clear()
self.configdict["repo"].clear()
self.configdict["defaults"]["USE"] = \
" ".join(self.make_defaults_use)
@@ -1453,6 +1463,7 @@ class config(object):
cp = cpv_getkey(mycpv)
cpv_slot = self.mycpv
pkginternaluse = ""
+ feature_use = []
iuse = ""
pkg_configdict = self.configdict["pkg"]
previous_iuse = pkg_configdict.get("IUSE")
@@ -1602,11 +1613,9 @@ class config(object):
bashrc_files = []
- for profile in self._locations_manager.profiles_complex:
- profile_bashrc = os.path.join(profile.location,
- 'profile.bashrc')
- if os.path.exists(profile_bashrc):
- bashrc_files.append(profile_bashrc)
+ 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:
@@ -1653,6 +1662,24 @@ class config(object):
if has_changed:
self.reset(keeping_pkg=1)
+ 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 "test" in explicit_iuse or iuse_implicit_match("test"):
+ if "test" in self.features:
+ feature_use.append("test")
+
+ feature_use = " ".join(feature_use)
+ if feature_use != self.configdict["features"].get("USE", ""):
+ self.configdict["features"]["USE"] = feature_use
+ # 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.
@@ -1680,11 +1707,8 @@ class config(object):
# package has different IUSE.
use = set(self["USE"].split())
unfiltered_use = frozenset(use)
- 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
portage_iuse = set(self._iuse_effective)
portage_iuse.update(explicit_iuse)
if built_use is not None:
@@ -1696,7 +1720,6 @@ class config(object):
self.configdict["pkg"]["IUSE_EFFECTIVE"] = \
" ".join(sorted(portage_iuse))
else:
- iuse_implicit_match = self._iuse_implicit_match
portage_iuse = self._get_implicit_iuse()
portage_iuse.update(explicit_iuse)
@@ -1732,21 +1755,17 @@ class config(object):
self.get("EBUILD_FORCE_TEST") == "1"
if "test" in explicit_iuse or iuse_implicit_match("test"):
- if "test" not in self.features:
- use.discard("test")
- elif restrict_test or \
+ 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")
- use.discard("test")
- else:
- use.add("test")
- if ebuild_force_test and "test" in self.usemask:
- self.usemask = \
- frozenset(x for x in self.usemask if x != "test")
if eapi_attrs.feature_flag_targetroot and \
("targetroot" in explicit_iuse or iuse_implicit_match("targetroot")):
@@ -1903,12 +1922,6 @@ class config(object):
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")
-
return iuse_implicit
def _getUseMask(self, pkg, stable=None):
diff --git a/pym/portage/package/ebuild/deprecated_profile_check.py b/lib/portage/package/ebuild/deprecated_profile_check.py
index fdb19b4ac..fdb19b4ac 100644
--- a/pym/portage/package/ebuild/deprecated_profile_check.py
+++ b/lib/portage/package/ebuild/deprecated_profile_check.py
diff --git a/pym/portage/package/ebuild/digestcheck.py b/lib/portage/package/ebuild/digestcheck.py
index 502950f31..502950f31 100644
--- a/pym/portage/package/ebuild/digestcheck.py
+++ b/lib/portage/package/ebuild/digestcheck.py
diff --git a/pym/portage/package/ebuild/digestgen.py b/lib/portage/package/ebuild/digestgen.py
index 6f3f877cd..6f3f877cd 100644
--- a/pym/portage/package/ebuild/digestgen.py
+++ b/lib/portage/package/ebuild/digestgen.py
diff --git a/pym/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py
index 7cfb3532b..8e13963ae 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -2605,7 +2605,7 @@ def _prepare_self_update(settings):
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, "pym")
+ 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),
diff --git a/pym/portage/package/ebuild/fetch.py b/lib/portage/package/ebuild/fetch.py
index 265d0c9fc..265d0c9fc 100644
--- a/pym/portage/package/ebuild/fetch.py
+++ b/lib/portage/package/ebuild/fetch.py
diff --git a/pym/portage/package/ebuild/getmaskingreason.py b/lib/portage/package/ebuild/getmaskingreason.py
index 1e4ed21ce..1e4ed21ce 100644
--- a/pym/portage/package/ebuild/getmaskingreason.py
+++ b/lib/portage/package/ebuild/getmaskingreason.py
diff --git a/pym/portage/package/ebuild/getmaskingstatus.py b/lib/portage/package/ebuild/getmaskingstatus.py
index 4b9e588f7..4b9e588f7 100644
--- a/pym/portage/package/ebuild/getmaskingstatus.py
+++ b/lib/portage/package/ebuild/getmaskingstatus.py
diff --git a/pym/portage/package/ebuild/prepare_build_dirs.py b/lib/portage/package/ebuild/prepare_build_dirs.py
index e53ccd0fb..e53ccd0fb 100644
--- a/pym/portage/package/ebuild/prepare_build_dirs.py
+++ b/lib/portage/package/ebuild/prepare_build_dirs.py
diff --git a/pym/portage/package/ebuild/profile_iuse.py b/lib/portage/package/ebuild/profile_iuse.py
index d3f201e54..d3f201e54 100644
--- a/pym/portage/package/ebuild/profile_iuse.py
+++ b/lib/portage/package/ebuild/profile_iuse.py
diff --git a/pym/portage/process.py b/lib/portage/process.py
index 5261741b8..5261741b8 100644
--- a/pym/portage/process.py
+++ b/lib/portage/process.py
diff --git a/pym/portage/progress.py b/lib/portage/progress.py
index e43c2afbd..e43c2afbd 100644
--- a/pym/portage/progress.py
+++ b/lib/portage/progress.py
diff --git a/pym/portage/proxy/__init__.py b/lib/portage/proxy/__init__.py
index f98c56457..f98c56457 100644
--- a/pym/portage/proxy/__init__.py
+++ b/lib/portage/proxy/__init__.py
diff --git a/pym/portage/proxy/lazyimport.py b/lib/portage/proxy/lazyimport.py
index d4258706d..d4258706d 100644
--- a/pym/portage/proxy/lazyimport.py
+++ b/lib/portage/proxy/lazyimport.py
diff --git a/pym/portage/proxy/objectproxy.py b/lib/portage/proxy/objectproxy.py
index a755774ae..a755774ae 100644
--- a/pym/portage/proxy/objectproxy.py
+++ b/lib/portage/proxy/objectproxy.py
diff --git a/pym/portage/repository/__init__.py b/lib/portage/repository/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/repository/__init__.py
+++ b/lib/portage/repository/__init__.py
diff --git a/pym/portage/repository/config.py b/lib/portage/repository/config.py
index 1d897bb90..f790f9392 100644
--- a/pym/portage/repository/config.py
+++ b/lib/portage/repository/config.py
@@ -86,6 +86,7 @@ class RepoConfig(object):
'sync_type', 'sync_umask', 'sync_uri', 'sync_user', 'thin_manifest',
'update_changelog', '_eapis_banned', '_eapis_deprecated',
'_masters_orig', 'module_specific_options', 'manifest_required_hashes',
+ 'sync_allow_hardlinks',
'sync_openpgp_key_path',
'sync_openpgp_key_refresh_retry_count',
'sync_openpgp_key_refresh_retry_delay_max',
@@ -178,16 +179,15 @@ class RepoConfig(object):
self.clone_depth = repo_opts.get('clone-depth')
self.sync_depth = repo_opts.get('sync-depth')
- if self.sync_depth is not None:
- warnings.warn(_("repos.conf: sync-depth is deprecated,"
- " use clone-depth instead"))
-
self.sync_hooks_only_on_change = repo_opts.get(
'sync-hooks-only-on-change', 'false').lower() == 'true'
self.strict_misc_digests = repo_opts.get(
'strict-misc-digests', 'true').lower() == 'true'
+ self.sync_allow_hardlinks = repo_opts.get(
+ 'sync-allow-hardlinks', 'true').lower() in ('true', 'yes')
+
self.sync_openpgp_key_path = repo_opts.get(
'sync-openpgp-key-path', None)
@@ -524,7 +524,8 @@ class RepoConfigLoader(object):
(base_priority == 0 and ov is portdir):
repo_opts = default_repo_opts.copy()
repo_opts['location'] = ov
- repo = RepoConfig(None, repo_opts, local_config=local_config)
+ name = prepos['DEFAULT'].main_repo if ov is portdir else None
+ repo = RepoConfig(name, repo_opts, local_config=local_config)
# repos_conf_opts contains options from repos.conf
repos_conf_opts = repos_conf.get(repo.name)
if repos_conf_opts is not None:
@@ -534,6 +535,7 @@ class RepoConfigLoader(object):
'clone_depth', 'eclass_overrides',
'force', 'masters', 'priority', 'strict_misc_digests',
'sync_depth', 'sync_hooks_only_on_change',
+ 'sync_allow_hardlinks',
'sync_openpgp_key_path',
'sync_openpgp_key_refresh_retry_count',
'sync_openpgp_key_refresh_retry_delay_max',
@@ -861,7 +863,7 @@ class RepoConfigLoader(object):
if repo._masters_orig is None and self.mainRepo() and \
repo.name != self.mainRepo().name and not portage._sync_mode:
- # TODO: Delete masters code in pym/portage/tests/resolver/ResolverPlayground.py when deleting this warning.
+ # TODO: Delete masters code in lib/portage/tests/resolver/ResolverPlayground.py when deleting this warning.
writemsg_level("!!! %s\n" % _("Repository '%s' is missing masters attribute in '%s'") %
(repo.name, os.path.join(repo.location, "metadata", "layout.conf")) +
"!!! %s\n" % _("Set 'masters = %s' in this file for future compatibility") %
@@ -960,7 +962,7 @@ class RepoConfigLoader(object):
return repo_name in self.prepos
def config_string(self):
- bool_keys = ("strict_misc_digests",)
+ bool_keys = ("strict_misc_digests", "sync_allow_hardlinks")
str_or_int_keys = ("auto_sync", "clone_depth", "format", "location",
"main_repo", "priority", "sync_depth", "sync_openpgp_key_path",
"sync_openpgp_key_refresh_retry_count",
diff --git a/pym/portage/sync/__init__.py b/lib/portage/sync/__init__.py
index 805b1f270..805b1f270 100644
--- a/pym/portage/sync/__init__.py
+++ b/lib/portage/sync/__init__.py
diff --git a/pym/portage/sync/config_checks.py b/lib/portage/sync/config_checks.py
index db316aa88..db316aa88 100644
--- a/pym/portage/sync/config_checks.py
+++ b/lib/portage/sync/config_checks.py
diff --git a/pym/portage/sync/controller.py b/lib/portage/sync/controller.py
index 3bccf6f74..3bccf6f74 100644
--- a/pym/portage/sync/controller.py
+++ b/lib/portage/sync/controller.py
diff --git a/pym/portage/sync/getaddrinfo_validate.py b/lib/portage/sync/getaddrinfo_validate.py
index 5e6009c74..5e6009c74 100644
--- a/pym/portage/sync/getaddrinfo_validate.py
+++ b/lib/portage/sync/getaddrinfo_validate.py
diff --git a/pym/portage/sync/modules/__init__.py b/lib/portage/sync/modules/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/sync/modules/__init__.py
+++ b/lib/portage/sync/modules/__init__.py
diff --git a/pym/portage/sync/modules/cvs/__init__.py b/lib/portage/sync/modules/cvs/__init__.py
index 8025a2907..8025a2907 100644
--- a/pym/portage/sync/modules/cvs/__init__.py
+++ b/lib/portage/sync/modules/cvs/__init__.py
diff --git a/pym/portage/sync/modules/cvs/cvs.py b/lib/portage/sync/modules/cvs/cvs.py
index e202560c3..e202560c3 100644
--- a/pym/portage/sync/modules/cvs/cvs.py
+++ b/lib/portage/sync/modules/cvs/cvs.py
diff --git a/pym/portage/sync/modules/git/__init__.py b/lib/portage/sync/modules/git/__init__.py
index 270d97186..270d97186 100644
--- a/pym/portage/sync/modules/git/__init__.py
+++ b/lib/portage/sync/modules/git/__init__.py
diff --git a/pym/portage/sync/modules/git/git.py b/lib/portage/sync/modules/git/git.py
index 160137a6d..e41af313e 100644
--- a/pym/portage/sync/modules/git/git.py
+++ b/lib/portage/sync/modules/git/git.py
@@ -8,6 +8,7 @@ import subprocess
import portage
from portage import os
from portage.util import writemsg_level, shlex_split
+from portage.util.futures import asyncio
from portage.output import create_color_func, EOutput
good = create_color_func("GOOD")
bad = create_color_func("BAD")
@@ -109,6 +110,7 @@ class GitSync(NewBase):
if not self.has_bin:
return (1, False)
git_cmd_opts = ""
+ quiet = self.settings.get("PORTAGE_QUIET") == "1"
if self.repo.module_specific_options.get('sync-git-env'):
shlexed_env = shlex_split(self.repo.module_specific_options['sync-git-env'])
env = dict((k, v) for k, _, v in (assignment.partition('=') for assignment in shlexed_env) if k)
@@ -123,7 +125,39 @@ class GitSync(NewBase):
git_cmd_opts += " --quiet"
if self.repo.module_specific_options.get('sync-git-pull-extra-opts'):
git_cmd_opts += " %s" % self.repo.module_specific_options['sync-git-pull-extra-opts']
- git_cmd = "%s pull%s" % (self.bin_command, git_cmd_opts)
+
+ try:
+ remote_branch = portage._unicode_decode(
+ subprocess.check_output([self.bin_command, 'rev-parse',
+ '--abbrev-ref', '--symbolic-full-name', '@{upstream}'],
+ cwd=portage._unicode_encode(self.repo.location))).rstrip('\n')
+ except subprocess.CalledProcessError as e:
+ msg = "!!! git rev-parse error in %s" % self.repo.location
+ self.logger(self.xterm_titles, msg)
+ writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
+ return (e.returncode, False)
+
+ shallow = self.repo.sync_depth is not None and self.repo.sync_depth != 0
+ if shallow:
+ git_cmd_opts += " --depth %d" % self.repo.sync_depth
+
+ # For shallow fetch, unreachable objects may need to be pruned
+ # manually, in order to prevent automatic git gc calls from
+ # eventually failing (see bug 599008).
+ gc_cmd = ['git', '-c', 'gc.autodetach=false', 'gc', '--auto']
+ if quiet:
+ gc_cmd.append('--quiet')
+ exitcode = subprocess.call(gc_cmd,
+ cwd=portage._unicode_encode(self.repo.location))
+ if exitcode != os.EX_OK:
+ msg = "!!! git gc error in %s" % self.repo.location
+ self.logger(self.xterm_titles, msg)
+ writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
+ return (exitcode, False)
+
+ git_cmd = "%s fetch %s%s" % (self.bin_command,
+ remote_branch.partition('/')[0], git_cmd_opts)
+
writemsg_level(git_cmd + "\n")
rev_cmd = [self.bin_command, "rev-list", "--max-count=1", "HEAD"]
@@ -133,20 +167,40 @@ class GitSync(NewBase):
exitcode = portage.process.spawn_bash("cd %s ; exec %s" % (
portage._shell_quote(self.repo.location), git_cmd),
**self.spawn_kwargs)
+
if exitcode != os.EX_OK:
- msg = "!!! git pull error in %s" % self.repo.location
+ msg = "!!! git fetch error in %s" % self.repo.location
self.logger(self.xterm_titles, msg)
writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
return (exitcode, False)
- if not self.verify_head():
+
+ if not self.verify_head(revision='refs/remotes/%s' % remote_branch):
return (1, False)
+ if shallow:
+ # Since the default merge strategy typically fails when
+ # the depth is not unlimited, `git reset --merge`.
+ merge_cmd = [self.bin_command, 'reset', '--merge']
+ else:
+ merge_cmd = [self.bin_command, 'merge']
+ merge_cmd.append('refs/remotes/%s' % remote_branch)
+ if quiet:
+ merge_cmd.append('--quiet')
+ exitcode = subprocess.call(merge_cmd,
+ cwd=portage._unicode_encode(self.repo.location))
+
+ if exitcode != os.EX_OK:
+ msg = "!!! git merge error in %s" % self.repo.location
+ self.logger(self.xterm_titles, msg)
+ writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
+ return (exitcode, False)
+
current_rev = subprocess.check_output(rev_cmd,
cwd=portage._unicode_encode(self.repo.location))
return (os.EX_OK, current_rev != previous_rev)
- def verify_head(self):
+ def verify_head(self, revision='-1'):
if (self.repo.module_specific_options.get(
'sync-git-verify-commit-signature', 'false') != 'true'):
return True
@@ -168,19 +222,17 @@ class GitSync(NewBase):
out.einfo('Using keys from %s' % (self.repo.sync_openpgp_key_path,))
with io.open(self.repo.sync_openpgp_key_path, 'rb') as f:
openpgp_env.import_key(f)
- out.ebegin('Refreshing keys from keyserver')
- openpgp_env.refresh_keys()
- out.eend(0)
- except GematoException as e:
+ self._refresh_keys(openpgp_env)
+ except (GematoException, asyncio.TimeoutError) as e:
writemsg_level("!!! Verification impossible due to keyring problem:\n%s\n"
% (e,),
level=logging.ERROR, noiselevel=-1)
- return (1, False)
+ return False
env = os.environ.copy()
env['GNUPGHOME'] = openpgp_env.home
- rev_cmd = [self.bin_command, "log", "--pretty=format:%G?", "-1"]
+ rev_cmd = [self.bin_command, "log", "-n1", "--pretty=format:%G?", revision]
try:
status = (portage._unicode_decode(
subprocess.check_output(rev_cmd,
diff --git a/pym/portage/sync/modules/rsync/__init__.py b/lib/portage/sync/modules/rsync/__init__.py
index cb80f6d66..cb80f6d66 100644
--- a/pym/portage/sync/modules/rsync/__init__.py
+++ b/lib/portage/sync/modules/rsync/__init__.py
diff --git a/pym/portage/sync/modules/rsync/rsync.py b/lib/portage/sync/modules/rsync/rsync.py
index 382a1eaae..56e38631e 100644
--- a/pym/portage/sync/modules/rsync/rsync.py
+++ b/lib/portage/sync/modules/rsync/rsync.py
@@ -7,10 +7,10 @@ import time
import signal
import socket
import datetime
-import functools
import io
import re
import random
+import subprocess
import tempfile
import portage
@@ -23,10 +23,8 @@ good = create_color_func("GOOD")
bad = create_color_func("BAD")
warn = create_color_func("WARN")
from portage.const import VCS_DIRS, TIMESTAMP_FORMAT, RSYNC_PACKAGE_ATOM
-from portage.util._eventloop.global_event_loop import global_event_loop
from portage.util import writemsg, writemsg_stdout
from portage.util.futures import asyncio
-from portage.util.futures.executor.fork import ForkExecutor
from portage.sync.getaddrinfo_validate import getaddrinfo_validate
from _emerge.UserQuery import UserQuery
from portage.sync.syncbase import NewBase
@@ -61,6 +59,54 @@ class RsyncSync(NewBase):
def __init__(self):
NewBase.__init__(self, "rsync", RSYNC_PACKAGE_ATOM)
+ def _select_download_dir(self):
+ '''
+ Select and return the download directory. It's desirable to be able
+ to create shared hardlinks between the download directory to the
+ normal repository, and this is facilitated by making the download
+ directory be a subdirectory of the normal repository location
+ (ensuring that no mountpoints are crossed). Shared hardlinks are
+ created by using the rsync --link-dest option.
+
+ Since the download is initially unverified, it is safest to save
+ it in a quarantine directory. The quarantine directory is also
+ useful for making the repository update more atomic, so that it
+ less likely that normal repository location will be observed in
+ a partially synced state.
+
+ This method returns a quarantine directory if sync-allow-hardlinks
+ is enabled in repos.conf, and otherwise it returne the normal
+ repository location.
+ '''
+ if self.repo.sync_allow_hardlinks:
+ return os.path.join(self.repo.location, '.tmp-unverified-download-quarantine')
+ else:
+ return self.repo.location
+
+ def _commit_download(self, download_dir):
+ '''
+ Commit changes from download_dir if it does not refer to the
+ normal repository location.
+ '''
+ exitcode = 0
+ if self.repo.location != download_dir:
+ rsynccommand = [self.bin_command] + self.rsync_opts + self.extra_rsync_opts
+ rsynccommand.append('--exclude=/%s' % os.path.basename(download_dir))
+ rsynccommand.append('%s/' % download_dir.rstrip('/'))
+ rsynccommand.append('%s/' % self.repo.location)
+ exitcode = portage.process.spawn(rsynccommand, **self.spawn_kwargs)
+
+ return exitcode
+
+ def _remove_download(self, download_dir):
+ """
+ Remove download_dir if it does not refer to the normal repository
+ location.
+ """
+ exitcode = 0
+ if self.repo.location != download_dir:
+ exitcode = subprocess.call(['rm', '-rf', download_dir])
+ return exitcode
def update(self):
'''Internal update function which performs the transfer'''
@@ -97,6 +143,9 @@ class RsyncSync(NewBase):
self.extra_rsync_opts.extend(portage.util.shlex_split(
self.repo.module_specific_options['sync-rsync-extra-opts']))
+ download_dir = self._select_download_dir()
+ exitcode = 0
+
# Process GLEP74 verification options.
# Default verification to 'no'; it's enabled for ::gentoo
# via default repos.conf though.
@@ -149,39 +198,11 @@ class RsyncSync(NewBase):
# will not be performed and the user will have to fix it and try again,
# so we may as well bail out before actual rsync happens.
if openpgp_env is not None and self.repo.sync_openpgp_key_path is not None:
-
try:
out.einfo('Using keys from %s' % (self.repo.sync_openpgp_key_path,))
with io.open(self.repo.sync_openpgp_key_path, 'rb') as f:
openpgp_env.import_key(f)
- out.ebegin('Refreshing keys from keyserver')
- retry_decorator = self._key_refresh_retry_decorator()
- if retry_decorator is None:
- openpgp_env.refresh_keys()
- else:
- def noisy_refresh_keys():
- """
- Since retry does not help for some types of
- errors, display errors as soon as they occur.
- """
- try:
- openpgp_env.refresh_keys()
- except Exception as e:
- writemsg_level("%s\n" % (e,),
- level=logging.ERROR, noiselevel=-1)
- raise # retry
-
- # The ThreadPoolExecutor that asyncio uses by default
- # does not support cancellation of tasks, therefore
- # use ForkExecutor for task cancellation support, in
- # order to enforce timeouts.
- loop = global_event_loop()
- with ForkExecutor(loop=loop) as executor:
- func_coroutine = functools.partial(loop.run_in_executor,
- executor, noisy_refresh_keys)
- decorated_func = retry_decorator(func_coroutine, loop=loop)
- loop.run_until_complete(decorated_func())
- out.eend(0)
+ self._refresh_keys(openpgp_env)
except (GematoException, asyncio.TimeoutError) as e:
writemsg_level("!!! Manifest verification impossible due to keyring problem:\n%s\n"
% (e,),
@@ -219,8 +240,10 @@ class RsyncSync(NewBase):
self.proto = "file"
dosyncuri = syncuri[7:]
unchanged, is_synced, exitcode, updatecache_flg = self._do_rsync(
- dosyncuri, timestamp, opts)
+ dosyncuri, timestamp, opts, download_dir)
self._process_exitcode(exitcode, dosyncuri, out, 1)
+ if exitcode == 0 and not unchanged:
+ self._commit_download(download_dir)
return (exitcode, updatecache_flg)
retries=0
@@ -352,7 +375,7 @@ class RsyncSync(NewBase):
dosyncuri = dosyncuri[6:].replace('/', ':/', 1)
unchanged, is_synced, exitcode, updatecache_flg = self._do_rsync(
- dosyncuri, timestamp, opts)
+ dosyncuri, timestamp, opts, download_dir)
if not unchanged:
local_state_unchanged = False
if is_synced:
@@ -369,6 +392,12 @@ class RsyncSync(NewBase):
break
self._process_exitcode(exitcode, dosyncuri, out, maxretries)
+ if local_state_unchanged:
+ # The quarantine download_dir is not intended to exist
+ # in this case, so refer gemato to the normal repository
+ # location.
+ download_dir = self.repo.location
+
# if synced successfully, verify now
if exitcode == 0 and self.verify_metamanifest:
if gemato is None:
@@ -380,7 +409,7 @@ class RsyncSync(NewBase):
# we always verify the Manifest signature, in case
# we had to deal with key revocation case
m = gemato.recursiveloader.ManifestRecursiveLoader(
- os.path.join(self.repo.location, 'Manifest'),
+ os.path.join(download_dir, 'Manifest'),
verify_openpgp=True,
openpgp_env=openpgp_env,
max_jobs=self.verify_jobs)
@@ -411,7 +440,7 @@ class RsyncSync(NewBase):
# if nothing has changed, skip the actual Manifest
# verification
if not local_state_unchanged:
- out.ebegin('Verifying %s' % (self.repo.location,))
+ out.ebegin('Verifying %s' % (download_dir,))
m.assert_directory_verifies()
out.eend(0)
except GematoException as e:
@@ -420,12 +449,16 @@ class RsyncSync(NewBase):
level=logging.ERROR, noiselevel=-1)
exitcode = 1
+ if exitcode == 0 and not local_state_unchanged:
+ exitcode = self._commit_download(download_dir)
+
return (exitcode, updatecache_flg)
finally:
+ if exitcode == 0:
+ self._remove_download(download_dir)
if openpgp_env is not None:
openpgp_env.close()
-
def _process_exitcode(self, exitcode, syncuri, out, maxretries):
if (exitcode==0):
pass
@@ -561,7 +594,7 @@ class RsyncSync(NewBase):
return rsync_opts
- def _do_rsync(self, syncuri, timestamp, opts):
+ def _do_rsync(self, syncuri, timestamp, opts, download_dir):
updatecache_flg = False
is_synced = False
if timestamp != 0 and "--quiet" not in opts:
@@ -686,6 +719,12 @@ class RsyncSync(NewBase):
elif (servertimestamp == 0) or (servertimestamp > timestamp):
# actual sync
command = rsynccommand[:]
+
+ if self.repo.location != download_dir:
+ # Use shared hardlinks for files that are identical
+ # in the previous snapshot of the repository.
+ command.append('--link-dest=%s' % self.repo.location)
+
submodule_paths = self._get_submodule_paths()
if submodule_paths:
# The only way to select multiple directories to
@@ -696,9 +735,10 @@ class RsyncSync(NewBase):
# /./ is special syntax supported with the
# rsync --relative option.
command.append(syncuri + "/./" + path)
- command.append(self.repo.location)
else:
- command.extend([syncuri + "/", self.repo.location])
+ command.append(syncuri + "/")
+
+ command.append(download_dir)
exitcode = None
try:
diff --git a/pym/portage/sync/modules/svn/__init__.py b/lib/portage/sync/modules/svn/__init__.py
index c7ae3b87c..c7ae3b87c 100644
--- a/pym/portage/sync/modules/svn/__init__.py
+++ b/lib/portage/sync/modules/svn/__init__.py
diff --git a/pym/portage/sync/modules/svn/svn.py b/lib/portage/sync/modules/svn/svn.py
index 723beedcb..723beedcb 100644
--- a/pym/portage/sync/modules/svn/svn.py
+++ b/lib/portage/sync/modules/svn/svn.py
diff --git a/pym/portage/sync/modules/webrsync/__init__.py b/lib/portage/sync/modules/webrsync/__init__.py
index dc7def20c..a413553a1 100644
--- a/pym/portage/sync/modules/webrsync/__init__.py
+++ b/lib/portage/sync/modules/webrsync/__init__.py
@@ -45,7 +45,11 @@ module_spec = {
'exists and is a valid repository',
},
'validate_config': CheckSyncConfig,
- 'module_specific_options': (),
+ 'module_specific_options': (
+ 'sync-webrsync-delta',
+ 'sync-webrsync-keep-snapshots',
+ 'sync-webrsync-verify-signature',
+ ),
},
}
}
diff --git a/lib/portage/sync/modules/webrsync/webrsync.py b/lib/portage/sync/modules/webrsync/webrsync.py
new file mode 100644
index 000000000..609ba0be2
--- /dev/null
+++ b/lib/portage/sync/modules/webrsync/webrsync.py
@@ -0,0 +1,136 @@
+
+'''WebRsync module for portage'''
+
+import io
+import logging
+
+import portage
+from portage import os
+from portage.util import writemsg_level
+from portage.util.futures import asyncio
+from portage.output import create_color_func
+good = create_color_func("GOOD")
+bad = create_color_func("BAD")
+warn = create_color_func("WARN")
+from portage.sync.syncbase import SyncBase
+
+try:
+ from gemato.exceptions import GematoException
+ import gemato.openpgp
+except ImportError:
+ gemato = None
+
+
+class WebRsync(SyncBase):
+ '''WebRSync sync class'''
+
+ short_desc = "Perform sync operations on webrsync based repositories"
+
+ @staticmethod
+ def name():
+ return "WebRSync"
+
+
+ def __init__(self):
+ SyncBase.__init__(self, 'emerge-webrsync', '>=sys-apps/portage-2.3')
+
+ @property
+ def has_bin(self):
+ if (self._bin_command != 'emerge-delta-webrsync' and
+ self.repo.module_specific_options.get(
+ 'sync-webrsync-delta', 'false').lower() in ('true', 'yes')):
+ self._bin_command = 'emerge-delta-webrsync'
+ self.bin_command = portage.process.find_binary(self._bin_command)
+ self.bin_pkg = '>=app-portage/emerge-delta-webrsync-3.7.5'
+
+ return super(WebRsync, self).has_bin
+
+ def sync(self, **kwargs):
+ '''Sync the repository'''
+ if kwargs:
+ self._kwargs(kwargs)
+
+ if not self.has_bin:
+ return (1, False)
+
+ # filter these out to prevent gpg errors
+ for var in ['uid', 'gid', 'groups']:
+ self.spawn_kwargs.pop(var, None)
+
+ verbose = '--verbose' in self.options['emerge_config'].opts
+ quiet = '--quiet' in self.options['emerge_config'].opts
+ openpgp_env = None
+ try:
+ if self.repo.module_specific_options.get(
+ 'sync-webrsync-verify-signature', 'false').lower() in ('true', 'yes'):
+
+ if not self.repo.sync_openpgp_key_path:
+ writemsg_level("!!! sync-openpgp-key-path is not set\n",
+ level=logging.ERROR, noiselevel=-1)
+ return (1, False)
+
+ if not os.path.isfile(self.repo.sync_openpgp_key_path):
+ writemsg_level("!!! sync-openpgp-key-path file not found: %s\n" %
+ self.repo.sync_openpgp_key_path, level=logging.ERROR, noiselevel=-1)
+ return (1, False)
+
+ if gemato is None:
+ writemsg_level("!!! Verifying against specified key requires gemato-11.0+ installed\n",
+ level=logging.ERROR, noiselevel=-1)
+ return (1, False)
+
+ openpgp_env = gemato.openpgp.OpenPGPEnvironment()
+
+ out = portage.output.EOutput(quiet=quiet)
+ try:
+ out.einfo('Using keys from %s' % (self.repo.sync_openpgp_key_path,))
+ with io.open(self.repo.sync_openpgp_key_path, 'rb') as f:
+ openpgp_env.import_key(f)
+ self._refresh_keys(openpgp_env)
+ self.spawn_kwargs["env"]["PORTAGE_GPG_DIR"] = openpgp_env.home
+ except (GematoException, asyncio.TimeoutError) as e:
+ writemsg_level("!!! Verification impossible due to keyring problem:\n%s\n"
+ % (e,),
+ level=logging.ERROR, noiselevel=-1)
+ return (1, False)
+
+ webrsync_cmd = [self.bin_command]
+ if verbose:
+ webrsync_cmd.append('-v')
+ elif quiet:
+ webrsync_cmd.append('-q')
+
+ if self.repo.module_specific_options.get(
+ 'sync-webrsync-keep-snapshots', 'false').lower() in ('true', 'yes'):
+ webrsync_cmd.append('-k')
+
+ exitcode = portage.process.spawn(webrsync_cmd, **self.spawn_kwargs)
+ if exitcode != os.EX_OK:
+ msg = "!!! emerge-webrsync error in %s" % self.repo.location
+ self.logger(self.xterm_titles, msg)
+ writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
+ return (exitcode, False)
+ return (exitcode, True)
+ finally:
+ if openpgp_env is not None:
+ openpgp_env.close()
+
+
+class PyWebRsync(SyncBase):
+ '''WebRSync sync class'''
+
+ short_desc = "Perform sync operations on webrsync based repositories"
+
+ @staticmethod
+ def name():
+ return "WebRSync"
+
+
+ def __init__(self):
+ SyncBase.__init__(self, None, '>=sys-apps/portage-2.3')
+
+
+ def sync(self, **kwargs):
+ '''Sync the repository'''
+ pass
+
diff --git a/pym/portage/sync/old_tree_timestamp.py b/lib/portage/sync/old_tree_timestamp.py
index aaed18b56..aaed18b56 100644
--- a/pym/portage/sync/old_tree_timestamp.py
+++ b/lib/portage/sync/old_tree_timestamp.py
diff --git a/pym/portage/sync/syncbase.py b/lib/portage/sync/syncbase.py
index 7d4d33272..ce69a4fc0 100644
--- a/pym/portage/sync/syncbase.py
+++ b/lib/portage/sync/syncbase.py
@@ -7,13 +7,16 @@ This class contains common initialization code and functions.
'''
from __future__ import unicode_literals
+import functools
import logging
import os
import portage
from portage.util import writemsg_level
+from portage.util._eventloop.global_event_loop import global_event_loop
from portage.util.backoff import RandomExponentialBackoff
from portage.util.futures.retry import retry
+from portage.util.futures.executor.fork import ForkExecutor
from . import _SUBMODULE_PATH_MAP
class SyncBase(object):
@@ -189,6 +192,44 @@ class SyncBase(object):
multiplier=(1 if retry_delay_mult is None else retry_delay_mult),
base=(2 if retry_delay_exp_base is None else retry_delay_exp_base)))
+ def _refresh_keys(self, openpgp_env):
+ """
+ Refresh keys stored in openpgp_env. Raises gemato.exceptions.GematoException
+ or asyncio.TimeoutError on failure.
+
+ @param openpgp_env: openpgp environment
+ @type openpgp_env: gemato.openpgp.OpenPGPEnvironment
+ """
+ out = portage.output.EOutput(quiet=('--quiet' in self.options['emerge_config'].opts))
+ out.ebegin('Refreshing keys from keyserver')
+ retry_decorator = self._key_refresh_retry_decorator()
+ if retry_decorator is None:
+ openpgp_env.refresh_keys()
+ else:
+ def noisy_refresh_keys():
+ """
+ Since retry does not help for some types of
+ errors, display errors as soon as they occur.
+ """
+ try:
+ openpgp_env.refresh_keys()
+ except Exception as e:
+ writemsg_level("%s\n" % (e,),
+ level=logging.ERROR, noiselevel=-1)
+ raise # retry
+
+ # The ThreadPoolExecutor that asyncio uses by default
+ # does not support cancellation of tasks, therefore
+ # use ForkExecutor for task cancellation support, in
+ # order to enforce timeouts.
+ loop = global_event_loop()
+ with ForkExecutor(loop=loop) as executor:
+ func_coroutine = functools.partial(loop.run_in_executor,
+ executor, noisy_refresh_keys)
+ decorated_func = retry_decorator(func_coroutine, loop=loop)
+ loop.run_until_complete(decorated_func())
+ out.eend(0)
+
class NewBase(SyncBase):
'''Subclasses Syncbase adding a new() and runs it
diff --git a/pym/portage/tests/__init__.py b/lib/portage/tests/__init__.py
index e149b5c0c..e149b5c0c 100644
--- a/pym/portage/tests/__init__.py
+++ b/lib/portage/tests/__init__.py
diff --git a/pym/portage/tests/bin/__init__.py b/lib/portage/tests/bin/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/bin/__init__.py
+++ b/lib/portage/tests/bin/__init__.py
diff --git a/pym/portage/tests/bin/__test__.py b/lib/portage/tests/bin/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/bin/__test__.py
+++ b/lib/portage/tests/bin/__test__.py
diff --git a/pym/portage/tests/bin/setup_env.py b/lib/portage/tests/bin/setup_env.py
index 9cc26df08..9cc26df08 100644
--- a/pym/portage/tests/bin/setup_env.py
+++ b/lib/portage/tests/bin/setup_env.py
diff --git a/pym/portage/tests/bin/test_dobin.py b/lib/portage/tests/bin/test_dobin.py
index 6f50d7aba..6f50d7aba 100644
--- a/pym/portage/tests/bin/test_dobin.py
+++ b/lib/portage/tests/bin/test_dobin.py
diff --git a/pym/portage/tests/bin/test_dodir.py b/lib/portage/tests/bin/test_dodir.py
index 5d4018161..5d4018161 100644
--- a/pym/portage/tests/bin/test_dodir.py
+++ b/lib/portage/tests/bin/test_dodir.py
diff --git a/pym/portage/tests/bin/test_doins.py b/lib/portage/tests/bin/test_doins.py
index e3d5153b3..e3d5153b3 100644
--- a/pym/portage/tests/bin/test_doins.py
+++ b/lib/portage/tests/bin/test_doins.py
diff --git a/pym/portage/tests/bin/test_eapi7_ver_funcs.py b/lib/portage/tests/bin/test_eapi7_ver_funcs.py
index 408975298..408975298 100644
--- a/pym/portage/tests/bin/test_eapi7_ver_funcs.py
+++ b/lib/portage/tests/bin/test_eapi7_ver_funcs.py
diff --git a/pym/portage/tests/bin/test_filter_bash_env.py b/lib/portage/tests/bin/test_filter_bash_env.py
index d906ea793..d906ea793 100644
--- a/pym/portage/tests/bin/test_filter_bash_env.py
+++ b/lib/portage/tests/bin/test_filter_bash_env.py
diff --git a/pym/portage/tests/dbapi/__init__.py b/lib/portage/tests/dbapi/__init__.py
index 532918b6a..532918b6a 100644
--- a/pym/portage/tests/dbapi/__init__.py
+++ b/lib/portage/tests/dbapi/__init__.py
diff --git a/pym/portage/tests/dbapi/__test__.py b/lib/portage/tests/dbapi/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/dbapi/__test__.py
+++ b/lib/portage/tests/dbapi/__test__.py
diff --git a/pym/portage/tests/dbapi/test_fakedbapi.py b/lib/portage/tests/dbapi/test_fakedbapi.py
index 19ea9cd00..19ea9cd00 100644
--- a/pym/portage/tests/dbapi/test_fakedbapi.py
+++ b/lib/portage/tests/dbapi/test_fakedbapi.py
diff --git a/pym/portage/tests/dbapi/test_portdb_cache.py b/lib/portage/tests/dbapi/test_portdb_cache.py
index d3101b120..d3101b120 100644
--- a/pym/portage/tests/dbapi/test_portdb_cache.py
+++ b/lib/portage/tests/dbapi/test_portdb_cache.py
diff --git a/pym/portage/tests/dep/__init__.py b/lib/portage/tests/dep/__init__.py
index 9c3f52476..9c3f52476 100644
--- a/pym/portage/tests/dep/__init__.py
+++ b/lib/portage/tests/dep/__init__.py
diff --git a/pym/portage/tests/dep/__test__.py b/lib/portage/tests/dep/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/dep/__test__.py
+++ b/lib/portage/tests/dep/__test__.py
diff --git a/pym/portage/tests/dep/testAtom.py b/lib/portage/tests/dep/testAtom.py
index da58be27c..da58be27c 100644
--- a/pym/portage/tests/dep/testAtom.py
+++ b/lib/portage/tests/dep/testAtom.py
diff --git a/pym/portage/tests/dep/testCheckRequiredUse.py b/lib/portage/tests/dep/testCheckRequiredUse.py
index c4128c29a..c4128c29a 100644
--- a/pym/portage/tests/dep/testCheckRequiredUse.py
+++ b/lib/portage/tests/dep/testCheckRequiredUse.py
diff --git a/pym/portage/tests/dep/testExtendedAtomDict.py b/lib/portage/tests/dep/testExtendedAtomDict.py
index 69d092e38..69d092e38 100644
--- a/pym/portage/tests/dep/testExtendedAtomDict.py
+++ b/lib/portage/tests/dep/testExtendedAtomDict.py
diff --git a/pym/portage/tests/dep/testExtractAffectingUSE.py b/lib/portage/tests/dep/testExtractAffectingUSE.py
index 026a55274..026a55274 100644
--- a/pym/portage/tests/dep/testExtractAffectingUSE.py
+++ b/lib/portage/tests/dep/testExtractAffectingUSE.py
diff --git a/pym/portage/tests/dep/testStandalone.py b/lib/portage/tests/dep/testStandalone.py
index 88e3f39f8..88e3f39f8 100644
--- a/pym/portage/tests/dep/testStandalone.py
+++ b/lib/portage/tests/dep/testStandalone.py
diff --git a/pym/portage/tests/dep/test_best_match_to_list.py b/lib/portage/tests/dep/test_best_match_to_list.py
index 586c8bc50..586c8bc50 100644
--- a/pym/portage/tests/dep/test_best_match_to_list.py
+++ b/lib/portage/tests/dep/test_best_match_to_list.py
diff --git a/pym/portage/tests/dep/test_dep_getcpv.py b/lib/portage/tests/dep/test_dep_getcpv.py
index 79c1514a1..79c1514a1 100644
--- a/pym/portage/tests/dep/test_dep_getcpv.py
+++ b/lib/portage/tests/dep/test_dep_getcpv.py
diff --git a/pym/portage/tests/dep/test_dep_getrepo.py b/lib/portage/tests/dep/test_dep_getrepo.py
index 6c17d3cf7..6c17d3cf7 100644
--- a/pym/portage/tests/dep/test_dep_getrepo.py
+++ b/lib/portage/tests/dep/test_dep_getrepo.py
diff --git a/pym/portage/tests/dep/test_dep_getslot.py b/lib/portage/tests/dep/test_dep_getslot.py
index 84828648b..84828648b 100644
--- a/pym/portage/tests/dep/test_dep_getslot.py
+++ b/lib/portage/tests/dep/test_dep_getslot.py
diff --git a/pym/portage/tests/dep/test_dep_getusedeps.py b/lib/portage/tests/dep/test_dep_getusedeps.py
index cd58eab35..cd58eab35 100644
--- a/pym/portage/tests/dep/test_dep_getusedeps.py
+++ b/lib/portage/tests/dep/test_dep_getusedeps.py
diff --git a/pym/portage/tests/dep/test_dnf_convert.py b/lib/portage/tests/dep/test_dnf_convert.py
index b92778d4a..b92778d4a 100644
--- a/pym/portage/tests/dep/test_dnf_convert.py
+++ b/lib/portage/tests/dep/test_dnf_convert.py
diff --git a/pym/portage/tests/dep/test_get_operator.py b/lib/portage/tests/dep/test_get_operator.py
index 5076e2107..5076e2107 100644
--- a/pym/portage/tests/dep/test_get_operator.py
+++ b/lib/portage/tests/dep/test_get_operator.py
diff --git a/pym/portage/tests/dep/test_get_required_use_flags.py b/lib/portage/tests/dep/test_get_required_use_flags.py
index 90e096c78..90e096c78 100644
--- a/pym/portage/tests/dep/test_get_required_use_flags.py
+++ b/lib/portage/tests/dep/test_get_required_use_flags.py
diff --git a/pym/portage/tests/dep/test_isjustname.py b/lib/portage/tests/dep/test_isjustname.py
index 9b95bcd0f..9b95bcd0f 100644
--- a/pym/portage/tests/dep/test_isjustname.py
+++ b/lib/portage/tests/dep/test_isjustname.py
diff --git a/pym/portage/tests/dep/test_isvalidatom.py b/lib/portage/tests/dep/test_isvalidatom.py
index 9d3367aab..9d3367aab 100644
--- a/pym/portage/tests/dep/test_isvalidatom.py
+++ b/lib/portage/tests/dep/test_isvalidatom.py
diff --git a/pym/portage/tests/dep/test_match_from_list.py b/lib/portage/tests/dep/test_match_from_list.py
index 3080479c2..3080479c2 100644
--- a/pym/portage/tests/dep/test_match_from_list.py
+++ b/lib/portage/tests/dep/test_match_from_list.py
diff --git a/pym/portage/tests/dep/test_overlap_dnf.py b/lib/portage/tests/dep/test_overlap_dnf.py
index ee48e5556..ee48e5556 100644
--- a/pym/portage/tests/dep/test_overlap_dnf.py
+++ b/lib/portage/tests/dep/test_overlap_dnf.py
diff --git a/pym/portage/tests/dep/test_paren_reduce.py b/lib/portage/tests/dep/test_paren_reduce.py
index 324465289..324465289 100644
--- a/pym/portage/tests/dep/test_paren_reduce.py
+++ b/lib/portage/tests/dep/test_paren_reduce.py
diff --git a/pym/portage/tests/dep/test_use_reduce.py b/lib/portage/tests/dep/test_use_reduce.py
index 4f65567cf..4f65567cf 100644
--- a/pym/portage/tests/dep/test_use_reduce.py
+++ b/lib/portage/tests/dep/test_use_reduce.py
diff --git a/pym/portage/tests/ebuild/__init__.py b/lib/portage/tests/ebuild/__init__.py
index e2d487ecb..e2d487ecb 100644
--- a/pym/portage/tests/ebuild/__init__.py
+++ b/lib/portage/tests/ebuild/__init__.py
diff --git a/pym/portage/tests/ebuild/__test__.py b/lib/portage/tests/ebuild/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/ebuild/__test__.py
+++ b/lib/portage/tests/ebuild/__test__.py
diff --git a/pym/portage/tests/ebuild/test_array_fromfile_eof.py b/lib/portage/tests/ebuild/test_array_fromfile_eof.py
index 1f2a1ab7b..1f2a1ab7b 100644
--- a/pym/portage/tests/ebuild/test_array_fromfile_eof.py
+++ b/lib/portage/tests/ebuild/test_array_fromfile_eof.py
diff --git a/pym/portage/tests/ebuild/test_config.py b/lib/portage/tests/ebuild/test_config.py
index dcb5ffe0d..dcb5ffe0d 100644
--- a/pym/portage/tests/ebuild/test_config.py
+++ b/lib/portage/tests/ebuild/test_config.py
diff --git a/pym/portage/tests/ebuild/test_doebuild_fd_pipes.py b/lib/portage/tests/ebuild/test_doebuild_fd_pipes.py
index b89421822..b89421822 100644
--- a/pym/portage/tests/ebuild/test_doebuild_fd_pipes.py
+++ b/lib/portage/tests/ebuild/test_doebuild_fd_pipes.py
diff --git a/pym/portage/tests/ebuild/test_doebuild_spawn.py b/lib/portage/tests/ebuild/test_doebuild_spawn.py
index 6b344658f..6b344658f 100644
--- a/pym/portage/tests/ebuild/test_doebuild_spawn.py
+++ b/lib/portage/tests/ebuild/test_doebuild_spawn.py
diff --git a/pym/portage/tests/ebuild/test_ipc_daemon.py b/lib/portage/tests/ebuild/test_ipc_daemon.py
index e6da51a76..e6da51a76 100644
--- a/pym/portage/tests/ebuild/test_ipc_daemon.py
+++ b/lib/portage/tests/ebuild/test_ipc_daemon.py
diff --git a/pym/portage/tests/ebuild/test_spawn.py b/lib/portage/tests/ebuild/test_spawn.py
index a38e10972..a38e10972 100644
--- a/pym/portage/tests/ebuild/test_spawn.py
+++ b/lib/portage/tests/ebuild/test_spawn.py
diff --git a/pym/portage/tests/ebuild/test_use_expand_incremental.py b/lib/portage/tests/ebuild/test_use_expand_incremental.py
index a58f08cb9..a58f08cb9 100644
--- a/pym/portage/tests/ebuild/test_use_expand_incremental.py
+++ b/lib/portage/tests/ebuild/test_use_expand_incremental.py
diff --git a/pym/portage/tests/emerge/__init__.py b/lib/portage/tests/emerge/__init__.py
index 532918b6a..532918b6a 100644
--- a/pym/portage/tests/emerge/__init__.py
+++ b/lib/portage/tests/emerge/__init__.py
diff --git a/pym/portage/tests/emerge/__test__.py b/lib/portage/tests/emerge/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/emerge/__test__.py
+++ b/lib/portage/tests/emerge/__test__.py
diff --git a/pym/portage/tests/emerge/test_config_protect.py b/lib/portage/tests/emerge/test_config_protect.py
index 06ab059ee..06ab059ee 100644
--- a/pym/portage/tests/emerge/test_config_protect.py
+++ b/lib/portage/tests/emerge/test_config_protect.py
diff --git a/pym/portage/tests/emerge/test_emerge_blocker_file_collision.py b/lib/portage/tests/emerge/test_emerge_blocker_file_collision.py
index 10d09d843..10d09d843 100644
--- a/pym/portage/tests/emerge/test_emerge_blocker_file_collision.py
+++ b/lib/portage/tests/emerge/test_emerge_blocker_file_collision.py
diff --git a/pym/portage/tests/emerge/test_emerge_slot_abi.py b/lib/portage/tests/emerge/test_emerge_slot_abi.py
index 200699396..200699396 100644
--- a/pym/portage/tests/emerge/test_emerge_slot_abi.py
+++ b/lib/portage/tests/emerge/test_emerge_slot_abi.py
diff --git a/pym/portage/tests/emerge/test_global_updates.py b/lib/portage/tests/emerge/test_global_updates.py
index eb5431059..eb5431059 100644
--- a/pym/portage/tests/emerge/test_global_updates.py
+++ b/lib/portage/tests/emerge/test_global_updates.py
diff --git a/pym/portage/tests/emerge/test_simple.py b/lib/portage/tests/emerge/test_simple.py
index b1402ddd5..b1402ddd5 100644
--- a/pym/portage/tests/emerge/test_simple.py
+++ b/lib/portage/tests/emerge/test_simple.py
diff --git a/pym/portage/tests/env/__init__.py b/lib/portage/tests/env/__init__.py
index cbeabe5c6..cbeabe5c6 100644
--- a/pym/portage/tests/env/__init__.py
+++ b/lib/portage/tests/env/__init__.py
diff --git a/pym/portage/tests/env/__test__.py b/lib/portage/tests/env/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/env/__test__.py
+++ b/lib/portage/tests/env/__test__.py
diff --git a/pym/portage/tests/env/config/__init__.py b/lib/portage/tests/env/config/__init__.py
index ef5cc43b6..ef5cc43b6 100644
--- a/pym/portage/tests/env/config/__init__.py
+++ b/lib/portage/tests/env/config/__init__.py
diff --git a/pym/portage/tests/env/config/__test__.py b/lib/portage/tests/env/config/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/env/config/__test__.py
+++ b/lib/portage/tests/env/config/__test__.py
diff --git a/pym/portage/tests/env/config/test_PackageKeywordsFile.py b/lib/portage/tests/env/config/test_PackageKeywordsFile.py
index 609c0fda2..609c0fda2 100644
--- a/pym/portage/tests/env/config/test_PackageKeywordsFile.py
+++ b/lib/portage/tests/env/config/test_PackageKeywordsFile.py
diff --git a/pym/portage/tests/env/config/test_PackageMaskFile.py b/lib/portage/tests/env/config/test_PackageMaskFile.py
index 0c5b30f53..0c5b30f53 100644
--- a/pym/portage/tests/env/config/test_PackageMaskFile.py
+++ b/lib/portage/tests/env/config/test_PackageMaskFile.py
diff --git a/pym/portage/tests/env/config/test_PackageUseFile.py b/lib/portage/tests/env/config/test_PackageUseFile.py
index b1a6ccbde..b1a6ccbde 100644
--- a/pym/portage/tests/env/config/test_PackageUseFile.py
+++ b/lib/portage/tests/env/config/test_PackageUseFile.py
diff --git a/pym/portage/tests/env/config/test_PortageModulesFile.py b/lib/portage/tests/env/config/test_PortageModulesFile.py
index 05584a5f8..05584a5f8 100644
--- a/pym/portage/tests/env/config/test_PortageModulesFile.py
+++ b/lib/portage/tests/env/config/test_PortageModulesFile.py
diff --git a/pym/portage/tests/glsa/__init__.py b/lib/portage/tests/glsa/__init__.py
index 6cde9320b..6cde9320b 100644
--- a/pym/portage/tests/glsa/__init__.py
+++ b/lib/portage/tests/glsa/__init__.py
diff --git a/pym/portage/tests/glsa/__test__.py b/lib/portage/tests/glsa/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/glsa/__test__.py
+++ b/lib/portage/tests/glsa/__test__.py
diff --git a/pym/portage/tests/glsa/test_security_set.py b/lib/portage/tests/glsa/test_security_set.py
index e73deaba9..e73deaba9 100644
--- a/pym/portage/tests/glsa/test_security_set.py
+++ b/lib/portage/tests/glsa/test_security_set.py
diff --git a/pym/portage/tests/lafilefixer/__init__.py b/lib/portage/tests/lafilefixer/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/lafilefixer/__init__.py
+++ b/lib/portage/tests/lafilefixer/__init__.py
diff --git a/pym/portage/tests/lafilefixer/__test__.py b/lib/portage/tests/lafilefixer/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/lafilefixer/__test__.py
+++ b/lib/portage/tests/lafilefixer/__test__.py
diff --git a/pym/portage/tests/lafilefixer/test_lafilefixer.py b/lib/portage/tests/lafilefixer/test_lafilefixer.py
index 0bcffaada..0bcffaada 100644
--- a/pym/portage/tests/lafilefixer/test_lafilefixer.py
+++ b/lib/portage/tests/lafilefixer/test_lafilefixer.py
diff --git a/pym/portage/tests/lazyimport/__init__.py b/lib/portage/tests/lazyimport/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/lazyimport/__init__.py
+++ b/lib/portage/tests/lazyimport/__init__.py
diff --git a/pym/portage/tests/lazyimport/__test__.py b/lib/portage/tests/lazyimport/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/lazyimport/__test__.py
+++ b/lib/portage/tests/lazyimport/__test__.py
diff --git a/pym/portage/tests/lazyimport/test_lazy_import_portage_baseline.py b/lib/portage/tests/lazyimport/test_lazy_import_portage_baseline.py
index 2bc54698a..2bc54698a 100644
--- a/pym/portage/tests/lazyimport/test_lazy_import_portage_baseline.py
+++ b/lib/portage/tests/lazyimport/test_lazy_import_portage_baseline.py
diff --git a/pym/portage/tests/lazyimport/test_preload_portage_submodules.py b/lib/portage/tests/lazyimport/test_preload_portage_submodules.py
index 9d20ebacf..9d20ebacf 100644
--- a/pym/portage/tests/lazyimport/test_preload_portage_submodules.py
+++ b/lib/portage/tests/lazyimport/test_preload_portage_submodules.py
diff --git a/pym/portage/tests/lint/__init__.py b/lib/portage/tests/lint/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/lint/__init__.py
+++ b/lib/portage/tests/lint/__init__.py
diff --git a/pym/portage/tests/lint/__test__.py b/lib/portage/tests/lint/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/lint/__test__.py
+++ b/lib/portage/tests/lint/__test__.py
diff --git a/pym/portage/tests/lint/metadata.py b/lib/portage/tests/lint/metadata.py
index e3f90cbf2..e3f90cbf2 100644
--- a/pym/portage/tests/lint/metadata.py
+++ b/lib/portage/tests/lint/metadata.py
diff --git a/pym/portage/tests/lint/test_bash_syntax.py b/lib/portage/tests/lint/test_bash_syntax.py
index fdbb6fe88..fdbb6fe88 100644
--- a/pym/portage/tests/lint/test_bash_syntax.py
+++ b/lib/portage/tests/lint/test_bash_syntax.py
diff --git a/pym/portage/tests/lint/test_compile_modules.py b/lib/portage/tests/lint/test_compile_modules.py
index 51eb8cd8a..51eb8cd8a 100644
--- a/pym/portage/tests/lint/test_compile_modules.py
+++ b/lib/portage/tests/lint/test_compile_modules.py
diff --git a/pym/portage/tests/lint/test_import_modules.py b/lib/portage/tests/lint/test_import_modules.py
index fcdcb3b33..fcdcb3b33 100644
--- a/pym/portage/tests/lint/test_import_modules.py
+++ b/lib/portage/tests/lint/test_import_modules.py
diff --git a/pym/portage/tests/locks/__init__.py b/lib/portage/tests/locks/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/tests/locks/__init__.py
+++ b/lib/portage/tests/locks/__init__.py
diff --git a/pym/portage/tests/locks/__test__.py b/lib/portage/tests/locks/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/locks/__test__.py
+++ b/lib/portage/tests/locks/__test__.py
diff --git a/pym/portage/tests/locks/test_asynchronous_lock.py b/lib/portage/tests/locks/test_asynchronous_lock.py
index 338d91e09..338d91e09 100644
--- a/pym/portage/tests/locks/test_asynchronous_lock.py
+++ b/lib/portage/tests/locks/test_asynchronous_lock.py
diff --git a/pym/portage/tests/locks/test_lock_nonblock.py b/lib/portage/tests/locks/test_lock_nonblock.py
index 2ff7b3527..2ff7b3527 100644
--- a/pym/portage/tests/locks/test_lock_nonblock.py
+++ b/lib/portage/tests/locks/test_lock_nonblock.py
diff --git a/pym/portage/tests/news/__init__.py b/lib/portage/tests/news/__init__.py
index 28a753f9c..28a753f9c 100644
--- a/pym/portage/tests/news/__init__.py
+++ b/lib/portage/tests/news/__init__.py
diff --git a/pym/portage/tests/news/__test__.py b/lib/portage/tests/news/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/news/__test__.py
+++ b/lib/portage/tests/news/__test__.py
diff --git a/pym/portage/tests/news/test_NewsItem.py b/lib/portage/tests/news/test_NewsItem.py
index 2f183a7e0..2f183a7e0 100644
--- a/pym/portage/tests/news/test_NewsItem.py
+++ b/lib/portage/tests/news/test_NewsItem.py
diff --git a/pym/portage/tests/process/__init__.py b/lib/portage/tests/process/__init__.py
index d19e353cc..d19e353cc 100644
--- a/pym/portage/tests/process/__init__.py
+++ b/lib/portage/tests/process/__init__.py
diff --git a/pym/portage/tests/process/__test__.py b/lib/portage/tests/process/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/process/__test__.py
+++ b/lib/portage/tests/process/__test__.py
diff --git a/pym/portage/tests/process/test_PopenProcess.py b/lib/portage/tests/process/test_PopenProcess.py
index 88da0b354..88da0b354 100644
--- a/pym/portage/tests/process/test_PopenProcess.py
+++ b/lib/portage/tests/process/test_PopenProcess.py
diff --git a/pym/portage/tests/process/test_PopenProcessBlockingIO.py b/lib/portage/tests/process/test_PopenProcessBlockingIO.py
index 9ee291a39..9ee291a39 100644
--- a/pym/portage/tests/process/test_PopenProcessBlockingIO.py
+++ b/lib/portage/tests/process/test_PopenProcessBlockingIO.py
diff --git a/pym/portage/tests/process/test_poll.py b/lib/portage/tests/process/test_poll.py
index f700a5585..f700a5585 100644
--- a/pym/portage/tests/process/test_poll.py
+++ b/lib/portage/tests/process/test_poll.py
diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
index 165dd09a8..165dd09a8 100644
--- a/pym/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
diff --git a/pym/portage/tests/resolver/__init__.py b/lib/portage/tests/resolver/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/tests/resolver/__init__.py
+++ b/lib/portage/tests/resolver/__init__.py
diff --git a/pym/portage/tests/resolver/__test__.py b/lib/portage/tests/resolver/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/resolver/__test__.py
+++ b/lib/portage/tests/resolver/__test__.py
diff --git a/pym/portage/tests/resolver/binpkg_multi_instance/__init__.py b/lib/portage/tests/resolver/binpkg_multi_instance/__init__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/tests/resolver/binpkg_multi_instance/__init__.py
+++ b/lib/portage/tests/resolver/binpkg_multi_instance/__init__.py
diff --git a/pym/portage/tests/resolver/binpkg_multi_instance/__test__.py b/lib/portage/tests/resolver/binpkg_multi_instance/__test__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/tests/resolver/binpkg_multi_instance/__test__.py
+++ b/lib/portage/tests/resolver/binpkg_multi_instance/__test__.py
diff --git a/pym/portage/tests/resolver/binpkg_multi_instance/test_build_id_profile_format.py b/lib/portage/tests/resolver/binpkg_multi_instance/test_build_id_profile_format.py
index 0397509f8..0397509f8 100644
--- a/pym/portage/tests/resolver/binpkg_multi_instance/test_build_id_profile_format.py
+++ b/lib/portage/tests/resolver/binpkg_multi_instance/test_build_id_profile_format.py
diff --git a/pym/portage/tests/resolver/binpkg_multi_instance/test_rebuilt_binaries.py b/lib/portage/tests/resolver/binpkg_multi_instance/test_rebuilt_binaries.py
index 5729df465..5729df465 100644
--- a/pym/portage/tests/resolver/binpkg_multi_instance/test_rebuilt_binaries.py
+++ b/lib/portage/tests/resolver/binpkg_multi_instance/test_rebuilt_binaries.py
diff --git a/pym/portage/tests/resolver/soname/__init__.py b/lib/portage/tests/resolver/soname/__init__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/tests/resolver/soname/__init__.py
+++ b/lib/portage/tests/resolver/soname/__init__.py
diff --git a/pym/portage/tests/resolver/soname/__test__.py b/lib/portage/tests/resolver/soname/__test__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/tests/resolver/soname/__test__.py
+++ b/lib/portage/tests/resolver/soname/__test__.py
diff --git a/pym/portage/tests/resolver/soname/test_autounmask.py b/lib/portage/tests/resolver/soname/test_autounmask.py
index be0f94e17..be0f94e17 100644
--- a/pym/portage/tests/resolver/soname/test_autounmask.py
+++ b/lib/portage/tests/resolver/soname/test_autounmask.py
diff --git a/pym/portage/tests/resolver/soname/test_depclean.py b/lib/portage/tests/resolver/soname/test_depclean.py
index 50cc169e3..50cc169e3 100644
--- a/pym/portage/tests/resolver/soname/test_depclean.py
+++ b/lib/portage/tests/resolver/soname/test_depclean.py
diff --git a/pym/portage/tests/resolver/soname/test_downgrade.py b/lib/portage/tests/resolver/soname/test_downgrade.py
index a95be3406..a95be3406 100644
--- a/pym/portage/tests/resolver/soname/test_downgrade.py
+++ b/lib/portage/tests/resolver/soname/test_downgrade.py
diff --git a/pym/portage/tests/resolver/soname/test_or_choices.py b/lib/portage/tests/resolver/soname/test_or_choices.py
index 2420cd399..2420cd399 100644
--- a/pym/portage/tests/resolver/soname/test_or_choices.py
+++ b/lib/portage/tests/resolver/soname/test_or_choices.py
diff --git a/pym/portage/tests/resolver/soname/test_reinstall.py b/lib/portage/tests/resolver/soname/test_reinstall.py
index b8f2d2c60..b8f2d2c60 100644
--- a/pym/portage/tests/resolver/soname/test_reinstall.py
+++ b/lib/portage/tests/resolver/soname/test_reinstall.py
diff --git a/pym/portage/tests/resolver/soname/test_skip_update.py b/lib/portage/tests/resolver/soname/test_skip_update.py
index 67e1e0242..67e1e0242 100644
--- a/pym/portage/tests/resolver/soname/test_skip_update.py
+++ b/lib/portage/tests/resolver/soname/test_skip_update.py
diff --git a/pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py b/lib/portage/tests/resolver/soname/test_slot_conflict_reinstall.py
index f7154442e..f7154442e 100644
--- a/pym/portage/tests/resolver/soname/test_slot_conflict_reinstall.py
+++ b/lib/portage/tests/resolver/soname/test_slot_conflict_reinstall.py
diff --git a/pym/portage/tests/resolver/soname/test_slot_conflict_update.py b/lib/portage/tests/resolver/soname/test_slot_conflict_update.py
index c6074967a..c6074967a 100644
--- a/pym/portage/tests/resolver/soname/test_slot_conflict_update.py
+++ b/lib/portage/tests/resolver/soname/test_slot_conflict_update.py
diff --git a/pym/portage/tests/resolver/soname/test_soname_provided.py b/lib/portage/tests/resolver/soname/test_soname_provided.py
index 162da47d1..162da47d1 100644
--- a/pym/portage/tests/resolver/soname/test_soname_provided.py
+++ b/lib/portage/tests/resolver/soname/test_soname_provided.py
diff --git a/pym/portage/tests/resolver/soname/test_unsatisfiable.py b/lib/portage/tests/resolver/soname/test_unsatisfiable.py
index 039a9df26..039a9df26 100644
--- a/pym/portage/tests/resolver/soname/test_unsatisfiable.py
+++ b/lib/portage/tests/resolver/soname/test_unsatisfiable.py
diff --git a/pym/portage/tests/resolver/soname/test_unsatisfied.py b/lib/portage/tests/resolver/soname/test_unsatisfied.py
index 27cdcc440..27cdcc440 100644
--- a/pym/portage/tests/resolver/soname/test_unsatisfied.py
+++ b/lib/portage/tests/resolver/soname/test_unsatisfied.py
diff --git a/pym/portage/tests/resolver/test_autounmask.py b/lib/portage/tests/resolver/test_autounmask.py
index 809d42104..809d42104 100644
--- a/pym/portage/tests/resolver/test_autounmask.py
+++ b/lib/portage/tests/resolver/test_autounmask.py
diff --git a/pym/portage/tests/resolver/test_autounmask_binpkg_use.py b/lib/portage/tests/resolver/test_autounmask_binpkg_use.py
index 1ca4bf3d9..1ca4bf3d9 100644
--- a/pym/portage/tests/resolver/test_autounmask_binpkg_use.py
+++ b/lib/portage/tests/resolver/test_autounmask_binpkg_use.py
diff --git a/pym/portage/tests/resolver/test_autounmask_keep_keywords.py b/lib/portage/tests/resolver/test_autounmask_keep_keywords.py
index 79a4837a5..79a4837a5 100644
--- a/pym/portage/tests/resolver/test_autounmask_keep_keywords.py
+++ b/lib/portage/tests/resolver/test_autounmask_keep_keywords.py
diff --git a/pym/portage/tests/resolver/test_autounmask_multilib_use.py b/lib/portage/tests/resolver/test_autounmask_multilib_use.py
index e160c77ce..e160c77ce 100644
--- a/pym/portage/tests/resolver/test_autounmask_multilib_use.py
+++ b/lib/portage/tests/resolver/test_autounmask_multilib_use.py
diff --git a/pym/portage/tests/resolver/test_autounmask_parent.py b/lib/portage/tests/resolver/test_autounmask_parent.py
index 042acabb0..042acabb0 100644
--- a/pym/portage/tests/resolver/test_autounmask_parent.py
+++ b/lib/portage/tests/resolver/test_autounmask_parent.py
diff --git a/pym/portage/tests/resolver/test_autounmask_use_backtrack.py b/lib/portage/tests/resolver/test_autounmask_use_backtrack.py
index 83edeafa4..83edeafa4 100644
--- a/pym/portage/tests/resolver/test_autounmask_use_backtrack.py
+++ b/lib/portage/tests/resolver/test_autounmask_use_backtrack.py
diff --git a/pym/portage/tests/resolver/test_autounmask_use_breakage.py b/lib/portage/tests/resolver/test_autounmask_use_breakage.py
index 173941629..173941629 100644
--- a/pym/portage/tests/resolver/test_autounmask_use_breakage.py
+++ b/lib/portage/tests/resolver/test_autounmask_use_breakage.py
diff --git a/pym/portage/tests/resolver/test_backtracking.py b/lib/portage/tests/resolver/test_backtracking.py
index 656715347..656715347 100644
--- a/pym/portage/tests/resolver/test_backtracking.py
+++ b/lib/portage/tests/resolver/test_backtracking.py
diff --git a/pym/portage/tests/resolver/test_bdeps.py b/lib/portage/tests/resolver/test_bdeps.py
index c0d64991c..c0d64991c 100644
--- a/pym/portage/tests/resolver/test_bdeps.py
+++ b/lib/portage/tests/resolver/test_bdeps.py
diff --git a/pym/portage/tests/resolver/test_binary_pkg_ebuild_visibility.py b/lib/portage/tests/resolver/test_binary_pkg_ebuild_visibility.py
index 0d01d0696..0d01d0696 100644
--- a/pym/portage/tests/resolver/test_binary_pkg_ebuild_visibility.py
+++ b/lib/portage/tests/resolver/test_binary_pkg_ebuild_visibility.py
diff --git a/pym/portage/tests/resolver/test_blocker.py b/lib/portage/tests/resolver/test_blocker.py
index 94a88b8b4..94a88b8b4 100644
--- a/pym/portage/tests/resolver/test_blocker.py
+++ b/lib/portage/tests/resolver/test_blocker.py
diff --git a/pym/portage/tests/resolver/test_changed_deps.py b/lib/portage/tests/resolver/test_changed_deps.py
index 420a00172..420a00172 100644
--- a/pym/portage/tests/resolver/test_changed_deps.py
+++ b/lib/portage/tests/resolver/test_changed_deps.py
diff --git a/pym/portage/tests/resolver/test_circular_choices.py b/lib/portage/tests/resolver/test_circular_choices.py
index 33b730627..33b730627 100644
--- a/pym/portage/tests/resolver/test_circular_choices.py
+++ b/lib/portage/tests/resolver/test_circular_choices.py
diff --git a/pym/portage/tests/resolver/test_circular_dependencies.py b/lib/portage/tests/resolver/test_circular_dependencies.py
index f8331ac4e..f8331ac4e 100644
--- a/pym/portage/tests/resolver/test_circular_dependencies.py
+++ b/lib/portage/tests/resolver/test_circular_dependencies.py
diff --git a/pym/portage/tests/resolver/test_complete_graph.py b/lib/portage/tests/resolver/test_complete_graph.py
index 6b5f54a3a..6b5f54a3a 100644
--- a/pym/portage/tests/resolver/test_complete_graph.py
+++ b/lib/portage/tests/resolver/test_complete_graph.py
diff --git a/pym/portage/tests/resolver/test_complete_if_new_subslot_without_revbump.py b/lib/portage/tests/resolver/test_complete_if_new_subslot_without_revbump.py
index fddbead7c..fddbead7c 100644
--- a/pym/portage/tests/resolver/test_complete_if_new_subslot_without_revbump.py
+++ b/lib/portage/tests/resolver/test_complete_if_new_subslot_without_revbump.py
diff --git a/pym/portage/tests/resolver/test_depclean.py b/lib/portage/tests/resolver/test_depclean.py
index f3c4c638c..f3c4c638c 100644
--- a/pym/portage/tests/resolver/test_depclean.py
+++ b/lib/portage/tests/resolver/test_depclean.py
diff --git a/pym/portage/tests/resolver/test_depclean_order.py b/lib/portage/tests/resolver/test_depclean_order.py
index 9511d292c..9511d292c 100644
--- a/pym/portage/tests/resolver/test_depclean_order.py
+++ b/lib/portage/tests/resolver/test_depclean_order.py
diff --git a/pym/portage/tests/resolver/test_depclean_slot_unavailable.py b/lib/portage/tests/resolver/test_depclean_slot_unavailable.py
index 689392bb5..689392bb5 100644
--- a/pym/portage/tests/resolver/test_depclean_slot_unavailable.py
+++ b/lib/portage/tests/resolver/test_depclean_slot_unavailable.py
diff --git a/pym/portage/tests/resolver/test_depth.py b/lib/portage/tests/resolver/test_depth.py
index cb1e2dd5d..cb1e2dd5d 100644
--- a/pym/portage/tests/resolver/test_depth.py
+++ b/lib/portage/tests/resolver/test_depth.py
diff --git a/pym/portage/tests/resolver/test_disjunctive_depend_order.py b/lib/portage/tests/resolver/test_disjunctive_depend_order.py
index 88f6dac2d..88f6dac2d 100644
--- a/pym/portage/tests/resolver/test_disjunctive_depend_order.py
+++ b/lib/portage/tests/resolver/test_disjunctive_depend_order.py
diff --git a/pym/portage/tests/resolver/test_eapi.py b/lib/portage/tests/resolver/test_eapi.py
index 50b9d90da..50b9d90da 100644
--- a/pym/portage/tests/resolver/test_eapi.py
+++ b/lib/portage/tests/resolver/test_eapi.py
diff --git a/lib/portage/tests/resolver/test_features_test_use.py b/lib/portage/tests/resolver/test_features_test_use.py
new file mode 100644
index 000000000..da7172c17
--- /dev/null
+++ b/lib/portage/tests/resolver/test_features_test_use.py
@@ -0,0 +1,88 @@
+# Copyright 2012-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
+ ResolverPlaygroundTestCase)
+
+
+class TestDepend(TestCase):
+ ebuilds = {
+ "dev-libs/A-1" : {
+ "IUSE": "test",
+ "DEPEND": "test? ( dev-libs/B )",
+ },
+ "dev-libs/B-1" : {
+ },
+ }
+
+ installed = {
+ "dev-libs/A-1" : {
+ "USE": "",
+ "IUSE": "test",
+ "DEPEND": "test? ( dev-libs/B )",
+ },
+ }
+
+ def test_default_use_test(self):
+ """
+ Test that FEATURES=test enables USE=test by default.
+ """
+ user_config = {
+ "make.conf" : ("FEATURES=test", "USE=\"\"")
+ }
+ test_case = ResolverPlaygroundTestCase(
+ ["dev-libs/A"],
+ options = {},
+ success = True,
+ mergelist = ["dev-libs/B-1", "dev-libs/A-1"])
+
+ playground = ResolverPlayground(ebuilds=self.ebuilds,
+ user_config=user_config, debug=False)
+ try:
+ playground.run_TestCase(test_case)
+ self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+ finally:
+ playground.cleanup()
+
+ def test_no_forced_use_test(self):
+ """
+ Test that FEATURES=test no longer forces USE=test.
+ """
+ user_config = {
+ "make.conf" : ("FEATURES=test", "USE=\"-test\"")
+ }
+ test_case = ResolverPlaygroundTestCase(
+ ["dev-libs/A"],
+ options = {},
+ success = True,
+ mergelist = ["dev-libs/A-1"])
+
+ playground = ResolverPlayground(ebuilds=self.ebuilds,
+ user_config=user_config, debug=False)
+ try:
+ playground.run_TestCase(test_case)
+ self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+ finally:
+ playground.cleanup()
+
+ def test_newuse(self):
+ """
+ Test that --newuse now detects USE=test changes.
+ """
+ user_config = {
+ "make.conf" : ("FEATURES=test", "USE=\"\"")
+ }
+ test_case = ResolverPlaygroundTestCase(
+ ["dev-libs/A"],
+ options = {"--newuse": True, "--selective": True},
+ success = True,
+ mergelist = ["dev-libs/B-1", "dev-libs/A-1"])
+
+ playground = ResolverPlayground(ebuilds=self.ebuilds,
+ user_config=user_config, debug=False)
+ try:
+ playground.run_TestCase(test_case)
+ self.assertEqual(test_case.test_success, True, test_case.fail_msg)
+ finally:
+ playground.cleanup()
diff --git a/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py b/lib/portage/tests/resolver/test_imagemagick_graphicsmagick.py
index e5a3d7d7d..e5a3d7d7d 100644
--- a/pym/portage/tests/resolver/test_imagemagick_graphicsmagick.py
+++ b/lib/portage/tests/resolver/test_imagemagick_graphicsmagick.py
diff --git a/pym/portage/tests/resolver/test_keywords.py b/lib/portage/tests/resolver/test_keywords.py
index d59ea5881..d59ea5881 100644
--- a/pym/portage/tests/resolver/test_keywords.py
+++ b/lib/portage/tests/resolver/test_keywords.py
diff --git a/pym/portage/tests/resolver/test_merge_order.py b/lib/portage/tests/resolver/test_merge_order.py
index 5d000d12b..5d000d12b 100644
--- a/pym/portage/tests/resolver/test_merge_order.py
+++ b/lib/portage/tests/resolver/test_merge_order.py
diff --git a/pym/portage/tests/resolver/test_missing_iuse_and_evaluated_atoms.py b/lib/portage/tests/resolver/test_missing_iuse_and_evaluated_atoms.py
index a860e7bb6..a860e7bb6 100644
--- a/pym/portage/tests/resolver/test_missing_iuse_and_evaluated_atoms.py
+++ b/lib/portage/tests/resolver/test_missing_iuse_and_evaluated_atoms.py
diff --git a/pym/portage/tests/resolver/test_multirepo.py b/lib/portage/tests/resolver/test_multirepo.py
index dabec6af9..dabec6af9 100644
--- a/pym/portage/tests/resolver/test_multirepo.py
+++ b/lib/portage/tests/resolver/test_multirepo.py
diff --git a/pym/portage/tests/resolver/test_multislot.py b/lib/portage/tests/resolver/test_multislot.py
index cbb1beebb..cbb1beebb 100644
--- a/pym/portage/tests/resolver/test_multislot.py
+++ b/lib/portage/tests/resolver/test_multislot.py
diff --git a/pym/portage/tests/resolver/test_old_dep_chain_display.py b/lib/portage/tests/resolver/test_old_dep_chain_display.py
index 8aedf5999..8aedf5999 100644
--- a/pym/portage/tests/resolver/test_old_dep_chain_display.py
+++ b/lib/portage/tests/resolver/test_old_dep_chain_display.py
diff --git a/pym/portage/tests/resolver/test_onlydeps.py b/lib/portage/tests/resolver/test_onlydeps.py
index 986769aee..986769aee 100644
--- a/pym/portage/tests/resolver/test_onlydeps.py
+++ b/lib/portage/tests/resolver/test_onlydeps.py
diff --git a/pym/portage/tests/resolver/test_onlydeps_circular.py b/lib/portage/tests/resolver/test_onlydeps_circular.py
index ce35cee85..ce35cee85 100644
--- a/pym/portage/tests/resolver/test_onlydeps_circular.py
+++ b/lib/portage/tests/resolver/test_onlydeps_circular.py
diff --git a/pym/portage/tests/resolver/test_onlydeps_minimal.py b/lib/portage/tests/resolver/test_onlydeps_minimal.py
index efda02c59..efda02c59 100644
--- a/pym/portage/tests/resolver/test_onlydeps_minimal.py
+++ b/lib/portage/tests/resolver/test_onlydeps_minimal.py
diff --git a/pym/portage/tests/resolver/test_or_choices.py b/lib/portage/tests/resolver/test_or_choices.py
index 63e62d010..63e62d010 100644
--- a/pym/portage/tests/resolver/test_or_choices.py
+++ b/lib/portage/tests/resolver/test_or_choices.py
diff --git a/pym/portage/tests/resolver/test_or_downgrade_installed.py b/lib/portage/tests/resolver/test_or_downgrade_installed.py
index 22307a5bc..22307a5bc 100644
--- a/pym/portage/tests/resolver/test_or_downgrade_installed.py
+++ b/lib/portage/tests/resolver/test_or_downgrade_installed.py
diff --git a/pym/portage/tests/resolver/test_or_upgrade_installed.py b/lib/portage/tests/resolver/test_or_upgrade_installed.py
index 7018e08de..7018e08de 100644
--- a/pym/portage/tests/resolver/test_or_upgrade_installed.py
+++ b/lib/portage/tests/resolver/test_or_upgrade_installed.py
diff --git a/pym/portage/tests/resolver/test_output.py b/lib/portage/tests/resolver/test_output.py
index 34efe9c56..34efe9c56 100644
--- a/pym/portage/tests/resolver/test_output.py
+++ b/lib/portage/tests/resolver/test_output.py
diff --git a/pym/portage/tests/resolver/test_package_tracker.py b/lib/portage/tests/resolver/test_package_tracker.py
index 468c3d8a5..468c3d8a5 100644
--- a/pym/portage/tests/resolver/test_package_tracker.py
+++ b/lib/portage/tests/resolver/test_package_tracker.py
diff --git a/pym/portage/tests/resolver/test_profile_default_eapi.py b/lib/portage/tests/resolver/test_profile_default_eapi.py
index cc5721949..cc5721949 100644
--- a/pym/portage/tests/resolver/test_profile_default_eapi.py
+++ b/lib/portage/tests/resolver/test_profile_default_eapi.py
diff --git a/pym/portage/tests/resolver/test_profile_package_set.py b/lib/portage/tests/resolver/test_profile_package_set.py
index 88a2a8259..88a2a8259 100644
--- a/pym/portage/tests/resolver/test_profile_package_set.py
+++ b/lib/portage/tests/resolver/test_profile_package_set.py
diff --git a/pym/portage/tests/resolver/test_rebuild.py b/lib/portage/tests/resolver/test_rebuild.py
index 6f1a7834b..6f1a7834b 100644
--- a/pym/portage/tests/resolver/test_rebuild.py
+++ b/lib/portage/tests/resolver/test_rebuild.py
diff --git a/pym/portage/tests/resolver/test_regular_slot_change_without_revbump.py b/lib/portage/tests/resolver/test_regular_slot_change_without_revbump.py
index 415277bc7..415277bc7 100644
--- a/pym/portage/tests/resolver/test_regular_slot_change_without_revbump.py
+++ b/lib/portage/tests/resolver/test_regular_slot_change_without_revbump.py
diff --git a/pym/portage/tests/resolver/test_required_use.py b/lib/portage/tests/resolver/test_required_use.py
index c679ce300..c679ce300 100644
--- a/pym/portage/tests/resolver/test_required_use.py
+++ b/lib/portage/tests/resolver/test_required_use.py
diff --git a/pym/portage/tests/resolver/test_runtime_cycle_merge_order.py b/lib/portage/tests/resolver/test_runtime_cycle_merge_order.py
index 438d9cbfc..438d9cbfc 100644
--- a/pym/portage/tests/resolver/test_runtime_cycle_merge_order.py
+++ b/lib/portage/tests/resolver/test_runtime_cycle_merge_order.py
diff --git a/pym/portage/tests/resolver/test_simple.py b/lib/portage/tests/resolver/test_simple.py
index 324ffa2a6..324ffa2a6 100644
--- a/pym/portage/tests/resolver/test_simple.py
+++ b/lib/portage/tests/resolver/test_simple.py
diff --git a/pym/portage/tests/resolver/test_slot_abi.py b/lib/portage/tests/resolver/test_slot_abi.py
index 7dbbebe2f..7dbbebe2f 100644
--- a/pym/portage/tests/resolver/test_slot_abi.py
+++ b/lib/portage/tests/resolver/test_slot_abi.py
diff --git a/pym/portage/tests/resolver/test_slot_abi_downgrade.py b/lib/portage/tests/resolver/test_slot_abi_downgrade.py
index 08e9a9db2..08e9a9db2 100644
--- a/pym/portage/tests/resolver/test_slot_abi_downgrade.py
+++ b/lib/portage/tests/resolver/test_slot_abi_downgrade.py
diff --git a/pym/portage/tests/resolver/test_slot_change_without_revbump.py b/lib/portage/tests/resolver/test_slot_change_without_revbump.py
index 5cd8c53d1..5cd8c53d1 100644
--- a/pym/portage/tests/resolver/test_slot_change_without_revbump.py
+++ b/lib/portage/tests/resolver/test_slot_change_without_revbump.py
diff --git a/pym/portage/tests/resolver/test_slot_collisions.py b/lib/portage/tests/resolver/test_slot_collisions.py
index 430ccaad6..430ccaad6 100644
--- a/pym/portage/tests/resolver/test_slot_collisions.py
+++ b/lib/portage/tests/resolver/test_slot_collisions.py
diff --git a/pym/portage/tests/resolver/test_slot_conflict_force_rebuild.py b/lib/portage/tests/resolver/test_slot_conflict_force_rebuild.py
index 4170bfd9d..4170bfd9d 100644
--- a/pym/portage/tests/resolver/test_slot_conflict_force_rebuild.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_force_rebuild.py
diff --git a/pym/portage/tests/resolver/test_slot_conflict_mask_update.py b/lib/portage/tests/resolver/test_slot_conflict_mask_update.py
index a90eeac29..a90eeac29 100644
--- a/pym/portage/tests/resolver/test_slot_conflict_mask_update.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_mask_update.py
diff --git a/pym/portage/tests/resolver/test_slot_conflict_rebuild.py b/lib/portage/tests/resolver/test_slot_conflict_rebuild.py
index 95b6396ba..95b6396ba 100644
--- a/pym/portage/tests/resolver/test_slot_conflict_rebuild.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_rebuild.py
diff --git a/pym/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py b/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
index 846ba0e59..846ba0e59 100644
--- a/pym/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_unsatisfied_deep_deps.py
diff --git a/pym/portage/tests/resolver/test_slot_conflict_update.py b/lib/portage/tests/resolver/test_slot_conflict_update.py
index f251d01f1..f251d01f1 100644
--- a/pym/portage/tests/resolver/test_slot_conflict_update.py
+++ b/lib/portage/tests/resolver/test_slot_conflict_update.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_autounmask.py b/lib/portage/tests/resolver/test_slot_operator_autounmask.py
index 624271b39..624271b39 100644
--- a/pym/portage/tests/resolver/test_slot_operator_autounmask.py
+++ b/lib/portage/tests/resolver/test_slot_operator_autounmask.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_complete_graph.py b/lib/portage/tests/resolver/test_slot_operator_complete_graph.py
index 1d59bcef1..1d59bcef1 100644
--- a/pym/portage/tests/resolver/test_slot_operator_complete_graph.py
+++ b/lib/portage/tests/resolver/test_slot_operator_complete_graph.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_exclusive_slots.py b/lib/portage/tests/resolver/test_slot_operator_exclusive_slots.py
index 689ed31d0..689ed31d0 100644
--- a/pym/portage/tests/resolver/test_slot_operator_exclusive_slots.py
+++ b/lib/portage/tests/resolver/test_slot_operator_exclusive_slots.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_rebuild.py b/lib/portage/tests/resolver/test_slot_operator_rebuild.py
index 381683331..381683331 100644
--- a/pym/portage/tests/resolver/test_slot_operator_rebuild.py
+++ b/lib/portage/tests/resolver/test_slot_operator_rebuild.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_required_use.py b/lib/portage/tests/resolver/test_slot_operator_required_use.py
index 9cc6dbad4..9cc6dbad4 100644
--- a/pym/portage/tests/resolver/test_slot_operator_required_use.py
+++ b/lib/portage/tests/resolver/test_slot_operator_required_use.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_reverse_deps.py b/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
index ce614a4dc..ce614a4dc 100644
--- a/pym/portage/tests/resolver/test_slot_operator_reverse_deps.py
+++ b/lib/portage/tests/resolver/test_slot_operator_reverse_deps.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py b/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
index 0a5a7fa78..0a5a7fa78 100644
--- a/pym/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
+++ b/lib/portage/tests/resolver/test_slot_operator_runtime_pkg_mask.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_unsatisfied.py b/lib/portage/tests/resolver/test_slot_operator_unsatisfied.py
index e3b53d159..e3b53d159 100644
--- a/pym/portage/tests/resolver/test_slot_operator_unsatisfied.py
+++ b/lib/portage/tests/resolver/test_slot_operator_unsatisfied.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_unsolved.py b/lib/portage/tests/resolver/test_slot_operator_unsolved.py
index c19783ddf..c19783ddf 100644
--- a/pym/portage/tests/resolver/test_slot_operator_unsolved.py
+++ b/lib/portage/tests/resolver/test_slot_operator_unsolved.py
diff --git a/pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py b/lib/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py
index 2ec15b602..2ec15b602 100644
--- a/pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py
+++ b/lib/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py
diff --git a/pym/portage/tests/resolver/test_solve_non_slot_operator_slot_conflicts.py b/lib/portage/tests/resolver/test_solve_non_slot_operator_slot_conflicts.py
index c6024f404..c6024f404 100644
--- a/pym/portage/tests/resolver/test_solve_non_slot_operator_slot_conflicts.py
+++ b/lib/portage/tests/resolver/test_solve_non_slot_operator_slot_conflicts.py
diff --git a/pym/portage/tests/resolver/test_targetroot.py b/lib/portage/tests/resolver/test_targetroot.py
index db6c60de3..db6c60de3 100644
--- a/pym/portage/tests/resolver/test_targetroot.py
+++ b/lib/portage/tests/resolver/test_targetroot.py
diff --git a/pym/portage/tests/resolver/test_unpack_dependencies.py b/lib/portage/tests/resolver/test_unpack_dependencies.py
index cfceff4b1..cfceff4b1 100644
--- a/pym/portage/tests/resolver/test_unpack_dependencies.py
+++ b/lib/portage/tests/resolver/test_unpack_dependencies.py
diff --git a/pym/portage/tests/resolver/test_use_aliases.py b/lib/portage/tests/resolver/test_use_aliases.py
index 7c2debbb1..7c2debbb1 100644
--- a/pym/portage/tests/resolver/test_use_aliases.py
+++ b/lib/portage/tests/resolver/test_use_aliases.py
diff --git a/pym/portage/tests/resolver/test_use_dep_defaults.py b/lib/portage/tests/resolver/test_use_dep_defaults.py
index 7d171066e..7d171066e 100644
--- a/pym/portage/tests/resolver/test_use_dep_defaults.py
+++ b/lib/portage/tests/resolver/test_use_dep_defaults.py
diff --git a/pym/portage/tests/resolver/test_useflags.py b/lib/portage/tests/resolver/test_useflags.py
index 0a5f3b3ff..0a5f3b3ff 100644
--- a/pym/portage/tests/resolver/test_useflags.py
+++ b/lib/portage/tests/resolver/test_useflags.py
diff --git a/pym/portage/tests/resolver/test_virtual_minimize_children.py b/lib/portage/tests/resolver/test_virtual_minimize_children.py
index b566cb592..b566cb592 100644
--- a/pym/portage/tests/resolver/test_virtual_minimize_children.py
+++ b/lib/portage/tests/resolver/test_virtual_minimize_children.py
diff --git a/pym/portage/tests/resolver/test_virtual_slot.py b/lib/portage/tests/resolver/test_virtual_slot.py
index ef4bd367a..ef4bd367a 100644
--- a/pym/portage/tests/resolver/test_virtual_slot.py
+++ b/lib/portage/tests/resolver/test_virtual_slot.py
diff --git a/pym/portage/tests/resolver/test_with_test_deps.py b/lib/portage/tests/resolver/test_with_test_deps.py
index 5bfc6a8a2..5bfc6a8a2 100644
--- a/pym/portage/tests/resolver/test_with_test_deps.py
+++ b/lib/portage/tests/resolver/test_with_test_deps.py
diff --git a/pym/portage/tests/runTests.py b/lib/portage/tests/runTests.py
index 2f9a7ad47..2f9a7ad47 100755
--- a/pym/portage/tests/runTests.py
+++ b/lib/portage/tests/runTests.py
diff --git a/pym/portage/tests/sets/__init__.py b/lib/portage/tests/sets/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/__init__.py
+++ b/lib/portage/tests/sets/__init__.py
diff --git a/pym/portage/tests/sets/__test__.py b/lib/portage/tests/sets/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/__test__.py
+++ b/lib/portage/tests/sets/__test__.py
diff --git a/pym/portage/tests/sets/base/__init__.py b/lib/portage/tests/sets/base/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/base/__init__.py
+++ b/lib/portage/tests/sets/base/__init__.py
diff --git a/pym/portage/tests/sets/base/__test__.py b/lib/portage/tests/sets/base/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/base/__test__.py
+++ b/lib/portage/tests/sets/base/__test__.py
diff --git a/pym/portage/tests/sets/base/testInternalPackageSet.py b/lib/portage/tests/sets/base/testInternalPackageSet.py
index e0a347876..e0a347876 100644
--- a/pym/portage/tests/sets/base/testInternalPackageSet.py
+++ b/lib/portage/tests/sets/base/testInternalPackageSet.py
diff --git a/pym/portage/tests/sets/files/__init__.py b/lib/portage/tests/sets/files/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/files/__init__.py
+++ b/lib/portage/tests/sets/files/__init__.py
diff --git a/pym/portage/tests/sets/files/__test__.py b/lib/portage/tests/sets/files/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/files/__test__.py
+++ b/lib/portage/tests/sets/files/__test__.py
diff --git a/pym/portage/tests/sets/files/testConfigFileSet.py b/lib/portage/tests/sets/files/testConfigFileSet.py
index 3ec26a077..3ec26a077 100644
--- a/pym/portage/tests/sets/files/testConfigFileSet.py
+++ b/lib/portage/tests/sets/files/testConfigFileSet.py
diff --git a/pym/portage/tests/sets/files/testStaticFileSet.py b/lib/portage/tests/sets/files/testStaticFileSet.py
index d515a6728..d515a6728 100644
--- a/pym/portage/tests/sets/files/testStaticFileSet.py
+++ b/lib/portage/tests/sets/files/testStaticFileSet.py
diff --git a/pym/portage/tests/sets/shell/__init__.py b/lib/portage/tests/sets/shell/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/shell/__init__.py
+++ b/lib/portage/tests/sets/shell/__init__.py
diff --git a/pym/portage/tests/sets/shell/__test__.py b/lib/portage/tests/sets/shell/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sets/shell/__test__.py
+++ b/lib/portage/tests/sets/shell/__test__.py
diff --git a/pym/portage/tests/sets/shell/testShell.py b/lib/portage/tests/sets/shell/testShell.py
index 2cdd833c3..2cdd833c3 100644
--- a/pym/portage/tests/sets/shell/testShell.py
+++ b/lib/portage/tests/sets/shell/testShell.py
diff --git a/pym/portage/tests/sync/__init__.py b/lib/portage/tests/sync/__init__.py
index 7cd880e11..7cd880e11 100644
--- a/pym/portage/tests/sync/__init__.py
+++ b/lib/portage/tests/sync/__init__.py
diff --git a/pym/portage/tests/sync/__test__.py b/lib/portage/tests/sync/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/sync/__test__.py
+++ b/lib/portage/tests/sync/__test__.py
diff --git a/pym/portage/tests/sync/test_sync_local.py b/lib/portage/tests/sync/test_sync_local.py
index 010c8f887..17ff6f200 100644
--- a/pym/portage/tests/sync/test_sync_local.py
+++ b/lib/portage/tests/sync/test_sync_local.py
@@ -102,17 +102,20 @@ class SyncLocalTestCase(TestCase):
os.unlink(os.path.join(metadata_dir, 'timestamp.chk'))
sync_cmds = (
+ (homedir, cmds["emerge"] + ("--sync",)),
+ (homedir, lambda: self.assertTrue(os.path.exists(
+ os.path.join(repo.location, "dev-libs", "A")
+ ), "dev-libs/A expected, but missing")),
+ (homedir, cmds["emaint"] + ("sync", "-A")),
+ )
+
+ sync_cmds_auto_sync = (
(homedir, lambda: repos_set_conf("rsync", auto_sync="no")),
(homedir, cmds["emerge"] + ("--sync",)),
(homedir, lambda: self.assertFalse(os.path.exists(
os.path.join(repo.location, "dev-libs", "A")
), "dev-libs/A found, expected missing")),
(homedir, lambda: repos_set_conf("rsync", auto_sync="yes")),
- (homedir, cmds["emerge"] + ("--sync",)),
- (homedir, lambda: self.assertTrue(os.path.exists(
- os.path.join(repo.location, "dev-libs", "A")
- ), "dev-libs/A expected, but missing")),
- (homedir, cmds["emaint"] + ("sync", "-A")),
)
rename_repo = (
@@ -236,7 +239,7 @@ class SyncLocalTestCase(TestCase):
# triggered by python -Wd will be visible.
stdout = subprocess.PIPE
- for cwd, cmd in rename_repo + sync_cmds + \
+ for cwd, cmd in rename_repo + sync_cmds_auto_sync + sync_cmds + \
rsync_opts_repos + rsync_opts_repos_default + \
rsync_opts_repos_default_ovr + rsync_opts_repos_default_cancel + \
delete_sync_repo + git_repo_create + sync_type_git + \
diff --git a/pym/portage/tests/unicode/__init__.py b/lib/portage/tests/unicode/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/tests/unicode/__init__.py
+++ b/lib/portage/tests/unicode/__init__.py
diff --git a/pym/portage/tests/unicode/__test__.py b/lib/portage/tests/unicode/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/unicode/__test__.py
+++ b/lib/portage/tests/unicode/__test__.py
diff --git a/pym/portage/tests/unicode/test_string_format.py b/lib/portage/tests/unicode/test_string_format.py
index 9d4366a91..9d4366a91 100644
--- a/pym/portage/tests/unicode/test_string_format.py
+++ b/lib/portage/tests/unicode/test_string_format.py
diff --git a/pym/portage/tests/update/__init__.py b/lib/portage/tests/update/__init__.py
index 418ad862b..418ad862b 100644
--- a/pym/portage/tests/update/__init__.py
+++ b/lib/portage/tests/update/__init__.py
diff --git a/pym/portage/tests/update/__test__.py b/lib/portage/tests/update/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/update/__test__.py
+++ b/lib/portage/tests/update/__test__.py
diff --git a/pym/portage/tests/update/test_move_ent.py b/lib/portage/tests/update/test_move_ent.py
index d9647a95e..d9647a95e 100644
--- a/pym/portage/tests/update/test_move_ent.py
+++ b/lib/portage/tests/update/test_move_ent.py
diff --git a/pym/portage/tests/update/test_move_slot_ent.py b/lib/portage/tests/update/test_move_slot_ent.py
index 3e49e1144..3e49e1144 100644
--- a/pym/portage/tests/update/test_move_slot_ent.py
+++ b/lib/portage/tests/update/test_move_slot_ent.py
diff --git a/pym/portage/tests/update/test_update_dbentry.py b/lib/portage/tests/update/test_update_dbentry.py
index 88951149a..88951149a 100644
--- a/pym/portage/tests/update/test_update_dbentry.py
+++ b/lib/portage/tests/update/test_update_dbentry.py
diff --git a/pym/portage/tests/util/__init__.py b/lib/portage/tests/util/__init__.py
index 69ce1898d..69ce1898d 100644
--- a/pym/portage/tests/util/__init__.py
+++ b/lib/portage/tests/util/__init__.py
diff --git a/pym/portage/tests/util/__test__.py b/lib/portage/tests/util/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/__test__.py
+++ b/lib/portage/tests/util/__test__.py
diff --git a/pym/portage/tests/util/dyn_libs/__init__.py b/lib/portage/tests/util/dyn_libs/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/dyn_libs/__init__.py
+++ b/lib/portage/tests/util/dyn_libs/__init__.py
diff --git a/pym/portage/tests/util/dyn_libs/__test__.py b/lib/portage/tests/util/dyn_libs/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/dyn_libs/__test__.py
+++ b/lib/portage/tests/util/dyn_libs/__test__.py
diff --git a/pym/portage/tests/util/dyn_libs/test_soname_deps.py b/lib/portage/tests/util/dyn_libs/test_soname_deps.py
index 823890c91..823890c91 100644
--- a/pym/portage/tests/util/dyn_libs/test_soname_deps.py
+++ b/lib/portage/tests/util/dyn_libs/test_soname_deps.py
diff --git a/pym/portage/tests/util/eventloop/__init__.py b/lib/portage/tests/util/eventloop/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/eventloop/__init__.py
+++ b/lib/portage/tests/util/eventloop/__init__.py
diff --git a/pym/portage/tests/util/eventloop/__test__.py b/lib/portage/tests/util/eventloop/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/eventloop/__test__.py
+++ b/lib/portage/tests/util/eventloop/__test__.py
diff --git a/pym/portage/tests/util/eventloop/test_call_soon_fifo.py b/lib/portage/tests/util/eventloop/test_call_soon_fifo.py
index f970c67a1..f970c67a1 100644
--- a/pym/portage/tests/util/eventloop/test_call_soon_fifo.py
+++ b/lib/portage/tests/util/eventloop/test_call_soon_fifo.py
diff --git a/pym/portage/tests/util/file_copy/__init__.py b/lib/portage/tests/util/file_copy/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/file_copy/__init__.py
+++ b/lib/portage/tests/util/file_copy/__init__.py
diff --git a/pym/portage/tests/util/file_copy/__test__.py b/lib/portage/tests/util/file_copy/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/file_copy/__test__.py
+++ b/lib/portage/tests/util/file_copy/__test__.py
diff --git a/pym/portage/tests/util/file_copy/test_copyfile.py b/lib/portage/tests/util/file_copy/test_copyfile.py
index b900fdef0..b900fdef0 100644
--- a/pym/portage/tests/util/file_copy/test_copyfile.py
+++ b/lib/portage/tests/util/file_copy/test_copyfile.py
diff --git a/pym/portage/tests/util/futures/__init__.py b/lib/portage/tests/util/futures/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/futures/__init__.py
+++ b/lib/portage/tests/util/futures/__init__.py
diff --git a/pym/portage/tests/util/futures/__test__.py b/lib/portage/tests/util/futures/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/futures/__test__.py
+++ b/lib/portage/tests/util/futures/__test__.py
diff --git a/pym/portage/tests/util/futures/asyncio/__init__.py b/lib/portage/tests/util/futures/asyncio/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/futures/asyncio/__init__.py
+++ b/lib/portage/tests/util/futures/asyncio/__init__.py
diff --git a/pym/portage/tests/util/futures/asyncio/__test__.py b/lib/portage/tests/util/futures/asyncio/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/util/futures/asyncio/__test__.py
+++ b/lib/portage/tests/util/futures/asyncio/__test__.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_child_watcher.py b/lib/portage/tests/util/futures/asyncio/test_child_watcher.py
index 0fc73ab49..0fc73ab49 100644
--- a/pym/portage/tests/util/futures/asyncio/test_child_watcher.py
+++ b/lib/portage/tests/util/futures/asyncio/test_child_watcher.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_event_loop_in_fork.py b/lib/portage/tests/util/futures/asyncio/test_event_loop_in_fork.py
index 177953437..177953437 100644
--- a/pym/portage/tests/util/futures/asyncio/test_event_loop_in_fork.py
+++ b/lib/portage/tests/util/futures/asyncio/test_event_loop_in_fork.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_pipe_closed.py b/lib/portage/tests/util/futures/asyncio/test_pipe_closed.py
index 507385c04..507385c04 100644
--- a/pym/portage/tests/util/futures/asyncio/test_pipe_closed.py
+++ b/lib/portage/tests/util/futures/asyncio/test_pipe_closed.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py b/lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py
index d3cd94b35..d3cd94b35 100644
--- a/pym/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py
+++ b/lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_run_until_complete.py b/lib/portage/tests/util/futures/asyncio/test_run_until_complete.py
index c0e86ae5e..c0e86ae5e 100644
--- a/pym/portage/tests/util/futures/asyncio/test_run_until_complete.py
+++ b/lib/portage/tests/util/futures/asyncio/test_run_until_complete.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_subprocess_exec.py b/lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py
index 5a812ba6a..5a812ba6a 100644
--- a/pym/portage/tests/util/futures/asyncio/test_subprocess_exec.py
+++ b/lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py
diff --git a/pym/portage/tests/util/futures/asyncio/test_wakeup_fd_sigchld.py b/lib/portage/tests/util/futures/asyncio/test_wakeup_fd_sigchld.py
index abc67c241..abc67c241 100644
--- a/pym/portage/tests/util/futures/asyncio/test_wakeup_fd_sigchld.py
+++ b/lib/portage/tests/util/futures/asyncio/test_wakeup_fd_sigchld.py
diff --git a/lib/portage/tests/util/futures/test_compat_coroutine.py b/lib/portage/tests/util/futures/test_compat_coroutine.py
new file mode 100644
index 000000000..cbc070869
--- /dev/null
+++ b/lib/portage/tests/util/futures/test_compat_coroutine.py
@@ -0,0 +1,159 @@
+# Copyright 2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.util.futures import asyncio
+from portage.util.futures.compat_coroutine import (
+ coroutine,
+ coroutine_return,
+)
+from portage.tests import TestCase
+
+
+class CompatCoroutineTestCase(TestCase):
+
+ def test_returning_coroutine(self):
+ @coroutine
+ def returning_coroutine():
+ yield asyncio.sleep(0)
+ coroutine_return('success')
+
+ self.assertEqual('success',
+ asyncio.get_event_loop().run_until_complete(returning_coroutine()))
+
+ def test_raising_coroutine(self):
+
+ class TestException(Exception):
+ pass
+
+ @coroutine
+ def raising_coroutine():
+ yield asyncio.sleep(0)
+ raise TestException('exception')
+
+ self.assertRaises(TestException,
+ asyncio.get_event_loop().run_until_complete, raising_coroutine())
+
+ def test_catching_coroutine(self):
+
+ class TestException(Exception):
+ pass
+
+ @coroutine
+ def catching_coroutine(loop=None):
+ loop = asyncio._wrap_loop(loop)
+ future = loop.create_future()
+ loop.call_soon(future.set_exception, TestException('exception'))
+ try:
+ yield future
+ except TestException:
+ self.assertTrue(True)
+ else:
+ self.assertTrue(False)
+ coroutine_return('success')
+
+ loop = asyncio.get_event_loop()
+ self.assertEqual('success',
+ loop.run_until_complete(catching_coroutine(loop=loop)))
+
+ def test_cancelled_coroutine(self):
+
+ @coroutine
+ def cancelled_coroutine(loop=None):
+ loop = asyncio._wrap_loop(loop)
+ while True:
+ yield loop.create_future()
+
+ loop = asyncio.get_event_loop()
+ future = cancelled_coroutine(loop=loop)
+ loop.call_soon(future.cancel)
+
+ self.assertRaises(asyncio.CancelledError,
+ loop.run_until_complete, future)
+
+ def test_cancelled_future(self):
+
+ @coroutine
+ def cancelled_future_coroutine(loop=None):
+ loop = asyncio._wrap_loop(loop)
+ while True:
+ future = loop.create_future()
+ loop.call_soon(future.cancel)
+ yield future
+
+ loop = asyncio.get_event_loop()
+ self.assertRaises(asyncio.CancelledError,
+ loop.run_until_complete, cancelled_future_coroutine(loop=loop))
+
+ def test_yield_expression_result(self):
+ @coroutine
+ def yield_expression_coroutine():
+ for i in range(3):
+ x = yield asyncio.sleep(0, result=i)
+ self.assertEqual(x, i)
+
+ asyncio.get_event_loop().run_until_complete(yield_expression_coroutine())
+
+ def test_method_coroutine(self):
+
+ class Cubby(object):
+
+ _empty = object()
+
+ def __init__(self, loop):
+ self._loop = loop
+ self._value = self._empty
+ self._waiters = []
+
+ def _notify(self):
+ waiters = self._waiters
+ self._waiters = []
+ for waiter in waiters:
+ waiter.cancelled() or waiter.set_result(None)
+
+ def _wait(self):
+ waiter = self._loop.create_future()
+ self._waiters.append(waiter)
+ return waiter
+
+ @coroutine
+ def read(self):
+ while self._value is self._empty:
+ yield self._wait()
+
+ value = self._value
+ self._value = self._empty
+ self._notify()
+ coroutine_return(value)
+
+ @coroutine
+ def write(self, value):
+ while self._value is not self._empty:
+ yield self._wait()
+
+ self._value = value
+ self._notify()
+
+ @coroutine
+ def writer_coroutine(cubby, values, sentinel):
+ for value in values:
+ yield cubby.write(value)
+ yield cubby.write(sentinel)
+
+ @coroutine
+ def reader_coroutine(cubby, sentinel):
+ results = []
+ while True:
+ result = yield cubby.read()
+ if result == sentinel:
+ break
+ results.append(result)
+ coroutine_return(results)
+
+ loop = asyncio.get_event_loop()
+ cubby = Cubby(loop)
+ values = list(range(3))
+ writer = asyncio.ensure_future(writer_coroutine(cubby, values, None), loop=loop)
+ reader = asyncio.ensure_future(reader_coroutine(cubby, None), loop=loop)
+ loop.run_until_complete(asyncio.wait([writer, reader]))
+
+ self.assertEqual(reader.result(), values)
diff --git a/pym/portage/tests/util/futures/test_done_callback.py b/lib/portage/tests/util/futures/test_done_callback.py
index 76b727b09..76b727b09 100644
--- a/pym/portage/tests/util/futures/test_done_callback.py
+++ b/lib/portage/tests/util/futures/test_done_callback.py
diff --git a/pym/portage/tests/util/futures/test_iter_completed.py b/lib/portage/tests/util/futures/test_iter_completed.py
index 9ab410a9e..9ab410a9e 100644
--- a/pym/portage/tests/util/futures/test_iter_completed.py
+++ b/lib/portage/tests/util/futures/test_iter_completed.py
diff --git a/pym/portage/tests/util/futures/test_retry.py b/lib/portage/tests/util/futures/test_retry.py
index 7a1e76280..7a1e76280 100644
--- a/pym/portage/tests/util/futures/test_retry.py
+++ b/lib/portage/tests/util/futures/test_retry.py
diff --git a/pym/portage/tests/util/test_checksum.py b/lib/portage/tests/util/test_checksum.py
index 01ac8f9d0..01ac8f9d0 100644
--- a/pym/portage/tests/util/test_checksum.py
+++ b/lib/portage/tests/util/test_checksum.py
diff --git a/pym/portage/tests/util/test_digraph.py b/lib/portage/tests/util/test_digraph.py
index 01e075c99..01e075c99 100644
--- a/pym/portage/tests/util/test_digraph.py
+++ b/lib/portage/tests/util/test_digraph.py
diff --git a/pym/portage/tests/util/test_getconfig.py b/lib/portage/tests/util/test_getconfig.py
index e79fca4b9..e79fca4b9 100644
--- a/pym/portage/tests/util/test_getconfig.py
+++ b/lib/portage/tests/util/test_getconfig.py
diff --git a/pym/portage/tests/util/test_grabdict.py b/lib/portage/tests/util/test_grabdict.py
index e62a75dcc..e62a75dcc 100644
--- a/pym/portage/tests/util/test_grabdict.py
+++ b/lib/portage/tests/util/test_grabdict.py
diff --git a/lib/portage/tests/util/test_install_mask.py b/lib/portage/tests/util/test_install_mask.py
new file mode 100644
index 000000000..f651eb4b7
--- /dev/null
+++ b/lib/portage/tests/util/test_install_mask.py
@@ -0,0 +1,129 @@
+# Copyright 2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.util.install_mask import InstallMask
+
+
+class InstallMaskTestCase(TestCase):
+
+ def testTrailingSlash(self):
+ """
+ Test that elements with a trailing slash match a directory
+ but not a regular file.
+ """
+ cases = (
+ (
+ '/foo/bar/ -/foo/bar/*.foo -*.baz',
+ (
+ (
+ 'foo/bar/baz',
+ True,
+ ),
+ (
+ 'foo/bar/',
+ True,
+ ),
+ # /foo/bar/ does not match
+ (
+ 'foo/bar',
+ False,
+ ),
+ # this is excluded
+ (
+ 'foo/bar/baz.foo',
+ False,
+ ),
+ # this is excluded
+ (
+ 'foo/bar/baz.baz',
+ False,
+ ),
+ (
+ 'foo/bar/baz.bar',
+ True,
+ ),
+ )
+ ),
+ (
+ '/foo/bar -/foo/bar/*.foo -*.baz',
+ (
+ (
+ 'foo/bar/baz',
+ True,
+ ),
+ # /foo/bar matches both foo/bar/ and foo/bar
+ (
+ 'foo/bar/',
+ True,
+ ),
+ (
+ 'foo/bar',
+ True,
+ ),
+ # this is excluded
+ (
+ 'foo/bar/baz.foo',
+ False,
+ ),
+ # this is excluded
+ (
+ 'foo/bar/baz.baz',
+ False,
+ ),
+ (
+ 'foo/bar/baz.bar',
+ True,
+ ),
+ )
+ ),
+ (
+ '/foo*',
+ (
+ (
+ 'foo',
+ True,
+ ),
+ (
+ 'foo/',
+ True,
+ ),
+ (
+ 'foobar',
+ True,
+ ),
+ (
+ 'foobar/',
+ True,
+ ),
+ )
+ ),
+ (
+ '/foo*/',
+ (
+ (
+ 'foo',
+ False,
+ ),
+ (
+ 'foo/',
+ True,
+ ),
+ (
+ 'foobar',
+ False,
+ ),
+ (
+ 'foobar/',
+ True,
+ ),
+ )
+ ),
+ )
+
+ for install_mask_str, paths in cases:
+ install_mask = InstallMask(install_mask_str)
+ for path, expected in paths:
+ self.assertEqual(install_mask.match(path), expected,
+ 'unexpected match result for "{}" with path {}'.\
+ format(install_mask_str, path))
diff --git a/pym/portage/tests/util/test_normalizedPath.py b/lib/portage/tests/util/test_normalizedPath.py
index f993886ac..f993886ac 100644
--- a/pym/portage/tests/util/test_normalizedPath.py
+++ b/lib/portage/tests/util/test_normalizedPath.py
diff --git a/pym/portage/tests/util/test_stackDictList.py b/lib/portage/tests/util/test_stackDictList.py
index 25a723c69..25a723c69 100644
--- a/pym/portage/tests/util/test_stackDictList.py
+++ b/lib/portage/tests/util/test_stackDictList.py
diff --git a/pym/portage/tests/util/test_stackDicts.py b/lib/portage/tests/util/test_stackDicts.py
index 0c1dcdb78..0c1dcdb78 100644
--- a/pym/portage/tests/util/test_stackDicts.py
+++ b/lib/portage/tests/util/test_stackDicts.py
diff --git a/pym/portage/tests/util/test_stackLists.py b/lib/portage/tests/util/test_stackLists.py
index 3ba69ecd2..3ba69ecd2 100644
--- a/pym/portage/tests/util/test_stackLists.py
+++ b/lib/portage/tests/util/test_stackLists.py
diff --git a/pym/portage/tests/util/test_uniqueArray.py b/lib/portage/tests/util/test_uniqueArray.py
index aae88cce8..aae88cce8 100644
--- a/pym/portage/tests/util/test_uniqueArray.py
+++ b/lib/portage/tests/util/test_uniqueArray.py
diff --git a/pym/portage/tests/util/test_varExpand.py b/lib/portage/tests/util/test_varExpand.py
index d8addf2de..d8addf2de 100644
--- a/pym/portage/tests/util/test_varExpand.py
+++ b/lib/portage/tests/util/test_varExpand.py
diff --git a/pym/portage/tests/util/test_whirlpool.py b/lib/portage/tests/util/test_whirlpool.py
index fbe7cae56..fbe7cae56 100644
--- a/pym/portage/tests/util/test_whirlpool.py
+++ b/lib/portage/tests/util/test_whirlpool.py
diff --git a/pym/portage/tests/util/test_xattr.py b/lib/portage/tests/util/test_xattr.py
index 2e2564a6e..2e2564a6e 100644
--- a/pym/portage/tests/util/test_xattr.py
+++ b/lib/portage/tests/util/test_xattr.py
diff --git a/pym/portage/tests/versions/__init__.py b/lib/portage/tests/versions/__init__.py
index 2b14180bc..2b14180bc 100644
--- a/pym/portage/tests/versions/__init__.py
+++ b/lib/portage/tests/versions/__init__.py
diff --git a/pym/portage/tests/versions/__test__.py b/lib/portage/tests/versions/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/versions/__test__.py
+++ b/lib/portage/tests/versions/__test__.py
diff --git a/pym/portage/tests/versions/test_cpv_sort_key.py b/lib/portage/tests/versions/test_cpv_sort_key.py
index eeb0eae69..eeb0eae69 100644
--- a/pym/portage/tests/versions/test_cpv_sort_key.py
+++ b/lib/portage/tests/versions/test_cpv_sort_key.py
diff --git a/pym/portage/tests/versions/test_vercmp.py b/lib/portage/tests/versions/test_vercmp.py
index b55518f02..b55518f02 100644
--- a/pym/portage/tests/versions/test_vercmp.py
+++ b/lib/portage/tests/versions/test_vercmp.py
diff --git a/pym/portage/tests/xpak/__init__.py b/lib/portage/tests/xpak/__init__.py
index 9c3f52476..9c3f52476 100644
--- a/pym/portage/tests/xpak/__init__.py
+++ b/lib/portage/tests/xpak/__init__.py
diff --git a/pym/portage/tests/xpak/__test__.py b/lib/portage/tests/xpak/__test__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/tests/xpak/__test__.py
+++ b/lib/portage/tests/xpak/__test__.py
diff --git a/pym/portage/tests/xpak/test_decodeint.py b/lib/portage/tests/xpak/test_decodeint.py
index 2da573598..2da573598 100644
--- a/pym/portage/tests/xpak/test_decodeint.py
+++ b/lib/portage/tests/xpak/test_decodeint.py
diff --git a/pym/portage/update.py b/lib/portage/update.py
index 83fc3d2b4..83fc3d2b4 100644
--- a/pym/portage/update.py
+++ b/lib/portage/update.py
diff --git a/pym/portage/util/ExtractKernelVersion.py b/lib/portage/util/ExtractKernelVersion.py
index af4a4fe63..af4a4fe63 100644
--- a/pym/portage/util/ExtractKernelVersion.py
+++ b/lib/portage/util/ExtractKernelVersion.py
diff --git a/pym/portage/util/SlotObject.py b/lib/portage/util/SlotObject.py
index ba6215874..ba6215874 100644
--- a/pym/portage/util/SlotObject.py
+++ b/lib/portage/util/SlotObject.py
diff --git a/pym/portage/util/_ShelveUnicodeWrapper.py b/lib/portage/util/_ShelveUnicodeWrapper.py
index adbd5199f..adbd5199f 100644
--- a/pym/portage/util/_ShelveUnicodeWrapper.py
+++ b/lib/portage/util/_ShelveUnicodeWrapper.py
diff --git a/pym/portage/util/__init__.py b/lib/portage/util/__init__.py
index def9f2392..def9f2392 100644
--- a/pym/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
diff --git a/pym/portage/util/_async/AsyncFunction.py b/lib/portage/util/_async/AsyncFunction.py
index ad3d8333f..ad3d8333f 100644
--- a/pym/portage/util/_async/AsyncFunction.py
+++ b/lib/portage/util/_async/AsyncFunction.py
diff --git a/pym/portage/util/_async/AsyncScheduler.py b/lib/portage/util/_async/AsyncScheduler.py
index c6b523eaa..c6b523eaa 100644
--- a/pym/portage/util/_async/AsyncScheduler.py
+++ b/lib/portage/util/_async/AsyncScheduler.py
diff --git a/pym/portage/util/_async/AsyncTaskFuture.py b/lib/portage/util/_async/AsyncTaskFuture.py
index 581f5ea66..581f5ea66 100644
--- a/pym/portage/util/_async/AsyncTaskFuture.py
+++ b/lib/portage/util/_async/AsyncTaskFuture.py
diff --git a/pym/portage/util/_async/FileCopier.py b/lib/portage/util/_async/FileCopier.py
index 27e5ab4c0..27e5ab4c0 100644
--- a/pym/portage/util/_async/FileCopier.py
+++ b/lib/portage/util/_async/FileCopier.py
diff --git a/pym/portage/util/_async/FileDigester.py b/lib/portage/util/_async/FileDigester.py
index 72f06759c..72f06759c 100644
--- a/pym/portage/util/_async/FileDigester.py
+++ b/lib/portage/util/_async/FileDigester.py
diff --git a/pym/portage/util/_async/ForkProcess.py b/lib/portage/util/_async/ForkProcess.py
index d84e93833..d84e93833 100644
--- a/pym/portage/util/_async/ForkProcess.py
+++ b/lib/portage/util/_async/ForkProcess.py
diff --git a/pym/portage/util/_async/PipeLogger.py b/lib/portage/util/_async/PipeLogger.py
index a4258f350..a4258f350 100644
--- a/pym/portage/util/_async/PipeLogger.py
+++ b/lib/portage/util/_async/PipeLogger.py
diff --git a/pym/portage/util/_async/PipeReaderBlockingIO.py b/lib/portage/util/_async/PipeReaderBlockingIO.py
index 6933c9216..6933c9216 100644
--- a/pym/portage/util/_async/PipeReaderBlockingIO.py
+++ b/lib/portage/util/_async/PipeReaderBlockingIO.py
diff --git a/pym/portage/util/_async/PopenProcess.py b/lib/portage/util/_async/PopenProcess.py
index c1931327a..c1931327a 100644
--- a/pym/portage/util/_async/PopenProcess.py
+++ b/lib/portage/util/_async/PopenProcess.py
diff --git a/pym/portage/util/_async/SchedulerInterface.py b/lib/portage/util/_async/SchedulerInterface.py
index ec6417da1..ec6417da1 100644
--- a/pym/portage/util/_async/SchedulerInterface.py
+++ b/lib/portage/util/_async/SchedulerInterface.py
diff --git a/pym/portage/util/_async/TaskScheduler.py b/lib/portage/util/_async/TaskScheduler.py
index 35b3875a4..35b3875a4 100644
--- a/pym/portage/util/_async/TaskScheduler.py
+++ b/lib/portage/util/_async/TaskScheduler.py
diff --git a/pym/portage/util/_async/__init__.py b/lib/portage/util/_async/__init__.py
index 418ad862b..418ad862b 100644
--- a/pym/portage/util/_async/__init__.py
+++ b/lib/portage/util/_async/__init__.py
diff --git a/pym/portage/util/_async/run_main_scheduler.py b/lib/portage/util/_async/run_main_scheduler.py
index 10fed34b3..10fed34b3 100644
--- a/pym/portage/util/_async/run_main_scheduler.py
+++ b/lib/portage/util/_async/run_main_scheduler.py
diff --git a/pym/portage/util/_ctypes.py b/lib/portage/util/_ctypes.py
index aeceebcca..aeceebcca 100644
--- a/pym/portage/util/_ctypes.py
+++ b/lib/portage/util/_ctypes.py
diff --git a/pym/portage/util/_desktop_entry.py b/lib/portage/util/_desktop_entry.py
index 45949215a..45949215a 100644
--- a/pym/portage/util/_desktop_entry.py
+++ b/lib/portage/util/_desktop_entry.py
diff --git a/pym/portage/util/_dyn_libs/LinkageMapELF.py b/lib/portage/util/_dyn_libs/LinkageMapELF.py
index a063621c1..a063621c1 100644
--- a/pym/portage/util/_dyn_libs/LinkageMapELF.py
+++ b/lib/portage/util/_dyn_libs/LinkageMapELF.py
diff --git a/pym/portage/util/_dyn_libs/LinkageMapMachO.py b/lib/portage/util/_dyn_libs/LinkageMapMachO.py
index 5cfbadb6d..5cfbadb6d 100644
--- a/pym/portage/util/_dyn_libs/LinkageMapMachO.py
+++ b/lib/portage/util/_dyn_libs/LinkageMapMachO.py
diff --git a/pym/portage/util/_dyn_libs/LinkageMapPeCoff.py b/lib/portage/util/_dyn_libs/LinkageMapPeCoff.py
index fd0ab6ee8..fd0ab6ee8 100644
--- a/pym/portage/util/_dyn_libs/LinkageMapPeCoff.py
+++ b/lib/portage/util/_dyn_libs/LinkageMapPeCoff.py
diff --git a/pym/portage/util/_dyn_libs/LinkageMapXCoff.py b/lib/portage/util/_dyn_libs/LinkageMapXCoff.py
index 6c4c994b5..6c4c994b5 100644
--- a/pym/portage/util/_dyn_libs/LinkageMapXCoff.py
+++ b/lib/portage/util/_dyn_libs/LinkageMapXCoff.py
diff --git a/pym/portage/util/_dyn_libs/NeededEntry.py b/lib/portage/util/_dyn_libs/NeededEntry.py
index c52cfce3c..c52cfce3c 100644
--- a/pym/portage/util/_dyn_libs/NeededEntry.py
+++ b/lib/portage/util/_dyn_libs/NeededEntry.py
diff --git a/pym/portage/util/_dyn_libs/PreservedLibsRegistry.py b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
index f83b82a31..f83b82a31 100644
--- a/pym/portage/util/_dyn_libs/PreservedLibsRegistry.py
+++ b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
diff --git a/pym/portage/util/_dyn_libs/__init__.py b/lib/portage/util/_dyn_libs/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/util/_dyn_libs/__init__.py
+++ b/lib/portage/util/_dyn_libs/__init__.py
diff --git a/pym/portage/util/_dyn_libs/display_preserved_libs.py b/lib/portage/util/_dyn_libs/display_preserved_libs.py
index b16478d2b..b16478d2b 100644
--- a/pym/portage/util/_dyn_libs/display_preserved_libs.py
+++ b/lib/portage/util/_dyn_libs/display_preserved_libs.py
diff --git a/pym/portage/util/_dyn_libs/soname_deps.py b/lib/portage/util/_dyn_libs/soname_deps.py
index 544cbc8f1..544cbc8f1 100644
--- a/pym/portage/util/_dyn_libs/soname_deps.py
+++ b/lib/portage/util/_dyn_libs/soname_deps.py
diff --git a/pym/portage/util/_eventloop/EventLoop.py b/lib/portage/util/_eventloop/EventLoop.py
index df76374d9..ffd12cff9 100644
--- a/pym/portage/util/_eventloop/EventLoop.py
+++ b/lib/portage/util/_eventloop/EventLoop.py
@@ -832,7 +832,7 @@ class EventLoop(object):
return future.result()
- def call_soon(self, callback, *args):
+ def call_soon(self, callback, *args, **kwargs):
"""
Arrange for a callback to be called as soon as possible. The callback
is called after call_soon() returns, when control returns to the event
@@ -844,19 +844,38 @@ class EventLoop(object):
Any positional arguments after the callback will be passed to the
callback when it is called.
+ The context argument currently does nothing, but exists for minimal
+ interoperability with Future instances that require it for PEP 567.
+
An object compatible with asyncio.Handle is returned, which can
be used to cancel the callback.
@type callback: callable
@param callback: a function to call
+ @type context: contextvars.Context
+ @param context: An optional keyword-only context argument allows
+ specifying a custom contextvars.Context for the callback to run
+ in. The current context is used when no context is provided.
@return: a handle which can be used to cancel the callback
@rtype: asyncio.Handle (or compatible)
"""
+ try:
+ unexpected = next(key for key in kwargs if key != 'context')
+ except StopIteration:
+ pass
+ else:
+ raise TypeError("call_soon() got an unexpected keyword argument '%s'" % unexpected)
return self._handle(self._idle_add(
self._call_soon_callback(callback, args)), self)
- def call_soon_threadsafe(self, callback, *args):
+ def call_soon_threadsafe(self, callback, *args, **kwargs):
"""Like call_soon(), but thread safe."""
+ try:
+ unexpected = next(key for key in kwargs if key != 'context')
+ except StopIteration:
+ pass
+ else:
+ raise TypeError("call_soon_threadsafe() got an unexpected keyword argument '%s'" % unexpected)
# idle_add provides thread safety
return self._handle(self.idle_add(
self._call_soon_callback(callback, args)), self)
@@ -870,7 +889,7 @@ class EventLoop(object):
"""
return monotonic()
- def call_later(self, delay, callback, *args):
+ def call_later(self, delay, callback, *args, **kwargs):
"""
Arrange for the callback to be called after the given delay seconds
(either an int or float).
@@ -886,19 +905,32 @@ class EventLoop(object):
it is called. If you want the callback to be called with some named
arguments, use a closure or functools.partial().
+ The context argument currently does nothing, but exists for minimal
+ interoperability with Future instances that require it for PEP 567.
+
Use functools.partial to pass keywords to the callback.
@type delay: int or float
@param delay: delay seconds
@type callback: callable
@param callback: a function to call
+ @type context: contextvars.Context
+ @param context: An optional keyword-only context argument allows
+ specifying a custom contextvars.Context for the callback to run
+ in. The current context is used when no context is provided.
@return: a handle which can be used to cancel the callback
@rtype: asyncio.Handle (or compatible)
"""
+ try:
+ unexpected = next(key for key in kwargs if key != 'context')
+ except StopIteration:
+ pass
+ else:
+ raise TypeError("call_later() got an unexpected keyword argument '%s'" % unexpected)
return self._handle(self.timeout_add(
delay * 1000, self._call_soon_callback(callback, args)), self)
- def call_at(self, when, callback, *args):
+ def call_at(self, when, callback, *args, **kwargs):
"""
Arrange for the callback to be called at the given absolute
timestamp when (an int or float), using the same time reference as
@@ -915,9 +947,19 @@ class EventLoop(object):
@param when: absolute timestamp when to call callback
@type callback: callable
@param callback: a function to call
+ @type context: contextvars.Context
+ @param context: An optional keyword-only context argument allows
+ specifying a custom contextvars.Context for the callback to run
+ in. The current context is used when no context is provided.
@return: a handle which can be used to cancel the callback
@rtype: asyncio.Handle (or compatible)
"""
+ try:
+ unexpected = next(key for key in kwargs if key != 'context')
+ except StopIteration:
+ pass
+ else:
+ raise TypeError("call_at() got an unexpected keyword argument '%s'" % unexpected)
delta = when - self.time()
return self.call_later(delta if delta > 0 else 0, callback, *args)
diff --git a/pym/portage/util/_eventloop/PollConstants.py b/lib/portage/util/_eventloop/PollConstants.py
index d0270a996..d0270a996 100644
--- a/pym/portage/util/_eventloop/PollConstants.py
+++ b/lib/portage/util/_eventloop/PollConstants.py
diff --git a/pym/portage/util/_eventloop/PollSelectAdapter.py b/lib/portage/util/_eventloop/PollSelectAdapter.py
index 32b404b67..32b404b67 100644
--- a/pym/portage/util/_eventloop/PollSelectAdapter.py
+++ b/lib/portage/util/_eventloop/PollSelectAdapter.py
diff --git a/pym/portage/util/_eventloop/__init__.py b/lib/portage/util/_eventloop/__init__.py
index 418ad862b..418ad862b 100644
--- a/pym/portage/util/_eventloop/__init__.py
+++ b/lib/portage/util/_eventloop/__init__.py
diff --git a/pym/portage/util/_eventloop/asyncio_event_loop.py b/lib/portage/util/_eventloop/asyncio_event_loop.py
index c07b71103..ea0e03b23 100644
--- a/pym/portage/util/_eventloop/asyncio_event_loop.py
+++ b/lib/portage/util/_eventloop/asyncio_event_loop.py
@@ -2,7 +2,9 @@
# Distributed under the terms of the GNU General Public License v2
import os
+import pdb
import signal
+import sys
try:
import asyncio as _real_asyncio
@@ -53,6 +55,35 @@ class AsyncioEventLoop(_AbstractEventLoop):
self.get_debug = loop.get_debug
self._wakeup_fd = -1
+ if portage._internal_caller:
+ loop.set_exception_handler(self._internal_caller_exception_handler)
+
+ @staticmethod
+ def _internal_caller_exception_handler(loop, context):
+ """
+ An exception handler which drops to a pdb shell if std* streams
+ refer to a tty, and otherwise kills the process with SIGTERM.
+
+ In order to avoid potential interference with API consumers, this
+ implementation is only used when portage._internal_caller is True.
+ """
+ loop.default_exception_handler(context)
+ if 'exception' in context:
+ # If we have a tty then start the debugger, since in might
+ # aid in diagnosis of the problem. If there's no tty, then
+ # exit immediately.
+ if all(s.isatty() for s in (sys.stdout, sys.stderr, sys.stdin)):
+ pdb.set_trace()
+ else:
+ # Normally emerge will wait for all coroutines to complete
+ # after SIGTERM has been received. However, an unhandled
+ # exception will prevent the interrupted coroutine from
+ # completing, therefore use the default SIGTERM handler
+ # in order to ensure that emerge exits immediately (though
+ # uncleanly).
+ signal.signal(signal.SIGTERM, signal.SIG_DFL)
+ os.kill(os.getpid(), signal.SIGTERM)
+
def _create_future(self):
"""
Provide AbstractEventLoop.create_future() for python3.4.
diff --git a/pym/portage/util/_eventloop/global_event_loop.py b/lib/portage/util/_eventloop/global_event_loop.py
index 2f6371dc1..2f6371dc1 100644
--- a/pym/portage/util/_eventloop/global_event_loop.py
+++ b/lib/portage/util/_eventloop/global_event_loop.py
diff --git a/pym/portage/util/_get_vm_info.py b/lib/portage/util/_get_vm_info.py
index e8ad93805..e8ad93805 100644
--- a/pym/portage/util/_get_vm_info.py
+++ b/lib/portage/util/_get_vm_info.py
diff --git a/pym/portage/util/_info_files.py b/lib/portage/util/_info_files.py
index de44b0fdc..de44b0fdc 100644
--- a/pym/portage/util/_info_files.py
+++ b/lib/portage/util/_info_files.py
diff --git a/pym/portage/util/_path.py b/lib/portage/util/_path.py
index 6fbcb438c..6fbcb438c 100644
--- a/pym/portage/util/_path.py
+++ b/lib/portage/util/_path.py
diff --git a/pym/portage/util/_pty.py b/lib/portage/util/_pty.py
index a92f57543..a92f57543 100644
--- a/pym/portage/util/_pty.py
+++ b/lib/portage/util/_pty.py
diff --git a/pym/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py
index fc9db74a0..fc9db74a0 100644
--- a/pym/portage/util/_urlopen.py
+++ b/lib/portage/util/_urlopen.py
diff --git a/pym/portage/util/_xattr.py b/lib/portage/util/_xattr.py
index 9a8704d70..9a8704d70 100644
--- a/pym/portage/util/_xattr.py
+++ b/lib/portage/util/_xattr.py
diff --git a/pym/portage/util/backoff.py b/lib/portage/util/backoff.py
index ee39007ef..ee39007ef 100644
--- a/pym/portage/util/backoff.py
+++ b/lib/portage/util/backoff.py
diff --git a/pym/portage/util/changelog.py b/lib/portage/util/changelog.py
index 9fc5ab6df..9fc5ab6df 100644
--- a/pym/portage/util/changelog.py
+++ b/lib/portage/util/changelog.py
diff --git a/pym/portage/util/compression_probe.py b/lib/portage/util/compression_probe.py
index 29d0eedff..29d0eedff 100644
--- a/pym/portage/util/compression_probe.py
+++ b/lib/portage/util/compression_probe.py
diff --git a/pym/portage/util/configparser.py b/lib/portage/util/configparser.py
index c4c92a603..c4c92a603 100644
--- a/pym/portage/util/configparser.py
+++ b/lib/portage/util/configparser.py
diff --git a/pym/portage/util/cpuinfo.py b/lib/portage/util/cpuinfo.py
index 669e707b5..669e707b5 100644
--- a/pym/portage/util/cpuinfo.py
+++ b/lib/portage/util/cpuinfo.py
diff --git a/pym/portage/util/digraph.py b/lib/portage/util/digraph.py
index d279b7867..d279b7867 100644
--- a/pym/portage/util/digraph.py
+++ b/lib/portage/util/digraph.py
diff --git a/pym/portage/util/elf/__init__.py b/lib/portage/util/elf/__init__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/util/elf/__init__.py
+++ b/lib/portage/util/elf/__init__.py
diff --git a/pym/portage/util/elf/constants.py b/lib/portage/util/elf/constants.py
index 2704e85c3..2704e85c3 100644
--- a/pym/portage/util/elf/constants.py
+++ b/lib/portage/util/elf/constants.py
diff --git a/pym/portage/util/elf/header.py b/lib/portage/util/elf/header.py
index 3d2307402..3d2307402 100644
--- a/pym/portage/util/elf/header.py
+++ b/lib/portage/util/elf/header.py
diff --git a/pym/portage/util/endian/__init__.py b/lib/portage/util/endian/__init__.py
index 4725d3317..4725d3317 100644
--- a/pym/portage/util/endian/__init__.py
+++ b/lib/portage/util/endian/__init__.py
diff --git a/pym/portage/util/endian/decode.py b/lib/portage/util/endian/decode.py
index 9833b53ca..9833b53ca 100644
--- a/pym/portage/util/endian/decode.py
+++ b/lib/portage/util/endian/decode.py
diff --git a/pym/portage/util/env_update.py b/lib/portage/util/env_update.py
index a69114d80..a69114d80 100644
--- a/pym/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
diff --git a/pym/portage/util/file_copy/__init__.py b/lib/portage/util/file_copy/__init__.py
index 3d9b745be..3d9b745be 100644
--- a/pym/portage/util/file_copy/__init__.py
+++ b/lib/portage/util/file_copy/__init__.py
diff --git a/pym/portage/util/formatter.py b/lib/portage/util/formatter.py
index ce6799e3f..ce6799e3f 100644
--- a/pym/portage/util/formatter.py
+++ b/lib/portage/util/formatter.py
diff --git a/pym/portage/util/futures/__init__.py b/lib/portage/util/futures/__init__.py
index bdeac90d5..bdeac90d5 100644
--- a/pym/portage/util/futures/__init__.py
+++ b/lib/portage/util/futures/__init__.py
diff --git a/pym/portage/util/futures/_asyncio/__init__.py b/lib/portage/util/futures/_asyncio/__init__.py
index acfd59396..acfd59396 100644
--- a/pym/portage/util/futures/_asyncio/__init__.py
+++ b/lib/portage/util/futures/_asyncio/__init__.py
diff --git a/pym/portage/util/futures/_asyncio/tasks.py b/lib/portage/util/futures/_asyncio/tasks.py
index b20765b7a..b20765b7a 100644
--- a/pym/portage/util/futures/_asyncio/tasks.py
+++ b/lib/portage/util/futures/_asyncio/tasks.py
diff --git a/lib/portage/util/futures/compat_coroutine.py b/lib/portage/util/futures/compat_coroutine.py
new file mode 100644
index 000000000..17400b74d
--- /dev/null
+++ b/lib/portage/util/futures/compat_coroutine.py
@@ -0,0 +1,112 @@
+# Copyright 2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.util.futures import asyncio
+import functools
+
+
+def coroutine(generator_func):
+ """
+ A decorator for a generator function that behaves as coroutine function.
+ The generator should yield a Future instance in order to wait for it,
+ and the result becomes the result of the current yield-expression,
+ via the PEP 342 generator send() method.
+
+ The decorated function returns a Future which is done when the generator
+ is exhausted. The generator can return a value via the coroutine_return
+ function.
+
+ @param generator_func: A generator function that yields Futures, and
+ will receive the result of each Future as the result of the
+ corresponding yield-expression.
+ @type generator_func: function
+ @rtype: function
+ @return: A function which calls the given generator function and
+ returns a Future that is done when the generator is exhausted.
+ """
+ # Note that functools.partial does not work for decoration of
+ # methods, since it doesn't implement the descriptor protocol.
+ # This problem is solve by defining a wrapper function.
+ @functools.wraps(generator_func)
+ def wrapped(*args, **kwargs):
+ return _generator_future(generator_func, *args, **kwargs)
+ return wrapped
+
+
+def coroutine_return(result=None):
+ """
+ Terminate the current coroutine and set the result of the associated
+ Future.
+
+ @param result: of the current coroutine's Future
+ @type object
+ """
+ raise _CoroutineReturnValue(result)
+
+
+def _generator_future(generator_func, *args, **kwargs):
+ """
+ Call generator_func with the given arguments, and return a Future
+ that is done when the resulting generation is exhausted. If a
+ keyword argument named 'loop' is given, then it is used instead of
+ the default event loop.
+ """
+ loop = asyncio._wrap_loop(kwargs.get('loop'))
+ result = loop.create_future()
+ _GeneratorTask(generator_func(*args, **kwargs), result, loop=loop)
+ return result
+
+
+class _CoroutineReturnValue(Exception):
+ def __init__(self, result):
+ self.result = result
+
+
+class _GeneratorTask(object):
+ """
+ Asynchronously executes the generator to completion, waiting for
+ the result of each Future that it yields, and sending the result
+ to the generator.
+ """
+ def __init__(self, generator, result, loop):
+ self._generator = generator
+ self._result = result
+ self._loop = loop
+ result.add_done_callback(self._cancel_callback)
+ loop.call_soon(self._next)
+
+ def _cancel_callback(self, result):
+ if result.cancelled():
+ self._generator.close()
+
+ def _next(self, previous=None):
+ if self._result.cancelled():
+ if previous is not None:
+ # Consume exceptions, in order to avoid triggering
+ # the event loop's exception handler.
+ previous.cancelled() or previous.exception()
+ return
+ try:
+ if previous is None:
+ future = next(self._generator)
+ elif previous.cancelled():
+ self._generator.throw(asyncio.CancelledError())
+ future = next(self._generator)
+ elif previous.exception() is None:
+ future = self._generator.send(previous.result())
+ else:
+ self._generator.throw(previous.exception())
+ future = next(self._generator)
+
+ except _CoroutineReturnValue as e:
+ if not self._result.cancelled():
+ self._result.set_result(e.result)
+ except StopIteration:
+ if not self._result.cancelled():
+ self._result.set_result(None)
+ except Exception as e:
+ if not self._result.cancelled():
+ self._result.set_exception(e)
+ else:
+ future = asyncio.ensure_future(future, loop=self._loop)
+ future.add_done_callback(self._next)
diff --git a/pym/portage/util/futures/events.py b/lib/portage/util/futures/events.py
index b772bc242..b772bc242 100644
--- a/pym/portage/util/futures/events.py
+++ b/lib/portage/util/futures/events.py
diff --git a/pym/portage/util/futures/executor/__init__.py b/lib/portage/util/futures/executor/__init__.py
index e69de29bb..e69de29bb 100644
--- a/pym/portage/util/futures/executor/__init__.py
+++ b/lib/portage/util/futures/executor/__init__.py
diff --git a/pym/portage/util/futures/executor/fork.py b/lib/portage/util/futures/executor/fork.py
index 72844403c..72844403c 100644
--- a/pym/portage/util/futures/executor/fork.py
+++ b/lib/portage/util/futures/executor/fork.py
diff --git a/pym/portage/util/futures/extendedfutures.py b/lib/portage/util/futures/extendedfutures.py
index af384c745..af384c745 100644
--- a/pym/portage/util/futures/extendedfutures.py
+++ b/lib/portage/util/futures/extendedfutures.py
diff --git a/pym/portage/util/futures/futures.py b/lib/portage/util/futures/futures.py
index 9c9900d4c..9c9900d4c 100644
--- a/pym/portage/util/futures/futures.py
+++ b/lib/portage/util/futures/futures.py
diff --git a/pym/portage/util/futures/iter_completed.py b/lib/portage/util/futures/iter_completed.py
index 31b5e0c78..31b5e0c78 100644
--- a/pym/portage/util/futures/iter_completed.py
+++ b/lib/portage/util/futures/iter_completed.py
diff --git a/pym/portage/util/futures/retry.py b/lib/portage/util/futures/retry.py
index ccfc087ab..ccfc087ab 100644
--- a/pym/portage/util/futures/retry.py
+++ b/lib/portage/util/futures/retry.py
diff --git a/pym/portage/util/futures/transports.py b/lib/portage/util/futures/transports.py
index 60ea93073..60ea93073 100644
--- a/pym/portage/util/futures/transports.py
+++ b/lib/portage/util/futures/transports.py
diff --git a/pym/portage/util/futures/unix_events.py b/lib/portage/util/futures/unix_events.py
index 3381eaa7d..3381eaa7d 100644
--- a/pym/portage/util/futures/unix_events.py
+++ b/lib/portage/util/futures/unix_events.py
diff --git a/pym/portage/util/install_mask.py b/lib/portage/util/install_mask.py
index 1667d883a..32627eb05 100644
--- a/pym/portage/util/install_mask.py
+++ b/lib/portage/util/install_mask.py
@@ -41,10 +41,13 @@ class InstallMask(object):
pattern = pattern[1:]
# absolute path pattern
if pattern.startswith('/'):
+ # handle trailing slash for explicit directory match
+ if path.endswith('/'):
+ pattern = pattern.rstrip('/') + '/'
# match either exact path or one of parent dirs
# the latter is done via matching pattern/*
if (fnmatch.fnmatch(path, pattern[1:])
- or fnmatch.fnmatch(path, pattern[1:] + '/*')):
+ or fnmatch.fnmatch(path, pattern[1:].rstrip('/') + '/*')):
ret = is_inclusive
# filename
else:
@@ -118,7 +121,7 @@ def install_mask_dir(base_dir, install_mask, onerror=None):
except IndexError:
break
- if install_mask.match(dir_path[base_dir_len:]):
+ if install_mask.match(dir_path[base_dir_len:] + '/'):
try:
os.rmdir(dir_path)
except OSError:
diff --git a/pym/portage/util/iterators/MultiIterGroupBy.py b/lib/portage/util/iterators/MultiIterGroupBy.py
index 2c31f269f..2c31f269f 100644
--- a/pym/portage/util/iterators/MultiIterGroupBy.py
+++ b/lib/portage/util/iterators/MultiIterGroupBy.py
diff --git a/pym/portage/util/iterators/__init__.py b/lib/portage/util/iterators/__init__.py
index 7cd880e11..7cd880e11 100644
--- a/pym/portage/util/iterators/__init__.py
+++ b/lib/portage/util/iterators/__init__.py
diff --git a/pym/portage/util/lafilefixer.py b/lib/portage/util/lafilefixer.py
index 110010363..110010363 100644
--- a/pym/portage/util/lafilefixer.py
+++ b/lib/portage/util/lafilefixer.py
diff --git a/pym/portage/util/listdir.py b/lib/portage/util/listdir.py
index 2012e145f..2012e145f 100644
--- a/pym/portage/util/listdir.py
+++ b/lib/portage/util/listdir.py
diff --git a/pym/portage/util/locale.py b/lib/portage/util/locale.py
index 5b09945d6..5b09945d6 100644
--- a/pym/portage/util/locale.py
+++ b/lib/portage/util/locale.py
diff --git a/pym/portage/util/monotonic.py b/lib/portage/util/monotonic.py
index e50564851..e50564851 100644
--- a/pym/portage/util/monotonic.py
+++ b/lib/portage/util/monotonic.py
diff --git a/pym/portage/util/movefile.py b/lib/portage/util/movefile.py
index 5477a669f..5477a669f 100644
--- a/pym/portage/util/movefile.py
+++ b/lib/portage/util/movefile.py
diff --git a/pym/portage/util/mtimedb.py b/lib/portage/util/mtimedb.py
index 30922a901..30922a901 100644
--- a/pym/portage/util/mtimedb.py
+++ b/lib/portage/util/mtimedb.py
diff --git a/pym/portage/util/path.py b/lib/portage/util/path.py
index a0b96c7f3..a0b96c7f3 100644
--- a/pym/portage/util/path.py
+++ b/lib/portage/util/path.py
diff --git a/pym/portage/util/socks5.py b/lib/portage/util/socks5.py
index 74b0714eb..74b0714eb 100644
--- a/pym/portage/util/socks5.py
+++ b/lib/portage/util/socks5.py
diff --git a/pym/portage/util/whirlpool.py b/lib/portage/util/whirlpool.py
index 170ae73f8..170ae73f8 100644
--- a/pym/portage/util/whirlpool.py
+++ b/lib/portage/util/whirlpool.py
diff --git a/pym/portage/util/writeable_check.py b/lib/portage/util/writeable_check.py
index e5b14c023..e5b14c023 100644
--- a/pym/portage/util/writeable_check.py
+++ b/lib/portage/util/writeable_check.py
diff --git a/pym/portage/versions.py b/lib/portage/versions.py
index 0b1d50e7c..0b1d50e7c 100644
--- a/pym/portage/versions.py
+++ b/lib/portage/versions.py
diff --git a/pym/portage/xml/__init__.py b/lib/portage/xml/__init__.py
index 21a391aee..21a391aee 100644
--- a/pym/portage/xml/__init__.py
+++ b/lib/portage/xml/__init__.py
diff --git a/pym/portage/xml/metadata.py b/lib/portage/xml/metadata.py
index 9e48dddde..9e48dddde 100644
--- a/pym/portage/xml/metadata.py
+++ b/lib/portage/xml/metadata.py
diff --git a/pym/portage/xpak.py b/lib/portage/xpak.py
index e11f26e6c..e11f26e6c 100644
--- a/pym/portage/xpak.py
+++ b/lib/portage/xpak.py
diff --git a/man/color.map.5 b/man/color.map.5
index ee3fda983..288bf7fbd 100644
--- a/man/color.map.5
+++ b/man/color.map.5
@@ -206,4 +206,4 @@ Contains other variables.
.BR ebuild (1),
.BR ebuild (5)
.TP
-The \fI/usr/lib/portage/pym/portage/output.py\fR Python module.
+The \fI/usr/lib/portage/lib/portage/output.py\fR Python module.
diff --git a/man/make.conf.5 b/man/make.conf.5
index b0c1aa4f2..2c7b0fc17 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -1144,7 +1144,7 @@ This variable contains options that control the build behavior of several
packages. More information in \fBebuild\fR(5). Possible USE values
can be found in \fI/usr/portage/profiles/use.desc\fR.
.TP
-\fBUSE_ORDER\fR = \fI"env:pkg:conf:defaults:pkginternal:repo:env.d"\fR
+\fBUSE_ORDER\fR = \fI"env:pkg:conf:defaults:pkginternal:features:repo:env.d"\fR
Determines the precedence of layers in the incremental stacking of the USE
variable. Precedence decreases from left to right such that env overrides
pkg, pkg overrides conf, and so forth.
@@ -1173,6 +1173,10 @@ USE from make.defaults and package.use in the profile
.B pkginternal
USE from \fBebuild\fR(5) IUSE defaults
.TP
+.B features
+Flags implied by FEATURES. Currently includes USE=\fBtest\fR
+for FEATURES=\fBtest\fR.
+.TP
.B repo
USE from make.defaults and package.use in the repo's profiles/ top dir
(e.g. /usr/portage/profiles/package.use) (see \fBportage\fR(5))
diff --git a/man/portage.5 b/man/portage.5
index 5adb07d82..cd9d5036d 100644
--- a/man/portage.5
+++ b/man/portage.5
@@ -973,11 +973,20 @@ files). Defaults to true.
.br
Valid values: true, false.
.TP
+.B sync\-allow\-hardlinks = yes|no
+Allow sync plugins to use hardlinks in order to ensure that a repository
+remains in a valid state if something goes wrong during the sync operation.
+For example, if signature verification fails during a sync operation,
+the previous state of the repository will be preserved. This option may
+conflict with configurations that restrict the use of hardlinks, such as
+overlay filesystems.
+.TP
.B sync\-cvs\-repo
Specifies CVS repository.
.TP
.B sync\-depth
-This is a deprecated alias for the \fBclone\-depth\fR option.
+Specifies sync depth to use for DVCS repositories. If set to 0, the
+depth is unlimited. Defaults to 0.
.TP
.B sync\-git\-clone\-env
Set environment variables for git when cloning repository (git clone).
@@ -1118,6 +1127,18 @@ when 0. Defaults to disabled.
.B sync\-rsync\-verify\-metamanifest = yes|no
Require the repository to contain a signed MetaManifest and verify
it using \fBapp\-portage/gemato\fR. Defaults to no.
+.TP
+.B sync\-webrsync\-delta = true|false
+Use \fBapp\-portage/emerge\-delta\-webrsync\fR to minimize bandwidth.
+Defaults to false.
+.TP
+.B sync\-webrsync\-keep\-snapshots = true|false
+Keep snapshots in \fBDISTDIR\fR (do not delete). Defaults to false.
+.TP
+.B sync\-webrsync\-verify\-signature = true|false
+Require the detached tarball signature to contain a good OpenPGP
+signature. This uses the OpenPGP key(ring) specified by the
+sync\-openpgp\-key\-path setting. Defaults to false.
.RE
diff --git a/man/ru/color.map.5 b/man/ru/color.map.5
index 804e7197c..7849ffdba 100644
--- a/man/ru/color.map.5
+++ b/man/ru/color.map.5
@@ -209,7 +209,7 @@ Arfrever Frehtes Taifersar Arahesis <arfrever@apache.org>
.BR ebuild (1),
.BR ebuild (5)
.TP
-Модуль \fIPython /usr/lib/portage/pym/portage/output.py\fR.
+Модуль \fIPython /usr/lib/portage/lib/portage/output.py\fR.
.SH "ПЕРЕВОД"
.nf
\fRПереводчик\fR - Елена Гаврилова <e.vl.gavrilova@yandex.ru>
diff --git a/misc/emerge-delta-webrsync b/misc/emerge-delta-webrsync
index 0e4e123fd..4e8133fae 100755
--- a/misc/emerge-delta-webrsync
+++ b/misc/emerge-delta-webrsync
@@ -4,7 +4,15 @@
# Author: Brian Harring <ferringb@gentoo.org>, karltk@gentoo.org originally.
# Rewritten from the old, Perl-based emerge-webrsync script
+# repos.conf configuration for use with emerge --sync and emaint sync
+# using keyring from app-crypt/openpgp-keys-gentoo-release:
+# [gentoo]
+# sync-type = webrsync
+# sync-webrsync-delta = true
+# sync-webrsync-verify-signature = true
+# sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
#
+# Alternative (legacy) PORTAGE_GPG_DIR configuration:
# gpg key import
# KEY_ID=0x96D8BF6D
# gpg --homedir /etc/portage/gnupg --keyserver subkeys.pgp.net --recv-keys $KEY_ID
@@ -106,7 +114,14 @@ if [[ ! -d $STATE_DIR ]]; then
exit -2
fi
-if has webrsync-gpg ${FEATURES} ; then
+if has $(__repo_attr "${repo_name}" sync-webrsync-verify-signature | \
+ LC_ALL=C tr '[:upper:]' '[:lower:]') true yes; then
+ if [[ ! -d ${PORTAGE_GPG_DIR} ]]; then
+ eecho "Do not call ${argv0##*/} directly, instead call emerge --sync or emaint sync."
+ exit 1
+ fi
+ WEBSYNC_VERIFY_SIGNATURE=1
+elif has webrsync-gpg ${FEATURES}; then
WEBSYNC_VERIFY_SIGNATURE=1
else
WEBSYNC_VERIFY_SIGNATURE=0
@@ -283,6 +298,13 @@ check_file_signature() {
fi
done <<< "${gnupg_status}"
fi
+ if [[ ${r} -ne 0 ]]; then
+ # Exit early since it's typically inappropriate to
+ # try other mirrors in this case (it may indicate
+ # a keyring problem).
+ eecho "signature verification failed"
+ exit 1
+ fi
else
eecho "cannot check signature: gpg binary not found"
exit 1
@@ -320,7 +342,7 @@ sync_local() {
if type -P tarsync > /dev/null ; then
local chown_opts="-o ${ownership%:*} -g ${ownership#*:}"
chown ${ownership} "${repo_location}" > /dev/null 2>&1 || chown_opts=""
- if ! tarsync $(__vecho -v) -s 1 ${chown_opts} \
+ if ! tarsync $(__vecho -v 2>&1) -s 1 ${chown_opts} \
-e /distfiles -e /packages -e /local "${file}" "${repo_location}"; then
eecho "tarsync failed; tarball is corrupt? (${file})"
return 1
diff --git a/pym/portage/sync/modules/webrsync/webrsync.py b/pym/portage/sync/modules/webrsync/webrsync.py
deleted file mode 100644
index 3d79f4557..000000000
--- a/pym/portage/sync/modules/webrsync/webrsync.py
+++ /dev/null
@@ -1,70 +0,0 @@
-
-'''WebRsync module for portage'''
-
-import logging
-
-import portage
-from portage import os
-from portage.util import writemsg_level
-from portage.output import create_color_func
-good = create_color_func("GOOD")
-bad = create_color_func("BAD")
-warn = create_color_func("WARN")
-from portage.sync.syncbase import SyncBase
-
-
-class WebRsync(SyncBase):
- '''WebRSync sync class'''
-
- short_desc = "Perform sync operations on webrsync based repositories"
-
- @staticmethod
- def name():
- return "WebRSync"
-
-
- def __init__(self):
- SyncBase.__init__(self, 'emerge-webrsync', '>=sys-apps/portage-2.3')
-
-
- def sync(self, **kwargs):
- '''Sync the repository'''
- if kwargs:
- self._kwargs(kwargs)
-
- if not self.has_bin:
- return (1, False)
-
- # filter these out to prevent gpg errors
- for var in ['uid', 'gid', 'groups']:
- self.spawn_kwargs.pop(var, None)
-
- exitcode = portage.process.spawn_bash("%s" % \
- (self.bin_command),
- **self.spawn_kwargs)
- if exitcode != os.EX_OK:
- msg = "!!! emerge-webrsync error in %s" % self.repo.location
- self.logger(self.xterm_titles, msg)
- writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1)
- return (exitcode, False)
- return (exitcode, True)
-
-
-class PyWebRsync(SyncBase):
- '''WebRSync sync class'''
-
- short_desc = "Perform sync operations on webrsync based repositories"
-
- @staticmethod
- def name():
- return "WebRSync"
-
-
- def __init__(self):
- SyncBase.__init__(self, None, '>=sys-apps/portage-2.3')
-
-
- def sync(self, **kwargs):
- '''Sync the repository'''
- pass
-
diff --git a/pym/portage/tests/resolver/test_features_test_use.py b/pym/portage/tests/resolver/test_features_test_use.py
deleted file mode 100644
index bdd179d7a..000000000
--- a/pym/portage/tests/resolver/test_features_test_use.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright 2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from portage.tests import TestCase
-from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
- ResolverPlaygroundTestCase)
-
-class FeaturesTestUse(TestCase):
-
- def testFeaturesTestUse(self):
- ebuilds = {
- "dev-libs/A-1" : {
- "IUSE": "test"
- },
- "dev-libs/B-1" : {
- "IUSE": "test foo"
- },
- }
-
- installed = {
- "dev-libs/A-1" : {
- "USE": "",
- "IUSE": "test"
- },
- "dev-libs/B-1" : {
- "USE": "foo",
- "IUSE": "test foo"
- },
- }
-
- user_config = {
- "make.conf" : ("FEATURES=test", "USE=\"-test -foo\"")
- }
-
- test_cases = (
-
- # USE=test state should not trigger --newuse rebuilds, as
- # specified in bug #373209, comment #3.
- ResolverPlaygroundTestCase(
- ["dev-libs/A"],
- options = {"--newuse": True, "--selective": True},
- success = True,
- mergelist = []),
-
- # USE=-test -> USE=test, with USE=test forced by FEATURES=test
- ResolverPlaygroundTestCase(
- ["dev-libs/A"],
- options = {},
- success = True,
- mergelist = ["dev-libs/A-1"]),
-
- # USE=foo -> USE=-foo, with USE=test forced by FEATURES=test
- ResolverPlaygroundTestCase(
- ["dev-libs/B"],
- options = {"--newuse": True, "--selective": True},
- success = True,
- mergelist = ["dev-libs/B-1"]),
- )
-
- playground = ResolverPlayground(ebuilds=ebuilds,
- installed=installed, user_config=user_config, debug=False)
- try:
- for test_case in test_cases:
- playground.run_TestCase(test_case)
- self.assertEqual(test_case.test_success, True, test_case.fail_msg)
- finally:
- playground.cleanup()
-
diff --git a/repoman/RELEASE-NOTES b/repoman/RELEASE-NOTES
index 12ddefc20..47efd34bb 100644
--- a/repoman/RELEASE-NOTES
+++ b/repoman/RELEASE-NOTES
@@ -1,6 +1,13 @@
Release Notes; upgrade information mainly.
Features/major bugfixes are listed in NEWS
+repoman-2.3.10
+==================================
+* Bug Fixes:
+ - Bug 649482 warn about = deps without revision
+ - Bug 660982 populate implicit IUSE for empty profile
+
+
repoman-2.3.8
==================================
* The --experimental-repository-modules=<y|n> option enables a new
diff --git a/repoman/TEST-NOTES b/repoman/TEST-NOTES
index f9c6ab0cd..8be5f9cf3 100644
--- a/repoman/TEST-NOTES
+++ b/repoman/TEST-NOTES
@@ -4,7 +4,7 @@ UnitTests
Portage has some tests that use the unittest framework that ships with python (2.3-2.4ish)
Tests have a specific naming convention.
-in pym/portage/tests/ there is a runTest script that invokes pym/portage/tests/__init__.py
+in lib/portage/tests/ there is a runTest script that invokes lib/portage/tests/__init__.py
This init looks at a hardcoded list of test dirs to search for tests.
If you add a new dir and don't see your new tests, make sure that the dir is in this list.
@@ -15,14 +15,14 @@ you should have files of the form test_${function}.py.
So if I was to write a vercmp test, and vercmp is in portage_versions.
-pym/portage/tests/portage_versions/test_vercmp.py
+lib/portage/tests/portage_versions/test_vercmp.py
would be the filename.
The __init__.py file now does recursive tests, but you need to tell it so. For example, if
you had cache tests the dir format would be something like...
-pym/portage/tests/cache/flat_hash/test_foo.py
+lib/portage/tests/cache/flat_hash/test_foo.py
and you would put "cache/flat_hash" into the testDirs variable in __init__.py.
diff --git a/repoman/bin/repoman b/repoman/bin/repoman
index ab04d56ca..873987f33 100755
--- a/repoman/bin/repoman
+++ b/repoman/bin/repoman
@@ -29,11 +29,11 @@ from os import path as osp
here = osp.realpath(__file__)
if osp.isfile(osp.join(osp.dirname(osp.dirname(here)), ".repoman_not_installed")):
# Add the repoman subpkg
- pym_path = osp.join(osp.dirname(osp.dirname(here)), "pym")
+ pym_path = osp.join(osp.dirname(osp.dirname(here)), "lib")
sys.path.insert(0, pym_path)
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.dirname(here))), ".portage_not_installed")):
# Add the base portage pkg
- pym_path = osp.join(osp.dirname(osp.dirname(osp.dirname(here))), "pym")
+ pym_path = osp.join(osp.dirname(osp.dirname(osp.dirname(here))), "lib")
sys.path.insert(0, pym_path)
import portage
diff --git a/repoman/cnf/qa_data/qa_data.yaml b/repoman/cnf/qa_data/qa_data.yaml
index 32994e013..6aad56b8c 100644
--- a/repoman/cnf/qa_data/qa_data.yaml
+++ b/repoman/cnf/qa_data/qa_data.yaml
@@ -26,6 +26,7 @@ qahelp:
badinexp: "User-visible ebuilds with unsatisfied dependencies (matched against *visible* ebuilds) in experimental arch"
badmaskedinexp: "Masked ebuilds with unsatisfied dependencies (matched against *all* ebuilds) in experimental arch"
badtilde: "Uses the ~ dep operator with a non-zero revision part, which is useless (the revision is ignored)"
+ equalsversion: "Suspicious =-dependency with a specific version and no rev. Please either use ~ if any revision is acceptable, or append -r0 to silence the warning."
missingslot: "RDEPEND matches more than one SLOT but does not specify a slot and/or use the := or :* slot operator"
perlcore: "This ebuild directly depends on a package in perl-core; it should use the corresponding virtual instead."
syntax: "Syntax error in dependency string (usually an extra/missing space/parenthesis)"
@@ -82,6 +83,7 @@ qahelp:
missing: "Ebuilds that have a missing or empty KEYWORDS variable"
stable: "Ebuilds that have been added directly with stable KEYWORDS"
stupid: "Ebuilds that use KEYWORDS=-* instead of package.mask"
+ unsorted: "Ebuilds that contain KEYWORDS which are not sorted alphabetically."
LICENSE:
deprecated: "This ebuild is listing a deprecated license."
invalid: "This ebuild is listing a license that doesnt exist in portages license/ dir."
diff --git a/repoman/cnf/repository/qa_data.yaml b/repoman/cnf/repository/qa_data.yaml
index 4aa961633..c96ce46a9 100644
--- a/repoman/cnf/repository/qa_data.yaml
+++ b/repoman/cnf/repository/qa_data.yaml
@@ -44,6 +44,7 @@ qawarnings:
- dependency.badindev
- dependency.badmaskedindev
- dependency.badtilde
+ - dependency.equalsversion
- dependency.missingslot
- dependency.perlcore
- DESCRIPTION.toolong
@@ -66,6 +67,7 @@ qawarnings:
- KEYWORDS.dropped
- KEYWORDS.stupid
- KEYWORDS.missing
+ - KEYWORDS.unsorted
- LICENSE.deprecated
- LICENSE.virtual
- metadata.warning
diff --git a/repoman/pym/repoman/__init__.py b/repoman/lib/repoman/__init__.py
index 89779b95c..89779b95c 100644
--- a/repoman/pym/repoman/__init__.py
+++ b/repoman/lib/repoman/__init__.py
diff --git a/repoman/pym/repoman/_portage.py b/repoman/lib/repoman/_portage.py
index 0f611f761..0f611f761 100644
--- a/repoman/pym/repoman/_portage.py
+++ b/repoman/lib/repoman/_portage.py
diff --git a/repoman/pym/repoman/_subprocess.py b/repoman/lib/repoman/_subprocess.py
index b6c19bda3..b6c19bda3 100644
--- a/repoman/pym/repoman/_subprocess.py
+++ b/repoman/lib/repoman/_subprocess.py
diff --git a/repoman/pym/repoman/actions.py b/repoman/lib/repoman/actions.py
index 8e23322c8..8e23322c8 100644
--- a/repoman/pym/repoman/actions.py
+++ b/repoman/lib/repoman/actions.py
diff --git a/repoman/pym/repoman/argparser.py b/repoman/lib/repoman/argparser.py
index b87df95cd..b87df95cd 100644
--- a/repoman/pym/repoman/argparser.py
+++ b/repoman/lib/repoman/argparser.py
diff --git a/repoman/pym/repoman/check_missingslot.py b/repoman/lib/repoman/check_missingslot.py
index 4a3c57b2c..4a3c57b2c 100644
--- a/repoman/pym/repoman/check_missingslot.py
+++ b/repoman/lib/repoman/check_missingslot.py
diff --git a/repoman/pym/repoman/checks/__init__.py b/repoman/lib/repoman/checks/__init__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/checks/__init__.py
+++ b/repoman/lib/repoman/checks/__init__.py
diff --git a/repoman/pym/repoman/checks/herds/__init__.py b/repoman/lib/repoman/checks/herds/__init__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/checks/herds/__init__.py
+++ b/repoman/lib/repoman/checks/herds/__init__.py
diff --git a/repoman/pym/repoman/checks/herds/herdbase.py b/repoman/lib/repoman/checks/herds/herdbase.py
index ebe6a19b4..ebe6a19b4 100644
--- a/repoman/pym/repoman/checks/herds/herdbase.py
+++ b/repoman/lib/repoman/checks/herds/herdbase.py
diff --git a/repoman/pym/repoman/checks/herds/metadata.py b/repoman/lib/repoman/checks/herds/metadata.py
index b4a433ed7..b4a433ed7 100644
--- a/repoman/pym/repoman/checks/herds/metadata.py
+++ b/repoman/lib/repoman/checks/herds/metadata.py
diff --git a/repoman/pym/repoman/config.py b/repoman/lib/repoman/config.py
index 578bbccde..578bbccde 100644
--- a/repoman/pym/repoman/config.py
+++ b/repoman/lib/repoman/config.py
diff --git a/repoman/pym/repoman/copyrights.py b/repoman/lib/repoman/copyrights.py
index 94257c942..94257c942 100644
--- a/repoman/pym/repoman/copyrights.py
+++ b/repoman/lib/repoman/copyrights.py
diff --git a/repoman/pym/repoman/errors.py b/repoman/lib/repoman/errors.py
index 9cf113ba0..9cf113ba0 100644
--- a/repoman/pym/repoman/errors.py
+++ b/repoman/lib/repoman/errors.py
diff --git a/repoman/pym/repoman/gpg.py b/repoman/lib/repoman/gpg.py
index a3c12b3c9..a3c12b3c9 100644
--- a/repoman/pym/repoman/gpg.py
+++ b/repoman/lib/repoman/gpg.py
diff --git a/repoman/pym/repoman/main.py b/repoman/lib/repoman/main.py
index 81e2ff61e..81e2ff61e 100755
--- a/repoman/pym/repoman/main.py
+++ b/repoman/lib/repoman/main.py
diff --git a/repoman/pym/repoman/metadata.py b/repoman/lib/repoman/metadata.py
index 11ec1aaf8..11ec1aaf8 100644
--- a/repoman/pym/repoman/metadata.py
+++ b/repoman/lib/repoman/metadata.py
diff --git a/repoman/pym/repoman/modules/__init__.py b/repoman/lib/repoman/modules/__init__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/modules/__init__.py
+++ b/repoman/lib/repoman/modules/__init__.py
diff --git a/repoman/pym/repoman/modules/commit/__init__.py b/repoman/lib/repoman/modules/commit/__init__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/modules/commit/__init__.py
+++ b/repoman/lib/repoman/modules/commit/__init__.py
diff --git a/repoman/pym/repoman/modules/commit/manifest.py b/repoman/lib/repoman/modules/commit/manifest.py
index b338a5b40..b338a5b40 100644
--- a/repoman/pym/repoman/modules/commit/manifest.py
+++ b/repoman/lib/repoman/modules/commit/manifest.py
diff --git a/repoman/pym/repoman/modules/commit/repochecks.py b/repoman/lib/repoman/modules/commit/repochecks.py
index bedbdaf34..bedbdaf34 100644
--- a/repoman/pym/repoman/modules/commit/repochecks.py
+++ b/repoman/lib/repoman/modules/commit/repochecks.py
diff --git a/repoman/pym/repoman/modules/linechecks/__init__.py b/repoman/lib/repoman/modules/linechecks/__init__.py
index 8b1378917..8b1378917 100644
--- a/repoman/pym/repoman/modules/linechecks/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/assignment/__init__.py b/repoman/lib/repoman/modules/linechecks/assignment/__init__.py
index b95a25a74..b95a25a74 100644
--- a/repoman/pym/repoman/modules/linechecks/assignment/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/assignment/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/assignment/assignment.py b/repoman/lib/repoman/modules/linechecks/assignment/assignment.py
index 33bef8a08..33bef8a08 100644
--- a/repoman/pym/repoman/modules/linechecks/assignment/assignment.py
+++ b/repoman/lib/repoman/modules/linechecks/assignment/assignment.py
diff --git a/repoman/pym/repoman/modules/linechecks/base.py b/repoman/lib/repoman/modules/linechecks/base.py
index 4e3d6f0b4..4e3d6f0b4 100644
--- a/repoman/pym/repoman/modules/linechecks/base.py
+++ b/repoman/lib/repoman/modules/linechecks/base.py
diff --git a/repoman/pym/repoman/modules/linechecks/config.py b/repoman/lib/repoman/modules/linechecks/config.py
index 6e4c5314e..6e4c5314e 100644
--- a/repoman/pym/repoman/modules/linechecks/config.py
+++ b/repoman/lib/repoman/modules/linechecks/config.py
diff --git a/repoman/pym/repoman/modules/linechecks/controller.py b/repoman/lib/repoman/modules/linechecks/controller.py
index 7082a5d02..7082a5d02 100644
--- a/repoman/pym/repoman/modules/linechecks/controller.py
+++ b/repoman/lib/repoman/modules/linechecks/controller.py
diff --git a/repoman/pym/repoman/modules/linechecks/depend/__init__.py b/repoman/lib/repoman/modules/linechecks/depend/__init__.py
index 2ea95347e..2ea95347e 100644
--- a/repoman/pym/repoman/modules/linechecks/depend/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/depend/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/depend/implicit.py b/repoman/lib/repoman/modules/linechecks/depend/implicit.py
index f7b458b68..f7b458b68 100644
--- a/repoman/pym/repoman/modules/linechecks/depend/implicit.py
+++ b/repoman/lib/repoman/modules/linechecks/depend/implicit.py
diff --git a/repoman/pym/repoman/modules/linechecks/deprecated/__init__.py b/repoman/lib/repoman/modules/linechecks/deprecated/__init__.py
index 258683345..258683345 100644
--- a/repoman/pym/repoman/modules/linechecks/deprecated/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/deprecated/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/deprecated/deprecated.py b/repoman/lib/repoman/modules/linechecks/deprecated/deprecated.py
index b33852e74..b33852e74 100644
--- a/repoman/pym/repoman/modules/linechecks/deprecated/deprecated.py
+++ b/repoman/lib/repoman/modules/linechecks/deprecated/deprecated.py
diff --git a/repoman/pym/repoman/modules/linechecks/deprecated/inherit.py b/repoman/lib/repoman/modules/linechecks/deprecated/inherit.py
index 77ad4f625..77ad4f625 100644
--- a/repoman/pym/repoman/modules/linechecks/deprecated/inherit.py
+++ b/repoman/lib/repoman/modules/linechecks/deprecated/inherit.py
diff --git a/repoman/pym/repoman/modules/linechecks/do/__init__.py b/repoman/lib/repoman/modules/linechecks/do/__init__.py
index dc5af701c..dc5af701c 100644
--- a/repoman/pym/repoman/modules/linechecks/do/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/do/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/do/dosym.py b/repoman/lib/repoman/modules/linechecks/do/dosym.py
index bab4dad03..bab4dad03 100644
--- a/repoman/pym/repoman/modules/linechecks/do/dosym.py
+++ b/repoman/lib/repoman/modules/linechecks/do/dosym.py
diff --git a/repoman/pym/repoman/modules/linechecks/eapi/__init__.py b/repoman/lib/repoman/modules/linechecks/eapi/__init__.py
index 31993df20..31993df20 100644
--- a/repoman/pym/repoman/modules/linechecks/eapi/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/eapi/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/eapi/checks.py b/repoman/lib/repoman/modules/linechecks/eapi/checks.py
index de899c061..de899c061 100644
--- a/repoman/pym/repoman/modules/linechecks/eapi/checks.py
+++ b/repoman/lib/repoman/modules/linechecks/eapi/checks.py
diff --git a/repoman/pym/repoman/modules/linechecks/eapi/definition.py b/repoman/lib/repoman/modules/linechecks/eapi/definition.py
index 410bad1c7..410bad1c7 100644
--- a/repoman/pym/repoman/modules/linechecks/eapi/definition.py
+++ b/repoman/lib/repoman/modules/linechecks/eapi/definition.py
diff --git a/repoman/pym/repoman/modules/linechecks/emake/__init__.py b/repoman/lib/repoman/modules/linechecks/emake/__init__.py
index cecdc5fcf..cecdc5fcf 100644
--- a/repoman/pym/repoman/modules/linechecks/emake/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/emake/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/emake/emake.py b/repoman/lib/repoman/modules/linechecks/emake/emake.py
index e1e3e638e..e1e3e638e 100644
--- a/repoman/pym/repoman/modules/linechecks/emake/emake.py
+++ b/repoman/lib/repoman/modules/linechecks/emake/emake.py
diff --git a/repoman/pym/repoman/modules/linechecks/gentoo_header/__init__.py b/repoman/lib/repoman/modules/linechecks/gentoo_header/__init__.py
index 205cc32c2..205cc32c2 100644
--- a/repoman/pym/repoman/modules/linechecks/gentoo_header/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/gentoo_header/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/gentoo_header/header.py b/repoman/lib/repoman/modules/linechecks/gentoo_header/header.py
index 4b75fc4b5..4b75fc4b5 100644
--- a/repoman/pym/repoman/modules/linechecks/gentoo_header/header.py
+++ b/repoman/lib/repoman/modules/linechecks/gentoo_header/header.py
diff --git a/repoman/pym/repoman/modules/linechecks/helpers/__init__.py b/repoman/lib/repoman/modules/linechecks/helpers/__init__.py
index 0f41f0136..0f41f0136 100644
--- a/repoman/pym/repoman/modules/linechecks/helpers/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/helpers/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/helpers/offset.py b/repoman/lib/repoman/modules/linechecks/helpers/offset.py
index 5d7624a68..5d7624a68 100644
--- a/repoman/pym/repoman/modules/linechecks/helpers/offset.py
+++ b/repoman/lib/repoman/modules/linechecks/helpers/offset.py
diff --git a/repoman/pym/repoman/modules/linechecks/nested/__init__.py b/repoman/lib/repoman/modules/linechecks/nested/__init__.py
index 6c8a70a52..6c8a70a52 100644
--- a/repoman/pym/repoman/modules/linechecks/nested/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/nested/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/nested/nested.py b/repoman/lib/repoman/modules/linechecks/nested/nested.py
index 06b272772..06b272772 100644
--- a/repoman/pym/repoman/modules/linechecks/nested/nested.py
+++ b/repoman/lib/repoman/modules/linechecks/nested/nested.py
diff --git a/repoman/pym/repoman/modules/linechecks/nested/nesteddie.py b/repoman/lib/repoman/modules/linechecks/nested/nesteddie.py
index 6c1e4be9f..6c1e4be9f 100644
--- a/repoman/pym/repoman/modules/linechecks/nested/nesteddie.py
+++ b/repoman/lib/repoman/modules/linechecks/nested/nesteddie.py
diff --git a/repoman/pym/repoman/modules/linechecks/patches/__init__.py b/repoman/lib/repoman/modules/linechecks/patches/__init__.py
index 4fe0fcf5e..4fe0fcf5e 100644
--- a/repoman/pym/repoman/modules/linechecks/patches/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/patches/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/patches/patches.py b/repoman/lib/repoman/modules/linechecks/patches/patches.py
index 63651cd7c..63651cd7c 100644
--- a/repoman/pym/repoman/modules/linechecks/patches/patches.py
+++ b/repoman/lib/repoman/modules/linechecks/patches/patches.py
diff --git a/repoman/pym/repoman/modules/linechecks/phases/__init__.py b/repoman/lib/repoman/modules/linechecks/phases/__init__.py
index b3228c0f7..b3228c0f7 100644
--- a/repoman/pym/repoman/modules/linechecks/phases/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/phases/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/phases/phase.py b/repoman/lib/repoman/modules/linechecks/phases/phase.py
index acc3a1e1d..acc3a1e1d 100644
--- a/repoman/pym/repoman/modules/linechecks/phases/phase.py
+++ b/repoman/lib/repoman/modules/linechecks/phases/phase.py
diff --git a/repoman/pym/repoman/modules/linechecks/portage/__init__.py b/repoman/lib/repoman/modules/linechecks/portage/__init__.py
index b9a84b507..b9a84b507 100644
--- a/repoman/pym/repoman/modules/linechecks/portage/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/portage/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/portage/internal.py b/repoman/lib/repoman/modules/linechecks/portage/internal.py
index 869337221..869337221 100644
--- a/repoman/pym/repoman/modules/linechecks/portage/internal.py
+++ b/repoman/lib/repoman/modules/linechecks/portage/internal.py
diff --git a/repoman/pym/repoman/modules/linechecks/quotes/__init__.py b/repoman/lib/repoman/modules/linechecks/quotes/__init__.py
index 894ef58d2..894ef58d2 100644
--- a/repoman/pym/repoman/modules/linechecks/quotes/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/quotes/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/quotes/quoteda.py b/repoman/lib/repoman/modules/linechecks/quotes/quoteda.py
index 7fd9ba797..7fd9ba797 100644
--- a/repoman/pym/repoman/modules/linechecks/quotes/quoteda.py
+++ b/repoman/lib/repoman/modules/linechecks/quotes/quoteda.py
diff --git a/repoman/pym/repoman/modules/linechecks/quotes/quotes.py b/repoman/lib/repoman/modules/linechecks/quotes/quotes.py
index e5ea4d0ca..e5ea4d0ca 100644
--- a/repoman/pym/repoman/modules/linechecks/quotes/quotes.py
+++ b/repoman/lib/repoman/modules/linechecks/quotes/quotes.py
diff --git a/repoman/pym/repoman/modules/linechecks/uri/__init__.py b/repoman/lib/repoman/modules/linechecks/uri/__init__.py
index e19617257..e19617257 100644
--- a/repoman/pym/repoman/modules/linechecks/uri/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/uri/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/uri/uri.py b/repoman/lib/repoman/modules/linechecks/uri/uri.py
index 1a0afe682..1a0afe682 100644
--- a/repoman/pym/repoman/modules/linechecks/uri/uri.py
+++ b/repoman/lib/repoman/modules/linechecks/uri/uri.py
diff --git a/repoman/pym/repoman/modules/linechecks/use/__init__.py b/repoman/lib/repoman/modules/linechecks/use/__init__.py
index e97b0d61d..e97b0d61d 100644
--- a/repoman/pym/repoman/modules/linechecks/use/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/use/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/use/builtwith.py b/repoman/lib/repoman/modules/linechecks/use/builtwith.py
index 0ec4fae21..0ec4fae21 100644
--- a/repoman/pym/repoman/modules/linechecks/use/builtwith.py
+++ b/repoman/lib/repoman/modules/linechecks/use/builtwith.py
diff --git a/repoman/pym/repoman/modules/linechecks/useless/__init__.py b/repoman/lib/repoman/modules/linechecks/useless/__init__.py
index 5cf978137..5cf978137 100644
--- a/repoman/pym/repoman/modules/linechecks/useless/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/useless/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/useless/cd.py b/repoman/lib/repoman/modules/linechecks/useless/cd.py
index 3daa04451..3daa04451 100644
--- a/repoman/pym/repoman/modules/linechecks/useless/cd.py
+++ b/repoman/lib/repoman/modules/linechecks/useless/cd.py
diff --git a/repoman/pym/repoman/modules/linechecks/useless/dodoc.py b/repoman/lib/repoman/modules/linechecks/useless/dodoc.py
index 502bfbea8..502bfbea8 100644
--- a/repoman/pym/repoman/modules/linechecks/useless/dodoc.py
+++ b/repoman/lib/repoman/modules/linechecks/useless/dodoc.py
diff --git a/repoman/pym/repoman/modules/linechecks/whitespace/__init__.py b/repoman/lib/repoman/modules/linechecks/whitespace/__init__.py
index 716c5129c..716c5129c 100644
--- a/repoman/pym/repoman/modules/linechecks/whitespace/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/whitespace/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/whitespace/blank.py b/repoman/lib/repoman/modules/linechecks/whitespace/blank.py
index 2ab4097a3..2ab4097a3 100644
--- a/repoman/pym/repoman/modules/linechecks/whitespace/blank.py
+++ b/repoman/lib/repoman/modules/linechecks/whitespace/blank.py
diff --git a/repoman/pym/repoman/modules/linechecks/whitespace/whitespace.py b/repoman/lib/repoman/modules/linechecks/whitespace/whitespace.py
index 556b2ab81..556b2ab81 100644
--- a/repoman/pym/repoman/modules/linechecks/whitespace/whitespace.py
+++ b/repoman/lib/repoman/modules/linechecks/whitespace/whitespace.py
diff --git a/repoman/pym/repoman/modules/linechecks/workaround/__init__.py b/repoman/lib/repoman/modules/linechecks/workaround/__init__.py
index 425085a5c..425085a5c 100644
--- a/repoman/pym/repoman/modules/linechecks/workaround/__init__.py
+++ b/repoman/lib/repoman/modules/linechecks/workaround/__init__.py
diff --git a/repoman/pym/repoman/modules/linechecks/workaround/workarounds.py b/repoman/lib/repoman/modules/linechecks/workaround/workarounds.py
index 37cb54314..37cb54314 100644
--- a/repoman/pym/repoman/modules/linechecks/workaround/workarounds.py
+++ b/repoman/lib/repoman/modules/linechecks/workaround/workarounds.py
diff --git a/repoman/pym/repoman/modules/scan/__init__.py b/repoman/lib/repoman/modules/scan/__init__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/modules/scan/__init__.py
+++ b/repoman/lib/repoman/modules/scan/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/depend/__init__.py b/repoman/lib/repoman/modules/scan/depend/__init__.py
index c3cc0ddeb..c3cc0ddeb 100644
--- a/repoman/pym/repoman/modules/scan/depend/__init__.py
+++ b/repoman/lib/repoman/modules/scan/depend/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/depend/_depend_checks.py b/repoman/lib/repoman/modules/scan/depend/_depend_checks.py
index 79fd0a0c2..690b95aa0 100644
--- a/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
+++ b/repoman/lib/repoman/modules/scan/depend/_depend_checks.py
@@ -152,6 +152,15 @@ def _depend_checks(ebuild, pkg, portdb, qatracker, repo_metadata, qadata):
qacat, "%s: %s uses the ~ operator"
" with a non-zero revision: '%s'" %
(ebuild.relative_path, mytype, atom))
+ # plain =foo-1.2.3 without revision or *
+ if atom.operator == "=" and '-r' not in atom.version:
+ qacat = 'dependency.equalsversion'
+ qatracker.add_error(
+ qacat, "%s: %s uses the = operator with"
+ " no revision: '%s'; if any revision is"
+ " acceptable, use '~' instead; if only -r0"
+ " then please append '-r0' to the dep" %
+ (ebuild.relative_path, mytype, atom))
check_missingslot(atom, mytype, ebuild.eapi, portdb, qatracker,
ebuild.relative_path, ebuild.metadata)
diff --git a/repoman/pym/repoman/modules/scan/depend/_gen_arches.py b/repoman/lib/repoman/modules/scan/depend/_gen_arches.py
index 16b8dac5f..16b8dac5f 100644
--- a/repoman/pym/repoman/modules/scan/depend/_gen_arches.py
+++ b/repoman/lib/repoman/modules/scan/depend/_gen_arches.py
diff --git a/repoman/pym/repoman/modules/scan/depend/profile.py b/repoman/lib/repoman/modules/scan/depend/profile.py
index 8e0a22f9c..d980f4eca 100644
--- a/repoman/pym/repoman/modules/scan/depend/profile.py
+++ b/repoman/lib/repoman/modules/scan/depend/profile.py
@@ -2,6 +2,7 @@
import copy
+import os
from pprint import pformat
from _emerge.Package import Package
@@ -12,6 +13,8 @@ from repoman.modules.scan.scanbase import ScanBase
from repoman.modules.scan.depend._depend_checks import _depend_checks
from repoman.modules.scan.depend._gen_arches import _gen_arches
from portage.dep import Atom
+from portage.package.ebuild.profile_iuse import iter_iuse_vars
+from portage.util import getconfig
def sort_key(item):
@@ -102,6 +105,11 @@ class ProfileDependsChecks(ScanBase):
local_config=False,
_unmatched_removal=self.options.unmatched_removal,
env=self.env, repositories=self.repo_settings.repoman_settings.repositories)
+
+ if not prof.abs_path:
+ self._populate_implicit_iuse(dep_settings,
+ self.repo_settings.repo_config.eclass_db.porttrees)
+
dep_settings.categories = self.repo_settings.repoman_settings.categories
if self.options.without_mask:
dep_settings._mask_manager_obj = \
@@ -257,3 +265,31 @@ class ProfileDependsChecks(ScanBase):
def runInEbuilds(self):
'''Ebuild level scans'''
return (True, [self.check])
+
+ @staticmethod
+ def _populate_implicit_iuse(config, repo_locations):
+ """
+ Populate implicit IUSE for the empty profile, see bug 660982.
+
+ @param config: config instance for the empty profile
+ @type config: portage.config
+ @param repo_locations: locations of repositories containing relevant
+ implicit IUSE settings
+ @type repo_locations: list
+ """
+ dest = config.configdict['defaults']
+ for location in repo_locations:
+ for parent_dir, dirs, files in os.walk(os.path.join(location, 'profiles')):
+ src = getconfig(os.path.join(parent_dir, 'make.defaults'))
+ if not src:
+ continue
+ for k, v in iter_iuse_vars(src):
+ v_before = dest.get(k)
+ if v_before is not None:
+ merged_values = set(v_before.split())
+ merged_values.update(v.split())
+ v = ' '.join(sorted(merged_values))
+ dest[k] = v
+
+ config.regenerate()
+ config._init_iuse()
diff --git a/repoman/pym/repoman/modules/scan/directories/__init__.py b/repoman/lib/repoman/modules/scan/directories/__init__.py
index 276bc7ae9..276bc7ae9 100644
--- a/repoman/pym/repoman/modules/scan/directories/__init__.py
+++ b/repoman/lib/repoman/modules/scan/directories/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/directories/files.py b/repoman/lib/repoman/modules/scan/directories/files.py
index 2aed26440..2aed26440 100644
--- a/repoman/pym/repoman/modules/scan/directories/files.py
+++ b/repoman/lib/repoman/modules/scan/directories/files.py
diff --git a/repoman/pym/repoman/modules/scan/directories/mtime.py b/repoman/lib/repoman/modules/scan/directories/mtime.py
index 134a86b80..134a86b80 100644
--- a/repoman/pym/repoman/modules/scan/directories/mtime.py
+++ b/repoman/lib/repoman/modules/scan/directories/mtime.py
diff --git a/repoman/pym/repoman/modules/scan/eapi/__init__.py b/repoman/lib/repoman/modules/scan/eapi/__init__.py
index 94759fdd7..94759fdd7 100644
--- a/repoman/pym/repoman/modules/scan/eapi/__init__.py
+++ b/repoman/lib/repoman/modules/scan/eapi/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/eapi/eapi.py b/repoman/lib/repoman/modules/scan/eapi/eapi.py
index fbad502a9..fbad502a9 100644
--- a/repoman/pym/repoman/modules/scan/eapi/eapi.py
+++ b/repoman/lib/repoman/modules/scan/eapi/eapi.py
diff --git a/repoman/pym/repoman/modules/scan/ebuild/__init__.py b/repoman/lib/repoman/modules/scan/ebuild/__init__.py
index 328a0d626..328a0d626 100644
--- a/repoman/pym/repoman/modules/scan/ebuild/__init__.py
+++ b/repoman/lib/repoman/modules/scan/ebuild/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/ebuild/ebuild.py b/repoman/lib/repoman/modules/scan/ebuild/ebuild.py
index d2715bc6e..d2715bc6e 100644
--- a/repoman/pym/repoman/modules/scan/ebuild/ebuild.py
+++ b/repoman/lib/repoman/modules/scan/ebuild/ebuild.py
diff --git a/repoman/pym/repoman/modules/scan/ebuild/multicheck.py b/repoman/lib/repoman/modules/scan/ebuild/multicheck.py
index 94526ae9e..94526ae9e 100644
--- a/repoman/pym/repoman/modules/scan/ebuild/multicheck.py
+++ b/repoman/lib/repoman/modules/scan/ebuild/multicheck.py
diff --git a/repoman/pym/repoman/modules/scan/eclasses/__init__.py b/repoman/lib/repoman/modules/scan/eclasses/__init__.py
index 234ef9fca..234ef9fca 100644
--- a/repoman/pym/repoman/modules/scan/eclasses/__init__.py
+++ b/repoman/lib/repoman/modules/scan/eclasses/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/eclasses/live.py b/repoman/lib/repoman/modules/scan/eclasses/live.py
index dca10b583..dca10b583 100644
--- a/repoman/pym/repoman/modules/scan/eclasses/live.py
+++ b/repoman/lib/repoman/modules/scan/eclasses/live.py
diff --git a/repoman/pym/repoman/modules/scan/eclasses/ruby.py b/repoman/lib/repoman/modules/scan/eclasses/ruby.py
index c5adeedf1..c5adeedf1 100644
--- a/repoman/pym/repoman/modules/scan/eclasses/ruby.py
+++ b/repoman/lib/repoman/modules/scan/eclasses/ruby.py
diff --git a/repoman/pym/repoman/modules/scan/fetch/__init__.py b/repoman/lib/repoman/modules/scan/fetch/__init__.py
index 30db3f529..30db3f529 100644
--- a/repoman/pym/repoman/modules/scan/fetch/__init__.py
+++ b/repoman/lib/repoman/modules/scan/fetch/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/fetch/fetches.py b/repoman/lib/repoman/modules/scan/fetch/fetches.py
index 5a958a461..5a958a461 100644
--- a/repoman/pym/repoman/modules/scan/fetch/fetches.py
+++ b/repoman/lib/repoman/modules/scan/fetch/fetches.py
diff --git a/repoman/pym/repoman/modules/scan/keywords/__init__.py b/repoman/lib/repoman/modules/scan/keywords/__init__.py
index d4c1281bc..d4c1281bc 100644
--- a/repoman/pym/repoman/modules/scan/keywords/__init__.py
+++ b/repoman/lib/repoman/modules/scan/keywords/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/keywords/keywords.py b/repoman/lib/repoman/modules/scan/keywords/keywords.py
index 1e9623906..556f352ad 100644
--- a/repoman/pym/repoman/modules/scan/keywords/keywords.py
+++ b/repoman/lib/repoman/modules/scan/keywords/keywords.py
@@ -55,6 +55,8 @@ class KeywordChecks(ScanBase):
self._checkForMaskLikeKeywords(xpkg, y_ebuild, ebuild.keywords)
+ self._checkForUnsortedKeywords(ebuild, xpkg, y_ebuild)
+
self.slot_keywords[pkg.slot].update(ebuild.archs)
return False
@@ -133,6 +135,25 @@ class KeywordChecks(ScanBase):
self.qatracker.add_error("KEYWORDS.stupid",
"%s/%s.ebuild" % (xpkg, y_ebuild))
+ def _checkForUnsortedKeywords(self, ebuild, xpkg, y_ebuild):
+ '''Ebuilds that contain KEYWORDS
+ which are not sorted alphabetically.'''
+ def sort_keywords(kw):
+ # Split keywords containing hyphens. The part after
+ # the hyphen should be treated as the primary key.
+ # This is consistent with ekeyword.
+ parts = list(reversed(kw.lstrip("~-").split("-", 1)))
+ # Hack to make sure that keywords
+ # without hyphens are sorted first
+ if len(parts) == 1:
+ parts.insert(0, "")
+ return parts
+ sorted_keywords = sorted(ebuild.keywords, key=sort_keywords)
+ if sorted_keywords != ebuild.keywords:
+ self.qatracker.add_error("KEYWORDS.unsorted",
+ "%s/%s.ebuild contains unsorted keywords" %
+ (xpkg, y_ebuild))
+
@property
def runInPkgs(self):
'''Package level scans'''
diff --git a/repoman/pym/repoman/modules/scan/manifest/__init__.py b/repoman/lib/repoman/modules/scan/manifest/__init__.py
index 9e05c5288..9e05c5288 100644
--- a/repoman/pym/repoman/modules/scan/manifest/__init__.py
+++ b/repoman/lib/repoman/modules/scan/manifest/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/manifest/manifests.py b/repoman/lib/repoman/modules/scan/manifest/manifests.py
index dc2b338e4..dc2b338e4 100644
--- a/repoman/pym/repoman/modules/scan/manifest/manifests.py
+++ b/repoman/lib/repoman/modules/scan/manifest/manifests.py
diff --git a/repoman/pym/repoman/modules/scan/metadata/__init__.py b/repoman/lib/repoman/modules/scan/metadata/__init__.py
index fccde99b5..fccde99b5 100644
--- a/repoman/pym/repoman/modules/scan/metadata/__init__.py
+++ b/repoman/lib/repoman/modules/scan/metadata/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/metadata/description.py b/repoman/lib/repoman/modules/scan/metadata/description.py
index 0ce81a2dc..0ce81a2dc 100644
--- a/repoman/pym/repoman/modules/scan/metadata/description.py
+++ b/repoman/lib/repoman/modules/scan/metadata/description.py
diff --git a/repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py b/repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py
index 4c35bbc12..4c35bbc12 100644
--- a/repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py
+++ b/repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py
diff --git a/repoman/pym/repoman/modules/scan/metadata/pkgmetadata.py b/repoman/lib/repoman/modules/scan/metadata/pkgmetadata.py
index 3c38697fe..3c38697fe 100644
--- a/repoman/pym/repoman/modules/scan/metadata/pkgmetadata.py
+++ b/repoman/lib/repoman/modules/scan/metadata/pkgmetadata.py
diff --git a/repoman/pym/repoman/modules/scan/metadata/restrict.py b/repoman/lib/repoman/modules/scan/metadata/restrict.py
index 99784f231..99784f231 100644
--- a/repoman/pym/repoman/modules/scan/metadata/restrict.py
+++ b/repoman/lib/repoman/modules/scan/metadata/restrict.py
diff --git a/repoman/pym/repoman/modules/scan/metadata/use_flags.py b/repoman/lib/repoman/modules/scan/metadata/use_flags.py
index 1738fd23e..1738fd23e 100644
--- a/repoman/pym/repoman/modules/scan/metadata/use_flags.py
+++ b/repoman/lib/repoman/modules/scan/metadata/use_flags.py
diff --git a/repoman/pym/repoman/modules/scan/module.py b/repoman/lib/repoman/modules/scan/module.py
index baed68989..baed68989 100644
--- a/repoman/pym/repoman/modules/scan/module.py
+++ b/repoman/lib/repoman/modules/scan/module.py
diff --git a/repoman/pym/repoman/modules/scan/options/__init__.py b/repoman/lib/repoman/modules/scan/options/__init__.py
index ffce474e5..ffce474e5 100644
--- a/repoman/pym/repoman/modules/scan/options/__init__.py
+++ b/repoman/lib/repoman/modules/scan/options/__init__.py
diff --git a/repoman/pym/repoman/modules/scan/options/options.py b/repoman/lib/repoman/modules/scan/options/options.py
index 443f01bd8..443f01bd8 100644
--- a/repoman/pym/repoman/modules/scan/options/options.py
+++ b/repoman/lib/repoman/modules/scan/options/options.py
diff --git a/repoman/pym/repoman/modules/scan/scan.py b/repoman/lib/repoman/modules/scan/scan.py
index d2a5f515b..d2a5f515b 100644
--- a/repoman/pym/repoman/modules/scan/scan.py
+++ b/repoman/lib/repoman/modules/scan/scan.py
diff --git a/repoman/pym/repoman/modules/scan/scanbase.py b/repoman/lib/repoman/modules/scan/scanbase.py
index aea1bb121..aea1bb121 100644
--- a/repoman/pym/repoman/modules/scan/scanbase.py
+++ b/repoman/lib/repoman/modules/scan/scanbase.py
diff --git a/repoman/pym/repoman/modules/vcs/None/__init__.py b/repoman/lib/repoman/modules/vcs/None/__init__.py
index 285932541..285932541 100644
--- a/repoman/pym/repoman/modules/vcs/None/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/None/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/None/changes.py b/repoman/lib/repoman/modules/vcs/None/changes.py
index 46c38e257..46c38e257 100644
--- a/repoman/pym/repoman/modules/vcs/None/changes.py
+++ b/repoman/lib/repoman/modules/vcs/None/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/None/status.py b/repoman/lib/repoman/modules/vcs/None/status.py
index d6e5ca0e4..d6e5ca0e4 100644
--- a/repoman/pym/repoman/modules/vcs/None/status.py
+++ b/repoman/lib/repoman/modules/vcs/None/status.py
diff --git a/repoman/pym/repoman/modules/vcs/__init__.py b/repoman/lib/repoman/modules/vcs/__init__.py
index 84e837408..84e837408 100644
--- a/repoman/pym/repoman/modules/vcs/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/bzr/__init__.py b/repoman/lib/repoman/modules/vcs/bzr/__init__.py
index 4490ed86c..4490ed86c 100644
--- a/repoman/pym/repoman/modules/vcs/bzr/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/bzr/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/bzr/changes.py b/repoman/lib/repoman/modules/vcs/bzr/changes.py
index 4d4808c08..4d4808c08 100644
--- a/repoman/pym/repoman/modules/vcs/bzr/changes.py
+++ b/repoman/lib/repoman/modules/vcs/bzr/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/bzr/status.py b/repoman/lib/repoman/modules/vcs/bzr/status.py
index 199e7f399..199e7f399 100644
--- a/repoman/pym/repoman/modules/vcs/bzr/status.py
+++ b/repoman/lib/repoman/modules/vcs/bzr/status.py
diff --git a/repoman/pym/repoman/modules/vcs/changes.py b/repoman/lib/repoman/modules/vcs/changes.py
index aa4923f8f..aa4923f8f 100644
--- a/repoman/pym/repoman/modules/vcs/changes.py
+++ b/repoman/lib/repoman/modules/vcs/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/cvs/__init__.py b/repoman/lib/repoman/modules/vcs/cvs/__init__.py
index 0b4587bc6..0b4587bc6 100644
--- a/repoman/pym/repoman/modules/vcs/cvs/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/cvs/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/cvs/changes.py b/repoman/lib/repoman/modules/vcs/cvs/changes.py
index 583a96f7c..583a96f7c 100644
--- a/repoman/pym/repoman/modules/vcs/cvs/changes.py
+++ b/repoman/lib/repoman/modules/vcs/cvs/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/cvs/status.py b/repoman/lib/repoman/modules/vcs/cvs/status.py
index 3ec88f125..3ec88f125 100644
--- a/repoman/pym/repoman/modules/vcs/cvs/status.py
+++ b/repoman/lib/repoman/modules/vcs/cvs/status.py
diff --git a/repoman/pym/repoman/modules/vcs/git/__init__.py b/repoman/lib/repoman/modules/vcs/git/__init__.py
index eecd4a1d0..eecd4a1d0 100644
--- a/repoman/pym/repoman/modules/vcs/git/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/git/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/git/changes.py b/repoman/lib/repoman/modules/vcs/git/changes.py
index 7e9ac1eb5..7e9ac1eb5 100644
--- a/repoman/pym/repoman/modules/vcs/git/changes.py
+++ b/repoman/lib/repoman/modules/vcs/git/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/git/status.py b/repoman/lib/repoman/modules/vcs/git/status.py
index e5aa9c741..e5aa9c741 100644
--- a/repoman/pym/repoman/modules/vcs/git/status.py
+++ b/repoman/lib/repoman/modules/vcs/git/status.py
diff --git a/repoman/pym/repoman/modules/vcs/hg/__init__.py b/repoman/lib/repoman/modules/vcs/hg/__init__.py
index 2e39970f7..2e39970f7 100644
--- a/repoman/pym/repoman/modules/vcs/hg/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/hg/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/hg/changes.py b/repoman/lib/repoman/modules/vcs/hg/changes.py
index 867057545..867057545 100644
--- a/repoman/pym/repoman/modules/vcs/hg/changes.py
+++ b/repoman/lib/repoman/modules/vcs/hg/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/hg/status.py b/repoman/lib/repoman/modules/vcs/hg/status.py
index 8443554f5..8443554f5 100644
--- a/repoman/pym/repoman/modules/vcs/hg/status.py
+++ b/repoman/lib/repoman/modules/vcs/hg/status.py
diff --git a/repoman/pym/repoman/modules/vcs/settings.py b/repoman/lib/repoman/modules/vcs/settings.py
index a8e91dd27..a8e91dd27 100644
--- a/repoman/pym/repoman/modules/vcs/settings.py
+++ b/repoman/lib/repoman/modules/vcs/settings.py
diff --git a/repoman/pym/repoman/modules/vcs/svn/__init__.py b/repoman/lib/repoman/modules/vcs/svn/__init__.py
index 6bb0b9af4..6bb0b9af4 100644
--- a/repoman/pym/repoman/modules/vcs/svn/__init__.py
+++ b/repoman/lib/repoman/modules/vcs/svn/__init__.py
diff --git a/repoman/pym/repoman/modules/vcs/svn/changes.py b/repoman/lib/repoman/modules/vcs/svn/changes.py
index dfed1655b..dfed1655b 100644
--- a/repoman/pym/repoman/modules/vcs/svn/changes.py
+++ b/repoman/lib/repoman/modules/vcs/svn/changes.py
diff --git a/repoman/pym/repoman/modules/vcs/svn/status.py b/repoman/lib/repoman/modules/vcs/svn/status.py
index 6575fe0b0..6575fe0b0 100644
--- a/repoman/pym/repoman/modules/vcs/svn/status.py
+++ b/repoman/lib/repoman/modules/vcs/svn/status.py
diff --git a/repoman/pym/repoman/modules/vcs/vcs.py b/repoman/lib/repoman/modules/vcs/vcs.py
index b4ff3dc9c..b4ff3dc9c 100644
--- a/repoman/pym/repoman/modules/vcs/vcs.py
+++ b/repoman/lib/repoman/modules/vcs/vcs.py
diff --git a/repoman/pym/repoman/profile.py b/repoman/lib/repoman/profile.py
index 50da91728..50da91728 100644
--- a/repoman/pym/repoman/profile.py
+++ b/repoman/lib/repoman/profile.py
diff --git a/repoman/pym/repoman/qa_data.py b/repoman/lib/repoman/qa_data.py
index 01141a617..01141a617 100644
--- a/repoman/pym/repoman/qa_data.py
+++ b/repoman/lib/repoman/qa_data.py
diff --git a/repoman/pym/repoman/qa_tracker.py b/repoman/lib/repoman/qa_tracker.py
index faaf8e398..faaf8e398 100644
--- a/repoman/pym/repoman/qa_tracker.py
+++ b/repoman/lib/repoman/qa_tracker.py
diff --git a/repoman/pym/repoman/repos.py b/repoman/lib/repoman/repos.py
index 9c820b08c..9c820b08c 100644
--- a/repoman/pym/repoman/repos.py
+++ b/repoman/lib/repoman/repos.py
diff --git a/repoman/pym/repoman/scanner.py b/repoman/lib/repoman/scanner.py
index c456bbde9..c456bbde9 100644
--- a/repoman/pym/repoman/scanner.py
+++ b/repoman/lib/repoman/scanner.py
diff --git a/repoman/pym/repoman/tests/__init__.py b/repoman/lib/repoman/tests/__init__.py
index d57ca9b10..d57ca9b10 100644
--- a/repoman/pym/repoman/tests/__init__.py
+++ b/repoman/lib/repoman/tests/__init__.py
diff --git a/repoman/pym/repoman/tests/__test__.py b/repoman/lib/repoman/tests/__test__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/tests/__test__.py
+++ b/repoman/lib/repoman/tests/__test__.py
diff --git a/repoman/pym/repoman/tests/changelog/__init__.py b/repoman/lib/repoman/tests/changelog/__init__.py
index 532918b6a..532918b6a 100644
--- a/repoman/pym/repoman/tests/changelog/__init__.py
+++ b/repoman/lib/repoman/tests/changelog/__init__.py
diff --git a/repoman/pym/repoman/tests/changelog/__test__.py b/repoman/lib/repoman/tests/changelog/__test__.py
index e69de29bb..e69de29bb 100644
--- a/repoman/pym/repoman/tests/changelog/__test__.py
+++ b/repoman/lib/repoman/tests/changelog/__test__.py
diff --git a/repoman/pym/repoman/tests/changelog/test_echangelog.py b/repoman/lib/repoman/tests/changelog/test_echangelog.py
index 1640be268..1640be268 100644
--- a/repoman/pym/repoman/tests/changelog/test_echangelog.py
+++ b/repoman/lib/repoman/tests/changelog/test_echangelog.py
diff --git a/repoman/pym/repoman/tests/commit/__init__.py b/repoman/lib/repoman/tests/commit/__init__.py
index d74fd94a7..d74fd94a7 100644
--- a/repoman/pym/repoman/tests/commit/__init__.py
+++ b/repoman/lib/repoman/tests/commit/__init__.py
diff --git a/repoman/pym/repoman/tests/commit/__test__.py b/repoman/lib/repoman/tests/commit/__test__.py
index 8b1378917..8b1378917 100644
--- a/repoman/pym/repoman/tests/commit/__test__.py
+++ b/repoman/lib/repoman/tests/commit/__test__.py
diff --git a/repoman/pym/repoman/tests/commit/test_commitmsg.py b/repoman/lib/repoman/tests/commit/test_commitmsg.py
index a734c1065..a734c1065 100644
--- a/repoman/pym/repoman/tests/commit/test_commitmsg.py
+++ b/repoman/lib/repoman/tests/commit/test_commitmsg.py
diff --git a/repoman/pym/repoman/tests/runTests.py b/repoman/lib/repoman/tests/runTests.py
index ed73592a1..542acb870 100644
--- a/repoman/pym/repoman/tests/runTests.py
+++ b/repoman/lib/repoman/tests/runTests.py
@@ -35,7 +35,7 @@ repoman_pym = osp.dirname(osp.dirname(osp.dirname(osp.realpath(__file__))))
sys.path.insert(0, repoman_pym)
# Add in the parent portage python modules
-portage_pym = osp.dirname(osp.dirname(repoman_pym)) + '/pym'
+portage_pym = osp.dirname(osp.dirname(repoman_pym)) + '/lib'
sys.path.insert(0, portage_pym)
# import our centrally initialized portage instance
diff --git a/repoman/pym/repoman/tests/simple/__init__.py b/repoman/lib/repoman/tests/simple/__init__.py
index 532918b6a..532918b6a 100644
--- a/repoman/pym/repoman/tests/simple/__init__.py
+++ b/repoman/lib/repoman/tests/simple/__init__.py
diff --git a/repoman/pym/repoman/tests/simple/__test__.py b/repoman/lib/repoman/tests/simple/__test__.py
index 8b1378917..8b1378917 100644
--- a/repoman/pym/repoman/tests/simple/__test__.py
+++ b/repoman/lib/repoman/tests/simple/__test__.py
diff --git a/repoman/pym/repoman/tests/simple/test_simple.py b/repoman/lib/repoman/tests/simple/test_simple.py
index 3d7a70ad0..3d7a70ad0 100644
--- a/repoman/pym/repoman/tests/simple/test_simple.py
+++ b/repoman/lib/repoman/tests/simple/test_simple.py
diff --git a/repoman/pym/repoman/utilities.py b/repoman/lib/repoman/utilities.py
index 1272f3fb6..1272f3fb6 100644
--- a/repoman/pym/repoman/utilities.py
+++ b/repoman/lib/repoman/utilities.py
diff --git a/repoman/man/repoman.1 b/repoman/man/repoman.1
index 01f37dd99..dea17c3b4 100644
--- a/repoman/man/repoman.1
+++ b/repoman/man/repoman.1
@@ -228,6 +228,9 @@ Ebuilds that have been added directly with stable KEYWORDS
.B KEYWORDS.stupid
Ebuilds that use KEYWORDS=-* instead of package.mask
.TP
+.B KEYWORDS.unsorted
+Ebuilds that contain KEYWORDS which are not sorted alphabetically.
+.TP
.B LICENSE.deprecated
This ebuild is listing a deprecated license.
.TP
diff --git a/repoman/runtests b/repoman/runtests
index c1825301a..2b8cb4c5e 100755
--- a/repoman/runtests
+++ b/repoman/runtests
@@ -89,7 +89,7 @@ Run against specific versions of python.
$ %(prog)s --python-versions '2.7 3.3'
Run just one unittest.
-$ %(prog)s pym/portage/tests/xpak/test_decodeint.py
+$ %(prog)s lib/portage/tests/xpak/test_decodeint.py
"""
parser = argparse.ArgumentParser(
description=__doc__,
@@ -123,7 +123,7 @@ def main(argv):
pyversions.extend(ver.split())
here = os.path.dirname(__file__)
- run_path = os.path.join(here, 'pym/repoman/tests/runTests.py')
+ run_path = os.path.join(here, 'lib/repoman/tests/runTests.py')
tempdir = None
try:
# Set up a single tempdir for all the tests to use.
diff --git a/repoman/setup.py b/repoman/setup.py
index 16ee0bc63..23b106807 100755
--- a/repoman/setup.py
+++ b/repoman/setup.py
@@ -147,11 +147,6 @@ class x_clean(clean):
print('removing %s symlink' % repr(conf_dir))
os.unlink(conf_dir)
- pym_dir = os.path.join(top_dir, 'pym')
- if os.path.islink(pym_dir):
- print('removing %s sylink' % repr(pym_dir))
- os.unlink(pym_dir)
-
pni_file = os.path.join(top_dir, '.repoman_not_installed')
if os.path.exists(pni_file):
print('removing %s' % repr(pni_file))
@@ -397,17 +392,6 @@ class build_tests(x_build_scripts_custom):
print('Symlinking %s -> %s' % (conf_dir, conf_src))
os.symlink(conf_src, conf_dir)
- # symlink 'pym' directory
- pym_dir = os.path.join(self.top_dir, 'pym')
- if os.path.exists(pym_dir):
- if not os.path.islink(pym_dir):
- raise SystemError('%s exists and is not a symlink (collision)'
- % repr(pym_dir))
- os.unlink(pym_dir)
- pym_src = 'lib'
- print('Symlinking %s -> %s' % (pym_dir, pym_src))
- os.symlink(pym_src, pym_dir)
-
# create $build_lib/../.repoman_not_installed
# to enable proper paths in tests
with open(os.path.join(self.top_dir, '.repoman_not_installed'), 'w'):
@@ -435,9 +419,9 @@ class test(Command):
def find_packages():
- for dirpath, _dirnames, filenames in os.walk('pym'):
+ for dirpath, _dirnames, filenames in os.walk('lib'):
if '__init__.py' in filenames:
- yield os.path.relpath(dirpath, 'pym')
+ yield os.path.relpath(dirpath, 'lib')
def find_scripts():
@@ -466,12 +450,12 @@ def get_manpages():
setup(
name = 'repoman',
- version = '2.3.9',
+ version = '2.3.10',
url = 'https://wiki.gentoo.org/wiki/Project:Portage',
author = 'Gentoo Portage Development Team',
author_email = 'dev-portage@gentoo.org',
- package_dir = {'': 'pym'},
+ package_dir = {'': 'lib'},
packages = list(find_packages()),
# something to cheat build & install commands
scripts = list(find_scripts()),
diff --git a/runtests b/runtests
index a193c375f..45d7c5277 100755
--- a/runtests
+++ b/runtests
@@ -89,7 +89,7 @@ Run against specific versions of python.
$ %(prog)s --python-versions '2.7 3.3'
Run just one unittest.
-$ %(prog)s pym/portage/tests/xpak/test_decodeint.py
+$ %(prog)s lib/portage/tests/xpak/test_decodeint.py
"""
parser = argparse.ArgumentParser(
description=__doc__,
@@ -133,7 +133,7 @@ def main(argv):
statuses = []
for ver in pyversions:
prog = get_python_executable(ver)
- cmd = [prog, '-b', '-Wd', 'pym/portage/tests/runTests.py'] + args
+ cmd = [prog, '-b', '-Wd', 'lib/portage/tests/runTests.py'] + args
if os.access(prog, os.X_OK):
print('%sTesting with Python %s...%s' %
(colors.GOOD, ver, colors.NORMAL))
diff --git a/setup.py b/setup.py
index 4fb26ae51..52cda62d0 100755
--- a/setup.py
+++ b/setup.py
@@ -612,9 +612,9 @@ class test(Command):
def find_packages():
- for dirpath, _dirnames, filenames in os.walk('pym'):
+ for dirpath, _dirnames, filenames in os.walk('lib'):
if '__init__.py' in filenames:
- yield os.path.relpath(dirpath, 'pym')
+ yield os.path.relpath(dirpath, 'lib')
def find_scripts():
@@ -662,12 +662,12 @@ class build_ext(_build_ext):
setup(
name = 'portage',
- version = '2.3.40',
+ version = '2.3.44',
url = 'https://wiki.gentoo.org/wiki/Project:Portage',
author = 'Gentoo Portage Development Team',
author_email = 'dev-portage@gentoo.org',
- package_dir = {'': 'pym'},
+ package_dir = {'': 'lib'},
packages = list(find_packages()),
# something to cheat build & install commands
scripts = list(find_scripts()),
diff --git a/testpath b/testpath
index d9873011f..332958613 100644
--- a/testpath
+++ b/testpath
@@ -8,9 +8,9 @@
# ...
if [[ "$SHELL" =~ "zsh" ]]; then
export PATH="$(dirname $0)/bin:${PATH}"
- export PYTHONPATH=PYTHONPATH="$(dirname $0)/pym:${PYTHONPATH:+:}${PYTHONPATH}"
+ export PYTHONPATH=PYTHONPATH="$(dirname $0)/lib:${PYTHONPATH:+:}${PYTHONPATH}"
else
export PATH="$(dirname ${BASH_SOURCE[0]})/bin:${PATH}"
- export PYTHONPATH=PYTHONPATH="$(dirname $BASH_SOURCE[0])/pym:${PYTHONPATH:+:}${PYTHONPATH}"
+ export PYTHONPATH=PYTHONPATH="$(dirname $BASH_SOURCE[0])/lib:${PYTHONPATH:+:}${PYTHONPATH}"
fi
export PYTHONWARNINGS=d,i::ImportWarning
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 000000000..cafdb0045
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,16 @@
+[tox]
+envlist = py27,py34,py35,py36,pypy,pypy3
+skipsdist = True
+
+[testenv]
+deps =
+ lxml!=4.2.0
+ pygost
+ pyyaml
+ py27,py34,py35,pypy: pyblake2
+ py27,py34,py35,pypy: pysha3
+setenv =
+ PYTHONPATH={toxinidir}/lib
+commands =
+ python -b -Wd setup.py test
+ python -b -Wd repoman/setup.py test