commit: b1079269328e5fad5e82ba4e33893cafeef4d132 Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> AuthorDate: Fri Dec 2 09:22:16 2022 +0000 Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> CommitDate: Sun Dec 18 18:58:27 2022 +0000 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcore.git/commit/?id=b1079269
remove pkgcore_syncers plugins Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org> src/pkgcore/plugins/pkgcore_syncers.py | 4 ---- src/pkgcore/sync/base.py | 38 +++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/pkgcore/plugins/pkgcore_syncers.py b/src/pkgcore/plugins/pkgcore_syncers.py deleted file mode 100644 index 225f20eab..000000000 --- a/src/pkgcore/plugins/pkgcore_syncers.py +++ /dev/null @@ -1,4 +0,0 @@ -pkgcore_plugins = { - 'syncer': [f'pkgcore.sync.{x}.{x}_syncer' for x in - ('bzr', 'cvs', 'darcs', 'git', 'git_svn', 'hg', 'sqfs', 'svn', 'tar')], -} diff --git a/src/pkgcore/sync/base.py b/src/pkgcore/sync/base.py index a4d31d3a8..d60edeef8 100644 --- a/src/pkgcore/sync/base.py +++ b/src/pkgcore/sync/base.py @@ -7,10 +7,11 @@ __all__ = ( import os import pwd import stat +from importlib import import_module from snakeoil import process -from .. import os_data, plugin +from .. import os_data from ..config.hint import ConfigHint, configurable from ..exceptions import PkgcoreUserException @@ -93,17 +94,16 @@ class Syncer: """ uri = raw_uri.split("::", 1) if len(uri) == 1: - if self.usersync: - if os.path.exists(self.basedir): - stat = os.stat(self.basedir) - uid = stat.st_uid - gid = stat.st_gid - else: - uid = os_data.portage_uid - gid = os_data.portage_gid - else: + if not self.usersync: uid = os_data.uid gid = os_data.gid + elif os.path.exists(self.basedir): + stat = os.stat(self.basedir) + uid = stat.st_uid + gid = stat.st_gid + else: + uid = os_data.portage_uid + gid = os_data.portage_gid return uid, gid, raw_uri try: @@ -237,6 +237,20 @@ class VcsSyncer(ExternalSyncer): raise NotImplementedError(self, "_update_existing") +def _load_syncers(): + syncers = ('bzr', 'cvs', 'darcs', 'git', 'git_svn', 'hg', 'sqfs', 'svn', 'tar') + for syncer in syncers: + try: + syncer_cls: type[Syncer] = getattr(import_module(f'pkgcore.sync.{syncer}'), f'{syncer}_syncer') + except (ImportError, AttributeError): + continue + if syncer_cls.disabled: + continue + if (f := getattr(syncer_cls, '_plugin_disabled_check', None)) is not None and f(): + continue + yield syncer_cls + + @configurable( {'basedir': 'str', 'uri': 'str', 'usersync': 'bool', 'opts': 'str'}, typename='syncer') @@ -244,7 +258,7 @@ def GenericSyncer(basedir, uri, **kwargs): """Syncer using the plugin system to find a syncer based on uri.""" plugins = [ (plug.supports_uri(uri), plug) - for plug in plugin.get_plugins('syncer')] + for plug in _load_syncers()] plugins.sort(key=lambda x: x[0]) if not plugins or plugins[-1][0] <= 0: raise UriError(uri, "no known syncer support") @@ -267,7 +281,7 @@ def DisabledSync(basedir, *args, **kwargs): @configurable({'basedir': 'str', 'usersync': 'bool'}, typename='syncer') def AutodetectSyncer(basedir, **kwargs): - for syncer_cls in plugin.get_plugins('syncer'): + for syncer_cls in _load_syncers(): if args := syncer_cls.is_usable_on_filepath(basedir): return syncer_cls(basedir, *args, **kwargs) return DisabledSyncer(basedir, **kwargs)