Add basic ctan support.
This commit is contained in:
parent
0a4c6f9608
commit
b4481b0a31
2 changed files with 79 additions and 1 deletions
|
@ -82,6 +82,15 @@ class PythonPackageRequirement(Requirement):
|
|||
return p.returncode == 0
|
||||
|
||||
|
||||
class LatexPackageRequirement(Requirement):
|
||||
|
||||
def __init__(self, package: str):
|
||||
self.package = package
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%r)" % (type(self).__name__, self.package)
|
||||
|
||||
|
||||
class PhpPackageRequirement(Requirement):
|
||||
def __init__(
|
||||
self,
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
import logging
|
||||
import subprocess
|
||||
from .. import UnidentifiedError
|
||||
from ..fix_build import run_detecting_problems
|
||||
|
||||
|
||||
|
@ -68,7 +69,7 @@ class CPANResolver(Resolver):
|
|||
continue
|
||||
perlreqs.append(requirement)
|
||||
if perlreqs:
|
||||
yield (self._cmd(perlreqs), [perlreqs])
|
||||
yield (self._cmd(perlreqs), perlreqs)
|
||||
|
||||
def install(self, requirements):
|
||||
from ..requirements import PerlModuleRequirement
|
||||
|
@ -101,6 +102,73 @@ class CPANResolver(Resolver):
|
|||
raise UnsatisfiedRequirements(missing)
|
||||
|
||||
|
||||
class TlmgrResolver(Resolver):
|
||||
def __init__(self, session, repository: str, user_local=False):
|
||||
self.session = session
|
||||
self.user_local = user_local
|
||||
self.repository = repository
|
||||
|
||||
def __str__(self):
|
||||
if self.repository.startswith('http://') or self.repository.startswith('https://'):
|
||||
return 'tlmgr(%r)' % self.repository
|
||||
else:
|
||||
return self.repository
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%r, %r)" % (
|
||||
type(self).__name__, self.session, self.repository)
|
||||
|
||||
def _cmd(self, reqs):
|
||||
ret = ["tlmgr", "--repository=%s" % self.repository, "install"]
|
||||
if self.user_local:
|
||||
ret.append("--usermode")
|
||||
ret.extend([req.package for req in reqs])
|
||||
return ret
|
||||
|
||||
def explain(self, requirements):
|
||||
from ..requirements import LatexPackageRequirement
|
||||
|
||||
latexreqs = []
|
||||
for requirement in requirements:
|
||||
if not isinstance(requirement, LatexPackageRequirement):
|
||||
continue
|
||||
latexreqs.append(requirement)
|
||||
if latexreqs:
|
||||
yield (self._cmd(latexreqs), latexreqs)
|
||||
|
||||
def install(self, requirements):
|
||||
from ..requirements import LatexPackageRequirement
|
||||
|
||||
if not self.user_local:
|
||||
user = "root"
|
||||
else:
|
||||
user = None
|
||||
|
||||
missing = []
|
||||
for requirement in requirements:
|
||||
if not isinstance(requirement, LatexPackageRequirement):
|
||||
missing.append(requirement)
|
||||
continue
|
||||
cmd = self._cmd([requirement])
|
||||
logging.info("tlmgr: running %r", cmd)
|
||||
try:
|
||||
run_detecting_problems(self.session, cmd, user=user)
|
||||
except UnidentifiedError as e:
|
||||
if "tlmgr: user mode not initialized, please read the documentation!" in e.lines:
|
||||
self.session.check_call(['tlmgr', 'init-usertree'])
|
||||
else:
|
||||
raise
|
||||
if missing:
|
||||
raise UnsatisfiedRequirements(missing)
|
||||
|
||||
|
||||
class CTANResolver(TlmgrResolver):
|
||||
|
||||
def __init__(self, session, user_local=False):
|
||||
super(CTANResolver, self).__init__(
|
||||
session, "ctan", user_local=user_local)
|
||||
|
||||
|
||||
class RResolver(Resolver):
|
||||
def __init__(self, session, repos, user_local=False):
|
||||
self.session = session
|
||||
|
@ -463,6 +531,7 @@ class StackedResolver(Resolver):
|
|||
|
||||
NATIVE_RESOLVER_CLS = [
|
||||
CPANResolver,
|
||||
CTANResolver,
|
||||
PypiResolver,
|
||||
NpmResolver,
|
||||
GoResolver,
|
||||
|
|
Loading…
Add table
Reference in a new issue