commit:     989f51c3d0b48cc908892da6d5b911b46fa697b7
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 17 16:50:26 2023 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jan 17 16:50:26 2023 +0000
URL:        https://gitweb.gentoo.org/proj/gentoopm.git/commit/?id=989f51c3

Remove Paludis support

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 README.rst                     |  12 +-
 gentoopm/paludispm/__init__.py |  56 ---------
 gentoopm/paludispm/atom.py     | 201 --------------------------------
 gentoopm/paludispm/config.py   |  26 -----
 gentoopm/paludispm/contents.py |  15 ---
 gentoopm/paludispm/depend.py   |  83 -------------
 gentoopm/paludispm/pkg.py      | 257 -----------------------------------------
 gentoopm/paludispm/pkgset.py   |  24 ----
 gentoopm/paludispm/repo.py     | 146 -----------------------
 gentoopm/preferences.py        |   4 +-
 gentoopm/submodules.py         |   3 +-
 gentoopm/tests/conftest.py     |   2 +-
 gentoopm/tests/test_atom.py    |  60 +++++-----
 gentoopm/tests/test_pkg.py     |   6 +-
 pyproject.toml                 |   1 -
 15 files changed, 37 insertions(+), 859 deletions(-)

diff --git a/README.rst b/README.rst
index a3f87b3..d44a38b 100644
--- a/README.rst
+++ b/README.rst
@@ -3,8 +3,7 @@ gentoopm
 ========
 
 GentooPM is a wrapper for API of Gentoo package managers (Portage_,
-PkgCore_ and historically Paludis_).  It has historically served two
-purposes:
+PkgCore_ and historically Paludis_).  It has served two purposes:
 
 1. Making it possible to easily write apps that can utilize any
    of the available PMs.
@@ -17,13 +16,8 @@ The project provides a ``gentoopmq`` tool providing basic 
lookups
 into the PM data.  Most importantly, it provides an IPython-friendly
 ``gentoopmq shell`` command that can be used to play with the API.
 
-The project is currently in keep-alive mode.  It is updated to keep
-existing consumers working but no new features are implemented.  Paludis
-support is no longer tested and is behind other PMs, primarily because
-Paludis is no longer maintaining Gentoo ebuild support and has not been
-updated to support new EAPIs at the time of writing.
-
-The author's recommendation is to use PkgCore_ directly.
+The project maintenance is slowly resuming but the code needs major
+cleanup.
 
 
 .. _Portage: https://wiki.gentoo.org/wiki/Project:Portage

diff --git a/gentoopm/paludispm/__init__.py b/gentoopm/paludispm/__init__.py
deleted file mode 100644
index 6cb3c9c..0000000
--- a/gentoopm/paludispm/__init__.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2017 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-import functools, paludis
-
-try:
-    paludis.SlotExactFullRequirement.slots
-except (NameError, AttributeError):
-    raise ImportError(
-        "paludis version too old (at least git d15113c5058/3.0.0 required)"
-    )
-
-from ..basepm import PackageManager
-
-from .atom import PaludisAtom
-from .config import PaludisConfig
-from .repo import PaludisRepoDict, PaludisInstalledRepo, PaludisStackRepo
-
-
-class PaludisPM(PackageManager):
-    name = "paludis"
-
-    @property
-    def version(self):
-        return paludis.VERSION
-
-    def reload_config(self):
-        config = "portage:%s" % self.config_root
-        self._env = paludis.EnvironmentFactory.instance.create(config)
-
-    @property
-    def repositories(self):
-        return PaludisRepoDict(self._env)
-
-    @property
-    def root(self):
-        # FIXME
-        return "/"
-
-    @property
-    def installed(self):
-        return PaludisInstalledRepo(self._env, self.config_root)
-
-    @property
-    def stack(self):
-        return PaludisStackRepo(self._env)
-
-    @property
-    def Atom(self):
-        return functools.partial(PaludisAtom, env=self._env)
-
-    @property
-    def config(self):
-        return PaludisConfig(self._env)

diff --git a/gentoopm/paludispm/atom.py b/gentoopm/paludispm/atom.py
deleted file mode 100644
index 6faa7eb..0000000
--- a/gentoopm/paludispm/atom.py
+++ /dev/null
@@ -1,201 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-import paludis, re
-
-from ..basepm.atom import PMAtom, PMPackageKey, PMPackageVersion, 
PMIncompletePackageKey
-from ..exceptions import InvalidAtomStringError
-
-_category_wildcard_re = re.compile(r"\w")
-
-
-class PaludisPackageKey(PMPackageKey):
-    def __new__(self, key):
-        return PMPackageKey.__new__(self, str(key))
-
-    def __init__(self, key):
-        self._k = key
-
-    @property
-    def category(self):
-        return str(self._k.category)
-
-    @property
-    def package(self):
-        return str(self._k.package)
-
-
-class PaludisIncompletePackageKey(PMIncompletePackageKey):
-    def __new__(self, key):
-        return PMIncompletePackageKey.__new__(self, str(key))
-
-
-class PaludisPackageVersion(PMPackageVersion):
-    def __new__(self, ver):
-        return PMPackageVersion.__new__(self, str(ver))
-
-    def __init__(self, ver):
-        self._v = ver
-
-    @property
-    def without_revision(self):
-        return str(self._v.remove_revision())
-
-    @property
-    def revision(self):
-        rs = self._v.revision_only()
-        assert rs.startswith("r")
-        return int(rs[1:])
-
-    def __lt__(self, other):
-        return self._v < other._v
-
-
-class PaludisAtom(PMAtom):
-    def _init_atom(self, s, env, wildcards=False):
-        opts = (
-            paludis.UserPackageDepSpecOptions()
-            + paludis.UserPackageDepSpecOption.NO_DISAMBIGUATION
-        )
-        if wildcards:
-            opts += paludis.UserPackageDepSpecOption.ALLOW_WILDCARDS
-
-        try:
-            self._atom = paludis.parse_user_package_dep_spec(
-                s, env, opts, paludis.Filter.All()
-            )
-        except (
-            paludis.BadVersionOperatorError,
-            paludis.PackageDepSpecError,
-            paludis.RepositoryNameError,
-        ):
-            raise InvalidAtomStringError("Incorrect atom: %s" % s)
-
-    def __init__(self, s, env, block=""):
-        self._incomplete = False
-        self._blocking = block
-        if isinstance(s, paludis.PackageDepSpec):
-            self._atom = s
-        else:
-            try:
-                self._init_atom(s, env)
-            except InvalidAtomStringError:
-                # try */ for the category
-                self._init_atom(_category_wildcard_re.sub(r"*/\g<0>", s, 1), 
env, True)
-                self._incomplete = True
-        self._env = env
-
-    def _match(self, pkg):
-        # we have to implementing matching by hand, boo
-        other = pkg.atom
-        # 1) category, our may be unset
-        if self.key.category is not None and self.key.category != 
other.key.category:
-            return False
-        # 2) package name
-        if self.key.package != other.key.package:
-            return False
-        # 3) package version (if any requirement set)
-        try:
-            vr = next(iter(self._atom.version_requirements))
-        except StopIteration:
-            pass
-        else:
-            if not vr.version_operator.compare(pkg._pkg.version, 
vr.version_spec):
-                return False
-        # 4) slot
-        if self.slot is not None and self.slot != other.slot:
-            return False
-        # 5) repository
-        if self.repository is not None and self.repository != other.repository:
-            return False
-        return True
-
-    def __contains__(self, pkg):
-        return self._match(pkg) != self.blocking
-
-    def __str__(self):
-        if self._incomplete:
-            raise ValueError("Unable to stringify incomplete atom")
-        return "%s%s" % (self._blocking, str(self._atom))
-
-    @property
-    def complete(self):
-        return not self._incomplete
-
-    @property
-    def blocking(self):
-        return bool(self._blocking)
-
-    @property
-    def key(self):
-        if self.complete:
-            return PaludisPackageKey(self._atom.package)
-        else:
-            return PaludisIncompletePackageKey(self._atom.package_name_part)
-
-    @property
-    def version(self):
-        try:
-            vr = next(iter(self._atom.version_requirements))
-        except StopIteration:
-            return None
-        return PaludisPackageVersion(vr.version_spec)
-
-    @property
-    def slot(self):
-        sreq = self._atom.slot_requirement
-        if sreq is None:
-            return None
-        if isinstance(sreq, paludis.SlotExactPartialRequirement):  # :x
-            return str(sreq.slot)
-        if isinstance(sreq, paludis.SlotExactFullRequirement):  # :x/y
-            return str(sreq.slots[0])
-        if isinstance(sreq, paludis.SlotAnyAtAllLockedRequirement):  # :=
-            return None
-        if isinstance(sreq, paludis.SlotAnyPartialLockedRequirement):  # :x=
-            return None
-        if isinstance(sreq, paludis.SlotAnyUnlockedRequirement):  # :*
-            return None
-        raise NotImplementedError("Unknown slot requirement type %s" % 
repr(sreq))
-
-    @property
-    def subslot(self):
-        sreq = self._atom.slot_requirement
-        if sreq is None:
-            return None
-        if isinstance(sreq, paludis.SlotExactPartialRequirement):  # :x
-            return None
-        if isinstance(sreq, paludis.SlotExactFullRequirement):  # :x/y
-            return str(sreq.slots[1])
-        if isinstance(sreq, paludis.SlotAnyAtAllLockedRequirement):  # :=
-            return None
-        if isinstance(sreq, paludis.SlotAnyPartialLockedRequirement):  # :x=
-            return None
-        if isinstance(sreq, paludis.SlotAnyUnlockedRequirement):  # :*
-            return None
-        raise NotImplementedError("Unknown slot requirement type %s" % 
repr(sreq))
-
-    @property
-    def slot_operator(self):
-        sreq = self._atom.slot_requirement
-        if sreq is None:
-            return None
-        if isinstance(sreq, paludis.SlotExactPartialRequirement):  # :x
-            return None
-        if isinstance(sreq, paludis.SlotExactFullRequirement):  # :x/y
-            return None
-        if isinstance(sreq, paludis.SlotAnyAtAllLockedRequirement):  # :=
-            return "="
-        if isinstance(sreq, paludis.SlotAnyPartialLockedRequirement):  # :x=
-            return "="
-        if isinstance(sreq, paludis.SlotAnyUnlockedRequirement):  # :*
-            return "*"
-        raise NotImplementedError("Unknown slot requirement type %s" % 
repr(sreq))
-
-    @property
-    def repository(self):
-        if self._atom.in_repository is None:
-            return None
-        return str(self._atom.in_repository)

diff --git a/gentoopm/paludispm/config.py b/gentoopm/paludispm/config.py
deleted file mode 100644
index 704073c..0000000
--- a/gentoopm/paludispm/config.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-from ..basepm.config import PMConfig
-
-
-class PaludisConfig(PMConfig):
-    def __init__(self, env):
-        self._env = env
-
-    # XXX: the userpriv_* funcs return current UID/GID
-    # when run by an unprivileged user
-
-    @property
-    def userpriv_enabled(self):
-        return self.userpriv_uid != 0
-
-    @property
-    def userpriv_uid(self):
-        return self._env.reduced_uid()
-
-    @property
-    def userpriv_gid(self):
-        return self._env.reduced_gid()

diff --git a/gentoopm/paludispm/contents.py b/gentoopm/paludispm/contents.py
deleted file mode 100644
index 17355c7..0000000
--- a/gentoopm/paludispm/contents.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-from ..basepm.contents import PMPackageContents, PMContentObj
-
-
-class PaludisPackageContents(PMPackageContents):
-    def __init__(self, cont):
-        self._cont = cont
-
-    def __iter__(self):
-        for f in self._cont:
-            yield PMContentObj(f.location_key().parse_value())

diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py
deleted file mode 100644
index e7ddb78..0000000
--- a/gentoopm/paludispm/depend.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-import paludis, re
-from collections import namedtuple
-
-from ..basepm.depend import (
-    PMPackageDepSet,
-    PMConditionalDep,
-    PMAnyOfDep,
-    PMAllOfDep,
-    PMExactlyOneOfDep,
-    PMAtMostOneOfDep,
-    PMBaseDep,
-)
-
-from .atom import PaludisAtom
-
-_block_re = re.compile("^!*")
-
-
-class PaludisBaseDep(PMBaseDep):
-    def __init__(self, deps, args):
-        self._deps = deps
-        self._args = args
-
-    def __iter__(self):
-        for d in self._deps:
-            if isinstance(d, paludis.PackageDepSpec):
-                assert self._args.cls is None
-                yield PaludisAtom(d, self._args.env)
-            elif isinstance(d, paludis.BlockDepSpec):
-                assert self._args.cls is None
-                yield PaludisAtom(
-                    d.blocking, self._args.env, 
block=_block_re.match(d.text).group(0)
-                )
-            elif isinstance(d, paludis.AnyDepSpec):
-                yield PaludisAnyOfDep(d, self._args)
-            elif isinstance(d, paludis.AllDepSpec):
-                yield PaludisAllOfDep(d, self._args)
-            elif isinstance(d, paludis.ExactlyOneDepSpec):
-                yield PaludisExactlyOneOfDep(d, self._args)
-            elif isinstance(d, paludis.AtMostOneDepSpec):
-                yield PaludisAtMostOneOfDep(d, self._args)
-            elif isinstance(d, paludis.ConditionalDepSpec):
-                yield PaludisConditionalDep(d, self._args)
-            elif isinstance(d, paludis.PlainTextDepSpec):
-                assert self._args.cls is not None
-                yield self._args.cls(str(d))
-            else:
-                raise NotImplementedError("Unable to parse %s" % repr(d))
-
-
-class PaludisAnyOfDep(PMAnyOfDep, PaludisBaseDep):
-    pass
-
-
-class PaludisAllOfDep(PMAllOfDep, PaludisBaseDep):
-    pass
-
-
-class PaludisExactlyOneOfDep(PMExactlyOneOfDep, PaludisBaseDep):
-    pass
-
-
-class PaludisAtMostOneOfDep(PMAtMostOneOfDep, PaludisBaseDep):
-    pass
-
-
-class PaludisConditionalDep(PMConditionalDep, PaludisBaseDep):
-    @property
-    def enabled(self):
-        return self._deps.condition_met(self._args.env, self._args.pkg)
-
-
-_argtuple = namedtuple("PaludisDepArgTuple", ("env", "pkg", "cls"))
-
-
-class PaludisPackageDepSet(PMPackageDepSet, PaludisAllOfDep):
-    def __init__(self, deps, pkg, cls=None):
-        PaludisAllOfDep.__init__(self, deps, _argtuple(pkg._env, pkg._pkg, 
cls))

diff --git a/gentoopm/paludispm/pkg.py b/gentoopm/paludispm/pkg.py
deleted file mode 100644
index f8fda41..0000000
--- a/gentoopm/paludispm/pkg.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011-2023 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-import paludis
-
-from ..basepm.depend import PMRequiredUseAtom
-from ..basepm.pkg import (
-    PMPackage,
-    PMPackageDescription,
-    PMInstallablePackage,
-    PMInstalledPackage,
-    PMBoundPackageKey,
-    PMPackageState,
-    PMUseFlag,
-)
-from ..util import SpaceSepFrozenSet, SpaceSepTuple
-
-from .atom import PaludisAtom, PaludisPackageKey, PaludisPackageVersion
-from .contents import PaludisPackageContents
-from .depend import PaludisPackageDepSet
-
-
-class PaludisBoundPackageKey(PaludisPackageKey, PMBoundPackageKey):
-    def __new__(self, key, pkg):
-        return PaludisPackageKey.__new__(self, key)
-
-    def __init__(self, key, pkg):
-        self._state = PMPackageState(
-            installable=isinstance(pkg, PaludisInstallableID),
-            installed=isinstance(pkg, PaludisInstalledID),
-        )
-
-    @property
-    def state(self):
-        return self._state
-
-
-class PaludisPackageDescription(PMPackageDescription):
-    def __init__(self, pkg):
-        self._pkg = pkg
-
-    @property
-    def short(self):
-        return self._pkg.short_description_key().parse_value()
-
-    @property
-    def long(self):
-        k = self._pkg.long_description_key()
-        return k.parse_value() if k is not None else None
-
-
-class PaludisChoice(PMUseFlag):
-    def __new__(self, choice):
-        return PMUseFlag.__new__(self, str(choice.name_with_prefix))
-
-    def __init__(self, choice):
-        self._c = choice
-
-    @property
-    def enabled(self):
-        return self._c.enabled
-
-
-class PaludisChoiceSet(SpaceSepFrozenSet):
-    def __new__(self, choices):
-        def _get_iuse():
-            for group in choices:
-                if group.raw_name == "build_options":  # paludis specific
-                    continue
-                for c in group:
-                    try:
-                        if c.origin != paludis.ChoiceOrigin.EXPLICIT:
-                            continue
-                    except AttributeError:
-                        if not c.explicitly_listed:
-                            continue
-                    yield PaludisChoice(c)
-
-        self._choices = choices
-        return SpaceSepFrozenSet.__new__(self, _get_iuse())
-
-    def __getitem__(self, k):
-        try:
-            return SpaceSepFrozenSet.__getitem__(self, k)
-        except KeyError:
-            for group in self._choices:
-                for c in group:
-                    if str(c.name_with_prefix) == k:
-                        return PaludisChoice(c)
-            raise
-
-
-class PaludisID(PMPackage, PaludisAtom):
-    def __init__(self, pkg, env):
-        self._pkg = pkg
-        self._env = env
-
-    @property
-    def path(self):
-        return self._pkg.fs_location_key().parse_value()
-
-    @property
-    def slotted_atom(self):
-        cp = str(self.key)
-        slot = self.slot
-        return PaludisAtom("%s:%s" % (cp, slot), self._env)
-
-    @property
-    def unversioned_atom(self):
-        return PaludisAtom(str(self.key), self._env)
-
-    @property
-    def key(self):
-        return PaludisBoundPackageKey(self._pkg.name, self)
-
-    @property
-    def version(self):
-        return PaludisPackageVersion(self._pkg.version)
-
-    def _get_meta(self, key):
-        if isinstance(key, str):
-            key = self._pkg.find_metadata(key)
-        if key is None:
-            return ()
-        return key.parse_value()
-
-    @property
-    def eapi(self):
-        return str(self._get_meta("EAPI"))
-
-    @property
-    def description(self):
-        return PaludisPackageDescription(self._pkg)
-
-    @property
-    def inherits(self):
-        return SpaceSepFrozenSet(self._get_meta("INHERITED"))
-
-    @property
-    def defined_phases(self):
-        ret = SpaceSepFrozenSet(self._get_meta("DEFINED_PHASES"))
-        if not ret:
-            return None
-        elif ret == ("-",):
-            return SpaceSepFrozenSet(())
-        return ret
-
-    @property
-    def homepages(self):
-        spec = self._get_meta(self._pkg.homepage_key())
-        return SpaceSepTuple(map(str, spec))
-
-    @property
-    def keywords(self):
-        kws = self._get_meta(self._pkg.keywords_key())
-        return SpaceSepFrozenSet(map(str, kws))
-
-    @property
-    def slot(self):
-        slot = self._get_meta(self._pkg.slot_key())
-        return slot.raw_value.split("/")[0]
-
-    @property
-    def subslot(self):
-        slot = self._get_meta(self._pkg.slot_key())
-        # (implicit fallback to slot if no explicit subslot)
-        return slot.raw_value.split("/")[-1]
-
-    @property
-    def repository(self):
-        return str(self._pkg.repository_name)
-
-    @property
-    def build_dependencies(self):
-        return PaludisPackageDepSet(
-            self._get_meta(self._pkg.build_dependencies_key()), self
-        )
-
-    @property
-    def cbuild_build_dependencies(self):
-        # paludis does not implement EAPI 7
-        return self.build_dependencies
-
-    @property
-    def run_dependencies(self):
-        return PaludisPackageDepSet(
-            self._get_meta(self._pkg.run_dependencies_key()), self
-        )
-
-    @property
-    def post_dependencies(self):
-        return PaludisPackageDepSet(
-            self._get_meta(self._pkg.post_dependencies_key()), self
-        )
-
-    @property
-    def required_use(self):
-        k = self._pkg.find_metadata("REQUIRED_USE")
-        if k is None:
-            return None
-        return PaludisPackageDepSet(
-            self._get_meta("REQUIRED_USE"), self, PMRequiredUseAtom
-        )
-
-    @property
-    def license(self):
-        raise NotImplementedError(".license is not implemented for Paludis")
-
-    @property
-    def properties(self):
-        raise NotImplementedError(".properties is not implemented for Paludis")
-
-    @property
-    def restrict(self):
-        raise NotImplementedError(".restrict is not implemented for Paludis")
-
-    @property
-    def use(self):
-        return PaludisChoiceSet(self._get_meta(self._pkg.choices_key()))
-
-    @property
-    def _atom(self):
-        return self._pkg.uniquely_identifying_spec()
-
-    def __str__(self):
-        return str(self._atom)
-
-    def __lt__(self, other):
-        if not isinstance(other, PaludisID):
-            raise TypeError("Unable to compare %s against %s" % self, other)
-        return (
-            self.key < other.key
-            or self.version < other.version
-            or self._env.more_important_than(other.repository, self.repository)
-        )
-
-
-class PaludisInstallableID(PaludisID, PMInstallablePackage):
-    @property
-    def maintainers(self):
-        # XXX: find_metadata() + magic
-        return None
-
-    @property
-    def repo_masked(self):
-        raise NotImplementedError(".repo_masked is not implemented for 
Paludis")
-
-
-class PaludisInstalledID(PaludisID, PMInstalledPackage):
-    @property
-    def contents(self):
-        try:
-            return PaludisPackageContents(self._pkg.contents())
-        except AttributeError:
-            return 
PaludisPackageContents(self._get_meta(self._pkg.contents_key()))

diff --git a/gentoopm/paludispm/pkgset.py b/gentoopm/paludispm/pkgset.py
deleted file mode 100644
index 79a37a8..0000000
--- a/gentoopm/paludispm/pkgset.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011-2023 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-from ..basepm.pkgset import PMFilteredPackageSet
-
-from .atom import PaludisAtom
-
-
-class PaludisPackageSet(object):
-    def __init__(self, env):
-        self._env = env
-
-    def filter(self, *args, **kwargs):
-        newargs = [(a if not isinstance(a, str) else PaludisAtom(a)) for a in 
args]
-
-        return PaludisFilteredPackageSet(self, newargs, kwargs)
-
-
-class PaludisFilteredPackageSet(PaludisPackageSet, PMFilteredPackageSet):
-    def __init__(self, pset, args, kwargs):
-        PaludisPackageSet.__init__(self, pset._env)
-        PMFilteredPackageSet.__init__(self, pset, args, kwargs)

diff --git a/gentoopm/paludispm/repo.py b/gentoopm/paludispm/repo.py
deleted file mode 100644
index f1a1861..0000000
--- a/gentoopm/paludispm/repo.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-#      vim:fileencoding=utf-8
-# (c) 2011-2023 Michał Górny <[email protected]>
-# Released under the terms of the 2-clause BSD license.
-
-from abc import abstractproperty
-
-import paludis
-
-from ..basepm.repo import PMRepository, PMRepositoryDict, PMEbuildRepository
-
-from .atom import PaludisAtom
-from .pkg import PaludisInstallableID, PaludisInstalledID
-from .pkgset import PaludisPackageSet
-
-
-class PaludisRepoDict(PMRepositoryDict):
-    def __iter__(self):
-        for r in self._env.repositories:
-            if r.format_key().parse_value() == "e":
-                yield PaludisLivefsRepository(r, self._env)
-
-    def __init__(self, env):
-        self._env = env
-
-
-class PaludisEnumID(object):
-    pass
-
-
-class PaludisBaseRepo(PMRepository, PaludisPackageSet):
-    @property
-    def _gen(self):
-        return paludis.Generator.All()
-
-    @property
-    def _filt(self):
-        return paludis.Filter.All()
-
-    @property
-    def _sel(self):
-        return paludis.Selection.AllVersionsUnsorted
-
-    @abstractproperty
-    def _pkg_class(self):
-        pass
-
-    def __iter__(self):
-        for p in self._env[self._sel(paludis.FilteredGenerator(self._gen, 
self._filt))]:
-            yield self._pkg_class(p, self._env)
-
-    def filter(self, *args, **kwargs):
-        pset = self
-        newargs = []
-
-        for f in args:
-            if isinstance(f, str):
-                f = PaludisAtom(f, self._env)
-            if isinstance(f, PaludisAtom):
-                newgen = paludis.Generator.Matches(
-                    f._atom, paludis.MatchPackageOptions()
-                )
-                pset = PaludisOverrideRepo(pset, gen=newgen)
-            else:
-                newargs.append(f)
-
-        if id(pset) == id(self):
-            return PaludisPackageSet.filter(self, *args, **kwargs)
-        elif newargs or kwargs:
-            return pset.filter(*newargs, **kwargs)
-        else:
-            return pset
-
-    @property
-    def sorted(self):
-        return PaludisOverrideRepo(self, 
sel=paludis.Selection.AllVersionsSorted)
-
-
-class PaludisOverrideRepo(PaludisBaseRepo):
-    @property
-    def _gen(self):
-        return self._mygen
-
-    @property
-    def _filt(self):
-        return self._myfilt
-
-    @property
-    def _sel(self):
-        return self._mysel
-
-    @property
-    def _pkg_class(self):
-        return self._mypkg_class
-
-    def __init__(self, repo, filt=None, gen=None, sel=None):
-        PaludisBaseRepo.__init__(self, repo._env)
-        self._myfilt = filt or repo._filt
-        self._mygen = repo._gen
-        if gen is not None:
-            self._mygen &= gen
-        self._mysel = sel or repo._sel
-        self._mypkg_class = repo._pkg_class
-
-
-class PaludisStackRepo(PaludisBaseRepo):
-    _pkg_class = PaludisInstallableID
-
-    @property
-    def _filt(self):
-        return paludis.Filter.SupportsInstallAction()
-
-
-class PaludisLivefsRepository(PaludisBaseRepo, PMEbuildRepository):
-    _pkg_class = PaludisInstallableID
-
-    def __init__(self, repo_obj, env):
-        PaludisBaseRepo.__init__(self, env)
-        self._repo = repo_obj
-
-    @property
-    def _gen(self):
-        return paludis.Generator.InRepository(self._repo.name)
-
-    @property
-    def name(self):
-        return str(self._repo.name)
-
-    @property
-    def path(self):
-        return self._repo.location_key().parse_value()
-
-    def __lt__(self, other):
-        return self._env.more_important_than(other.name, self.name)
-
-
-class PaludisInstalledRepo(PaludisBaseRepo):
-    _pkg_class = PaludisInstalledID
-
-    def __init__(self, env, root):
-        PaludisBaseRepo.__init__(self, env)
-        self._root = root
-
-    @property
-    def _filt(self):
-        return paludis.Filter.InstalledAtRoot(self._root)

diff --git a/gentoopm/preferences.py b/gentoopm/preferences.py
index 4afc220..65ae186 100644
--- a/gentoopm/preferences.py
+++ b/gentoopm/preferences.py
@@ -1,13 +1,13 @@
 #!/usr/bin/python
 #      vim:fileencoding=utf-8
-# (c) 2011 Michał Górny <[email protected]>
+# (c) 2011-2023 Michał Górny <[email protected]>
 # Released under the terms of the 2-clause BSD license.
 
 import os
 
 # portage comes last as it is often installed aside anyway
 # pkgcore is best supported and fastest ATM
-default_preference_list = ("pkgcore", "paludis", "portage")
+default_preference_list = ("pkgcore", "portage")
 
 
 def get_preferred_pms():

diff --git a/gentoopm/submodules.py b/gentoopm/submodules.py
index 2656d91..635af92 100644
--- a/gentoopm/submodules.py
+++ b/gentoopm/submodules.py
@@ -1,10 +1,9 @@
 #!/usr/bin/python
 #      vim:fileencoding=utf-8
-# (c) 2011 Michał Górny <[email protected]>
+# (c) 2011-2023 Michał Górny <[email protected]>
 # Released under the terms of the 2-clause BSD license.
 
 _supported_pms = {
-    "paludis": ("paludispm", "PaludisPM"),
     "pkgcore": ("pkgcorepm", "PkgCorePM"),
     "portage": ("portagepm", "PortagePM"),
 }

diff --git a/gentoopm/tests/conftest.py b/gentoopm/tests/conftest.py
index ab716d2..bc8ce59 100644
--- a/gentoopm/tests/conftest.py
+++ b/gentoopm/tests/conftest.py
@@ -29,7 +29,7 @@ def test_env(tmp_path_factory):
     os.environ["PORTAGE_CONFIGROOT"] = str(abs_test_dir)
 
 
[email protected](scope="session", params=["paludis", "pkgcore", "portage"])
[email protected](scope="session", params=["pkgcore", "portage"])
 def pm(request, test_env):
     from gentoopm.submodules import get_pm
 

diff --git a/gentoopm/tests/test_atom.py b/gentoopm/tests/test_atom.py
index aa37e08..18bc93b 100644
--- a/gentoopm/tests/test_atom.py
+++ b/gentoopm/tests/test_atom.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 #      vim:fileencoding=utf-8
-# (c) 2011-2022 Michał Górny <[email protected]>
+# (c) 2011-2023 Michał Górny <[email protected]>
 # Released under the terms of the 2-clause BSD license.
 
 import pytest
@@ -124,21 +124,18 @@ def test_atom_parts_dumb(pm):
 
 
 def test_atom_slots(pm):
-    # Paludis does not allow dependency syntax on user-specified slots
-    # FIXME: figure out how to test it better
-    if pm.name != "paludis":
-        a = pm.Atom("app-foo/bar:=")
-        assert a.slot is None
-        assert a.subslot is None
-        assert a.slot_operator == "="
-        b = pm.Atom("app-foo/bar:*")
-        assert b.slot is None
-        assert b.subslot is None
-        assert b.slot_operator == "*"
-        c = pm.Atom("app-foo/bar:1=")
-        assert c.slot == "1"
-        assert c.subslot is None
-        assert c.slot_operator == "="
+    a = pm.Atom("app-foo/bar:=")
+    assert a.slot is None
+    assert a.subslot is None
+    assert a.slot_operator == "="
+    b = pm.Atom("app-foo/bar:*")
+    assert b.slot is None
+    assert b.subslot is None
+    assert b.slot_operator == "*"
+    c = pm.Atom("app-foo/bar:1=")
+    assert c.slot == "1"
+    assert c.subslot is None
+    assert c.slot_operator == "="
     d = pm.Atom("app-foo/bar:1/2")
     assert d.slot == "1"
     assert d.subslot == "2"
@@ -150,23 +147,20 @@ def test_atom_slots(pm):
 
 
 def test_unqualified_atom_slots(pm):
-    # Paludis does not allow dependency syntax on user-specified slots
-    # FIXME: figure out how to test it better
-    if pm.name != "paludis":
-        a = pm.Atom("bar:=")
-        assert a.slot is None
-        assert a.subslot is None
-        assert a.slot_operator == "="
-        # FIXME: this is broken with recent pkgcore
-        if pm.name != "pkgcore":
-            b = pm.Atom("bar:*")
-            assert b.slot is None
-            assert b.subslot is None
-            assert b.slot_operator == "*"
-        c = pm.Atom("bar:1=")
-        assert c.slot == "1"
-        assert c.subslot is None
-        assert c.slot_operator == "="
+    a = pm.Atom("bar:=")
+    assert a.slot is None
+    assert a.subslot is None
+    assert a.slot_operator == "="
+    # FIXME: this is broken with recent pkgcore
+    if pm.name != "pkgcore":
+        b = pm.Atom("bar:*")
+        assert b.slot is None
+        assert b.subslot is None
+        assert b.slot_operator == "*"
+    c = pm.Atom("bar:1=")
+    assert c.slot == "1"
+    assert c.subslot is None
+    assert c.slot_operator == "="
     d = pm.Atom("bar:1/2")
     assert d.slot == "1"
     assert d.subslot == "2"

diff --git a/gentoopm/tests/test_pkg.py b/gentoopm/tests/test_pkg.py
index 271b52a..9243962 100644
--- a/gentoopm/tests/test_pkg.py
+++ b/gentoopm/tests/test_pkg.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 #      vim:fileencoding=utf-8
-# (c) 2011-2022 Michał Górny <[email protected]>
+# (c) 2011-2023 Michał Górny <[email protected]>
 # Released under the terms of the 2-clause BSD license.
 
 import pytest
@@ -111,7 +111,7 @@ def test_non_subslotted(stack_pkg):
 
 
 def test_maintainers(stack_pkg):
-    # TODO: remove this hack once portage&paludis give us maintainers
+    # TODO: remove this hack once portage give us maintainers
     if stack_pkg.maintainers is None:
         pytest.skip("maintainers not supported")
     assert [m.email for m in stack_pkg.maintainers] == [
@@ -121,7 +121,7 @@ def test_maintainers(stack_pkg):
 
 
 def test_no_maintainers(subslotted_pkg):
-    # TODO: remove this hack once portage&paludis give us maintainers
+    # TODO: remove this hack once portage give us maintainers
     if subslotted_pkg.maintainers is None:
         pytest.skip("maintainers not supported")
     assert list(subslotted_pkg.maintainers) == []

diff --git a/pyproject.toml b/pyproject.toml
index 2c35880..3eb0113 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -42,7 +42,6 @@ include = [
 
 [[tool.mypy.overrides]]
 module = [
-    "paludis.*",
     "pkgcore.*",
     "portage.*",
 ]

Reply via email to