Fix style.
This commit is contained in:
parent
1741622d85
commit
f8d269b6e5
18 changed files with 337 additions and 317 deletions
|
@ -17,13 +17,11 @@
|
|||
|
||||
|
||||
class UnsatisfiedRequirements(Exception):
|
||||
|
||||
def __init__(self, reqs):
|
||||
self.requirements = reqs
|
||||
|
||||
|
||||
class Resolver(object):
|
||||
|
||||
def install(self, requirements):
|
||||
raise NotImplementedError(self.install)
|
||||
|
||||
|
@ -38,7 +36,6 @@ class Resolver(object):
|
|||
|
||||
|
||||
class CPANResolver(Resolver):
|
||||
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
|
@ -47,6 +44,7 @@ class CPANResolver(Resolver):
|
|||
|
||||
def install(self, requirements):
|
||||
from ..requirements import PerlModuleRequirement
|
||||
|
||||
missing = []
|
||||
for requirement in requirements:
|
||||
if not isinstance(requirement, PerlModuleRequirement):
|
||||
|
@ -55,7 +53,8 @@ class CPANResolver(Resolver):
|
|||
# TODO(jelmer): Specify -T to skip tests?
|
||||
self.session.check_call(
|
||||
["cpan", "-i", requirement.module],
|
||||
user="root", env={"PERL_MM_USE_DEFAULT": "1"}
|
||||
user="root",
|
||||
env={"PERL_MM_USE_DEFAULT": "1"},
|
||||
)
|
||||
if missing:
|
||||
raise UnsatisfiedRequirements(missing)
|
||||
|
@ -65,7 +64,6 @@ class CPANResolver(Resolver):
|
|||
|
||||
|
||||
class HackageResolver(Resolver):
|
||||
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
|
@ -74,14 +72,15 @@ class HackageResolver(Resolver):
|
|||
|
||||
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")
|
||||
["cabal", "install", requirement.package], user="root"
|
||||
)
|
||||
if missing:
|
||||
raise UnsatisfiedRequirements(missing)
|
||||
|
||||
|
@ -90,7 +89,6 @@ class HackageResolver(Resolver):
|
|||
|
||||
|
||||
class CargoResolver(Resolver):
|
||||
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
|
@ -99,14 +97,15 @@ class CargoResolver(Resolver):
|
|||
|
||||
def install(self, requirements):
|
||||
from ..requirements import CargoCrateRequirement
|
||||
|
||||
missing = []
|
||||
for requirement in requirements:
|
||||
if not isinstance(requirement, CargoCrateRequirement):
|
||||
missing.append(requirement)
|
||||
continue
|
||||
self.session.check_call(
|
||||
["cargo", "install", requirement.crate],
|
||||
user="root")
|
||||
["cargo", "install", requirement.crate], user="root"
|
||||
)
|
||||
if missing:
|
||||
raise UnsatisfiedRequirements(missing)
|
||||
|
||||
|
@ -115,7 +114,6 @@ class CargoResolver(Resolver):
|
|||
|
||||
|
||||
class PypiResolver(Resolver):
|
||||
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
|
@ -124,6 +122,7 @@ class PypiResolver(Resolver):
|
|||
|
||||
def install(self, requirements):
|
||||
from ..requirements import PythonPackageRequirement
|
||||
|
||||
missing = []
|
||||
for requirement in requirements:
|
||||
if not isinstance(requirement, PythonPackageRequirement):
|
||||
|
@ -143,7 +142,6 @@ NPM_COMMAND_PACKAGES = {
|
|||
|
||||
|
||||
class NpmResolver(Resolver):
|
||||
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
|
@ -152,6 +150,7 @@ class NpmResolver(Resolver):
|
|||
|
||||
def install(self, requirements):
|
||||
from ..requirements import NodePackageRequirement
|
||||
|
||||
missing = []
|
||||
for requirement in requirements:
|
||||
if not isinstance(requirement, NodePackageRequirement):
|
||||
|
@ -191,12 +190,15 @@ class StackedResolver(Resolver):
|
|||
|
||||
|
||||
def native_resolvers(session):
|
||||
return StackedResolver([
|
||||
CPANResolver(session),
|
||||
PypiResolver(session),
|
||||
NpmResolver(session),
|
||||
CargoResolver(session),
|
||||
HackageResolver(session)])
|
||||
return StackedResolver(
|
||||
[
|
||||
CPANResolver(session),
|
||||
PypiResolver(session),
|
||||
NpmResolver(session),
|
||||
CargoResolver(session),
|
||||
HackageResolver(session),
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
class ExplainResolver(Resolver):
|
||||
|
@ -215,14 +217,18 @@ def auto_resolver(session):
|
|||
# TODO(jelmer): if session is SchrootSession or if we're root, use apt
|
||||
from .apt import AptResolver
|
||||
from ..session.schroot import SchrootSession
|
||||
user = session.check_output(['echo', '$USER']).decode().strip()
|
||||
|
||||
user = session.check_output(["echo", "$USER"]).decode().strip()
|
||||
resolvers = []
|
||||
if isinstance(session, SchrootSession) or user == 'root':
|
||||
if isinstance(session, SchrootSession) or user == "root":
|
||||
resolvers.append(AptResolver.from_session(session))
|
||||
resolvers.extend([
|
||||
CPANResolver(session),
|
||||
PypiResolver(session),
|
||||
NpmResolver(session),
|
||||
CargoResolver(session),
|
||||
HackageResolver(session)])
|
||||
resolvers.extend(
|
||||
[
|
||||
CPANResolver(session),
|
||||
PypiResolver(session),
|
||||
NpmResolver(session),
|
||||
CargoResolver(session),
|
||||
HackageResolver(session),
|
||||
]
|
||||
)
|
||||
return StackedResolver(resolvers)
|
||||
|
|
|
@ -32,7 +32,6 @@ from ..requirements import (
|
|||
CHeaderRequirement,
|
||||
PkgConfigRequirement,
|
||||
PathRequirement,
|
||||
Requirement,
|
||||
JavaScriptRuntimeRequirement,
|
||||
ValaPackageRequirement,
|
||||
RubyGemRequirement,
|
||||
|
@ -55,20 +54,19 @@ from ..requirements import (
|
|||
AutoconfMacroRequirement,
|
||||
PythonModuleRequirement,
|
||||
PythonPackageRequirement,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class AptRequirement(Requirement):
|
||||
|
||||
def __init__(self, relations):
|
||||
super(AptRequirement, self).__init__('apt')
|
||||
super(AptRequirement, self).__init__("apt")
|
||||
self.relations = relations
|
||||
|
||||
@classmethod
|
||||
def simple(cls, package, minimum_version=None):
|
||||
rel = {'name': package}
|
||||
rel = {"name": package}
|
||||
if minimum_version is not None:
|
||||
rel['version'] = ('>=', minimum_version)
|
||||
rel["version"] = (">=", minimum_version)
|
||||
return cls([[rel]])
|
||||
|
||||
@classmethod
|
||||
|
@ -81,35 +79,50 @@ class AptRequirement(Requirement):
|
|||
def touches_package(self, package):
|
||||
for rel in self.relations:
|
||||
for entry in rel:
|
||||
if entry['name'] == package:
|
||||
if entry["name"] == package:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def python_spec_to_apt_rels(pkg_name, specs):
|
||||
# TODO(jelmer): Dealing with epoch, etc?
|
||||
if not specs:
|
||||
return [[{"name": pkg_name}]]
|
||||
else:
|
||||
rels = []
|
||||
for spec in specs:
|
||||
c = {">=": ">=", "<=": "<=", "<": "<<", ">": ">>", "=": "="}[spec[0]]
|
||||
rels.append([{"name": pkg_name, "version": (c, Version(spec[1]))}])
|
||||
return rels
|
||||
|
||||
|
||||
def get_package_for_python_package(apt_mgr, package, python_version, specs=None):
|
||||
if python_version == "pypy":
|
||||
pkg_name = apt_mgr.get_package_for_paths(
|
||||
["/usr/lib/pypy/dist-packages/%s-.*.egg-info" % package],
|
||||
regex=True)
|
||||
["/usr/lib/pypy/dist-packages/%s-.*.egg-info" % package.replace("-", "_")],
|
||||
regex=True,
|
||||
)
|
||||
elif python_version == "cpython2":
|
||||
pkg_name = apt_mgr.get_package_for_paths(
|
||||
["/usr/lib/python2\\.[0-9]/dist-packages/%s-.*.egg-info" % package],
|
||||
regex=True)
|
||||
[
|
||||
"/usr/lib/python2\\.[0-9]/dist-packages/%s-.*.egg-info"
|
||||
% package.replace("-", "_")
|
||||
],
|
||||
regex=True,
|
||||
)
|
||||
elif python_version == "cpython3":
|
||||
pkg_name = apt_mgr.get_package_for_paths(
|
||||
["/usr/lib/python3/dist-packages/%s-.*.egg-info" % package],
|
||||
regex=True)
|
||||
[
|
||||
"/usr/lib/python3/dist-packages/%s-.*.egg-info"
|
||||
% package.replace("-", "_")
|
||||
],
|
||||
regex=True,
|
||||
)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
if pkg_name is None:
|
||||
return None
|
||||
# TODO(jelmer): Dealing with epoch, etc?
|
||||
if not specs:
|
||||
rels = [[{'name': pkg_name}]]
|
||||
else:
|
||||
rels = []
|
||||
for spec in specs:
|
||||
rels.append([{'name': pkg_name, 'version': (spec[0], Version(spec[1]))}])
|
||||
rels = python_spec_to_apt_rels(pkg_name, specs)
|
||||
return AptRequirement(rels)
|
||||
|
||||
|
||||
|
@ -169,13 +182,7 @@ def get_package_for_python_module(apt_mgr, module, python_version, specs):
|
|||
pkg_name = apt_mgr.get_package_for_paths(paths, regex=True)
|
||||
if pkg_name is None:
|
||||
return None
|
||||
rels = []
|
||||
if not specs:
|
||||
rels = [[{'name': pkg_name}]]
|
||||
else:
|
||||
rels = []
|
||||
for spec in specs:
|
||||
rels.append([{'name': pkg_name, 'version': (spec[0], Version(spec[1]))}])
|
||||
rels = python_spec_to_apt_rels(pkg_name, specs)
|
||||
return AptRequirement(rels)
|
||||
|
||||
|
||||
|
@ -184,8 +191,7 @@ def resolve_binary_req(apt_mgr, req):
|
|||
paths = [req.binary_name]
|
||||
else:
|
||||
paths = [
|
||||
posixpath.join(dirname, req.binary_name)
|
||||
for dirname in ["/usr/bin", "/bin"]
|
||||
posixpath.join(dirname, req.binary_name) for dirname in ["/usr/bin", "/bin"]
|
||||
]
|
||||
pkg_name = apt_mgr.get_package_for_paths(paths)
|
||||
if pkg_name is not None:
|
||||
|
@ -200,7 +206,8 @@ def resolve_pkg_config_req(apt_mgr, req):
|
|||
if package is None:
|
||||
package = apt_mgr.get_package_for_paths(
|
||||
[posixpath.join("/usr/lib", ".*", "pkgconfig", req.module + ".pc")],
|
||||
regex=True)
|
||||
regex=True,
|
||||
)
|
||||
if package is not None:
|
||||
return AptRequirement.simple(package, minimum_version=req.minimum_version)
|
||||
return None
|
||||
|
@ -228,7 +235,8 @@ def resolve_c_header_req(apt_mgr, req):
|
|||
|
||||
def resolve_js_runtime_req(apt_mgr, req):
|
||||
package = apt_mgr.get_package_for_paths(
|
||||
["/usr/bin/node", "/usr/bin/duk"], regex=False)
|
||||
["/usr/bin/node", "/usr/bin/duk"], regex=False
|
||||
)
|
||||
if package is not None:
|
||||
return AptRequirement.simple(package)
|
||||
return None
|
||||
|
@ -249,8 +257,7 @@ def resolve_ruby_gem_req(apt_mgr, req):
|
|||
"specifications/%s-.*\\.gemspec" % req.gem
|
||||
)
|
||||
]
|
||||
package = apt_mgr.get_package_for_paths(
|
||||
paths, regex=True)
|
||||
package = apt_mgr.get_package_for_paths(paths, regex=True)
|
||||
if package is not None:
|
||||
return AptRequirement.simple(package, minimum_version=req.minimum_version)
|
||||
return None
|
||||
|
@ -258,8 +265,7 @@ def resolve_ruby_gem_req(apt_mgr, req):
|
|||
|
||||
def resolve_go_package_req(apt_mgr, req):
|
||||
package = apt_mgr.get_package_for_paths(
|
||||
[posixpath.join("/usr/share/gocode/src", req.package, ".*")],
|
||||
regex=True
|
||||
[posixpath.join("/usr/share/gocode/src", req.package, ".*")], regex=True
|
||||
)
|
||||
if package is not None:
|
||||
return AptRequirement.simple(package)
|
||||
|
@ -368,7 +374,8 @@ def resolve_java_class_req(apt_mgr, req):
|
|||
# system :(
|
||||
# TODO(jelmer): Call in session
|
||||
output = apt_mgr.session.check_output(
|
||||
["java-propose-classpath", "-c" + req.classname])
|
||||
["java-propose-classpath", "-c" + req.classname]
|
||||
)
|
||||
classpath = [p for p in output.decode().strip(":").strip().split(":") if p]
|
||||
if not classpath:
|
||||
logging.warning("unable to find classpath for %s", req.classname)
|
||||
|
@ -422,7 +429,7 @@ def resolve_maven_artifact_req(apt_mgr, req):
|
|||
|
||||
|
||||
def resolve_gnome_common_req(apt_mgr, req):
|
||||
return AptRequirement.simple('gnome-common')
|
||||
return AptRequirement.simple("gnome-common")
|
||||
|
||||
|
||||
def resolve_jdk_file_req(apt_mgr, req):
|
||||
|
@ -438,8 +445,7 @@ def resolve_perl_module_req(apt_mgr, req):
|
|||
|
||||
if req.inc is None:
|
||||
if req.filename is None:
|
||||
paths = [posixpath.join(inc, req.relfilename)
|
||||
for inc in DEFAULT_PERL_PATHS]
|
||||
paths = [posixpath.join(inc, req.relfilename) for inc in DEFAULT_PERL_PATHS]
|
||||
elif not posixpath.isabs(req.filename):
|
||||
return False
|
||||
else:
|
||||
|
@ -495,9 +501,13 @@ def resolve_python_module_req(apt_mgr, req):
|
|||
|
||||
def resolve_python_package_req(apt_mgr, req):
|
||||
if req.python_version == 2:
|
||||
return get_package_for_python_package(apt_mgr, req.package, "cpython2", req.specs)
|
||||
return get_package_for_python_package(
|
||||
apt_mgr, req.package, "cpython2", req.specs
|
||||
)
|
||||
elif req.python_version in (None, 3):
|
||||
return get_package_for_python_package(apt_mgr, req.package, "cpython3", req.specs)
|
||||
return get_package_for_python_package(
|
||||
apt_mgr, req.package, "cpython3", req.specs
|
||||
)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
@ -540,7 +550,6 @@ def resolve_requirement_apt(apt_mgr, req: Requirement) -> AptRequirement:
|
|||
|
||||
|
||||
class AptResolver(Resolver):
|
||||
|
||||
def __init__(self, apt):
|
||||
self.apt = apt
|
||||
|
||||
|
@ -570,8 +579,9 @@ class AptResolver(Resolver):
|
|||
else:
|
||||
apt_requirements.append(apt_req)
|
||||
if apt_requirements:
|
||||
self.apt.satisfy([PkgRelation.str(chain(*[
|
||||
r.relations for r in apt_requirements]))])
|
||||
self.apt.satisfy(
|
||||
[PkgRelation.str(chain(*[r.relations for r in apt_requirements]))]
|
||||
)
|
||||
if still_missing:
|
||||
raise UnsatisfiedRequirements(still_missing)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue