diff options
author | Fabian Groffen <grobian@gentoo.org> | 2018-08-04 08:55:46 +0200 |
---|---|---|
committer | Fabian Groffen <grobian@gentoo.org> | 2018-08-04 08:55:46 +0200 |
commit | 7930d48e80624f600fd96effbf1f509e12964678 (patch) | |
tree | 498ccd5c5c7d8e7b83c98a5101c91bfe6b335c00 | |
parent | stacked-prefix: flag as Prefix modification (diff) | |
parent | Scheduler: cancel job delay timeout after main loop (bug 662668) (diff) | |
download | portage-7930d48e.tar.gz portage-7930d48e.tar.bz2 portage-7930d48e.zip |
Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .travis.yml | 28 | ||||
-rw-r--r-- | NEWS | 10 | ||||
-rw-r--r-- | RELEASE-NOTES | 50 | ||||
-rw-r--r-- | TEST-NOTES | 6 | ||||
-rwxr-xr-x | bin/archive-conf | 2 | ||||
-rwxr-xr-x | bin/binhost-snapshot | 2 | ||||
-rwxr-xr-x | bin/clean_locks | 2 | ||||
-rwxr-xr-x | bin/dispatch-conf | 2 | ||||
-rwxr-xr-x | bin/ebuild | 2 | ||||
-rwxr-xr-x | bin/ebuild-ipc.py | 2 | ||||
-rwxr-xr-x | bin/egencache | 2 | ||||
-rwxr-xr-x | bin/emaint | 2 | ||||
-rwxr-xr-x | bin/emerge | 2 | ||||
-rwxr-xr-x | bin/emerge-webrsync | 23 | ||||
-rwxr-xr-x | bin/env-update | 2 | ||||
-rwxr-xr-x | bin/etc-update | 2 | ||||
-rwxr-xr-x | bin/fixpackages | 2 | ||||
-rwxr-xr-x | bin/glsa-check | 2 | ||||
-rw-r--r-- | bin/install-qa-check.d/10executable-issues | 4 | ||||
-rw-r--r-- | bin/install-qa-check.d/10ignored-flags | 6 | ||||
-rw-r--r-- | bin/install-qa-check.d/60pngfix | 14 | ||||
-rwxr-xr-x | bin/misc-functions.sh | 2 | ||||
-rwxr-xr-x | bin/portageq | 8 | ||||
-rwxr-xr-x | bin/quickpkg | 2 | ||||
-rwxr-xr-x | bin/regenworld | 2 | ||||
-rw-r--r-- | cnf/make.globals | 2 | ||||
-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.py | 136 | ||||
-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.py | 88 | ||||
-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-x | lib/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.py | 159 | ||||
-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.py | 129 | ||||
-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.py | 112 | ||||
-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.5 | 2 | ||||
-rw-r--r-- | man/make.conf.5 | 6 | ||||
-rw-r--r-- | man/portage.5 | 23 | ||||
-rw-r--r-- | man/ru/color.map.5 | 2 | ||||
-rwxr-xr-x | misc/emerge-delta-webrsync | 26 | ||||
-rw-r--r-- | pym/portage/sync/modules/webrsync/webrsync.py | 70 | ||||
-rw-r--r-- | pym/portage/tests/resolver/test_features_test_use.py | 68 | ||||
-rw-r--r-- | repoman/RELEASE-NOTES | 7 | ||||
-rw-r--r-- | repoman/TEST-NOTES | 6 | ||||
-rwxr-xr-x | repoman/bin/repoman | 4 | ||||
-rw-r--r-- | repoman/cnf/qa_data/qa_data.yaml | 2 | ||||
-rw-r--r-- | repoman/cnf/repository/qa_data.yaml | 2 | ||||
-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-x | repoman/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.1 | 3 | ||||
-rwxr-xr-x | repoman/runtests | 4 | ||||
-rwxr-xr-x | repoman/setup.py | 24 | ||||
-rwxr-xr-x | runtests | 4 | ||||
-rwxr-xr-x | setup.py | 8 | ||||
-rw-r--r-- | testpath | 4 | ||||
-rw-r--r-- | tox.ini | 16 |
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 @@ -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()), @@ -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)) @@ -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()), @@ -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 |