Add hackage repository support.

This commit is contained in:
Jelmer Vernooij 2021-02-27 17:23:51 +00:00
parent a963db22be
commit 27a02686d6
5 changed files with 122 additions and 59 deletions

View file

@ -60,8 +60,30 @@ class CPANResolver(Resolver):
def explain(self, requirements):
raise NotImplementedError(self.explain)
def met(self, requirement):
raise NotImplementedError(self.met)
class HackageResolver(Resolver):
def __init__(self, session):
self.session = session
def __str__(self):
return "hackage"
def install(self, requirements):
from ..requirements import HaskellPackageRequirement
missing = []
for requirement in requirements:
if not isinstance(requirement, HaskellPackageRequirement):
missing.append(requirement)
continue
self.session.check_call(
["cabal", "install", requirement.package],
user="root")
if missing:
raise UnsatisfiedRequirements(missing)
def explain(self, requirements):
raise NotImplementedError(self.explain)
class CargoResolver(Resolver):
@ -88,9 +110,6 @@ class CargoResolver(Resolver):
def explain(self, requirements):
raise NotImplementedError(self.explain)
def met(self, requirement):
raise NotImplementedError(self.met)
class PypiResolver(Resolver):
@ -114,9 +133,6 @@ class PypiResolver(Resolver):
def explain(self, requirements):
raise NotImplementedError(self.explain)
def met(self, requirement):
raise NotImplementedError(self.met)
NPM_COMMAND_PACKAGES = {
"del-cli": "del-cli",
@ -150,14 +166,14 @@ class NpmResolver(Resolver):
def explain(self, requirements):
raise NotImplementedError(self.explain)
def met(self, requirement):
raise NotImplementedError(self.met)
class StackedResolver(Resolver):
def __init__(self, subs):
self.subs = subs
def __repr__(self):
return "%s(%r)" % (type(self).__name__, self.subs)
def __str__(self):
return "[" + ", ".join(map(str, self.subs)) + "]"
@ -176,7 +192,8 @@ def native_resolvers(session):
CPANResolver(session),
PypiResolver(session),
NpmResolver(session),
CargoResolver(session)])
CargoResolver(session),
HackageResolver(session)])
class ExplainResolver(Resolver):
@ -203,5 +220,6 @@ def auto_resolver(session):
CPANResolver(session),
PypiResolver(session),
NpmResolver(session),
CargoResolver(session)])
CargoResolver(session),
HackageResolver(session)])
return StackedResolver(resolvers)