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.*",
]