Add basic support for octave forge.

This commit is contained in:
Jelmer Vernooij 2021-03-22 14:49:08 +00:00
parent 24e417650a
commit 7f55169fc6
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8
3 changed files with 97 additions and 4 deletions

View file

@ -132,6 +132,50 @@ class RResolver(Resolver):
raise UnsatisfiedRequirements(missing)
class OctaveForgeResolver(Resolver):
def __init__(self, session, user_local=False):
self.session = session
self.user_local = user_local
def __str__(self):
return "octave-forge"
def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.session)
def _cmd(self, req):
# TODO(jelmer: Handle self.user_local
return ["octave-cli", "--eval", "pkg install -forge %s" % req.package]
def explain(self, requirements):
from ..requirements import OctavePackageRequirement
rreqs = []
for requirement in requirements:
if not isinstance(requirement, OctavePackageRequirement):
continue
rreqs.append(requirement)
if rreqs:
yield ([self._cmd(req) for req in rreqs])
def install(self, requirements):
from ..requirements import OctavePackageRequirement
if self.user_local:
user = None
else:
user = "root"
missing = []
for requirement in requirements:
if not isinstance(requirement, OctavePackageRequirement):
missing.append(requirement)
continue
self.session.check_call(self._cmd(requirement), user=user)
if missing:
raise UnsatisfiedRequirements(missing)
class CRANResolver(RResolver):
def __init__(self, session, user_local=False):
@ -362,6 +406,7 @@ NATIVE_RESOLVER_CLS = [
HackageResolver,
CRANResolver,
BioconductorResolver,
OctaveForgeResolver,
]