Add R/CRAN support.
This commit is contained in:
parent
84c8a1abda
commit
97da5ea6bd
3 changed files with 64 additions and 1 deletions
|
@ -55,6 +55,7 @@ issues (or lack of support for a particular ecosystem), please file a bug.
|
||||||
- Module::Build::Tiny
|
- Module::Build::Tiny
|
||||||
- PHP Pear
|
- PHP Pear
|
||||||
- Python - setup.py/setup.cfg/pyproject.toml
|
- Python - setup.py/setup.cfg/pyproject.toml
|
||||||
|
- R
|
||||||
- Ruby gems
|
- Ruby gems
|
||||||
- Waf
|
- Waf
|
||||||
|
|
||||||
|
@ -69,6 +70,7 @@ The following "native" repositories are supported:
|
||||||
- hackage
|
- hackage
|
||||||
- npm
|
- npm
|
||||||
- cargo
|
- cargo
|
||||||
|
- cran
|
||||||
- golang\*
|
- golang\*
|
||||||
|
|
||||||
As well one distribution repository:
|
As well one distribution repository:
|
||||||
|
|
|
@ -363,6 +363,28 @@ class Gradle(BuildSystem):
|
||||||
session, [self.executable, "installDist"], fixers)
|
session, [self.executable, "installDist"], fixers)
|
||||||
|
|
||||||
|
|
||||||
|
class R(BuildSystem):
|
||||||
|
|
||||||
|
name = "R"
|
||||||
|
|
||||||
|
def __init__(self, path):
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "%s(%r)" % (type(self).__name__, self.path)
|
||||||
|
|
||||||
|
def build(self, session, resolver, fixers):
|
||||||
|
run_with_build_fixers(session, ["R", "CMD", "build", "."], fixers)
|
||||||
|
|
||||||
|
def test(self, session, resolver, fixers):
|
||||||
|
run_with_build_fixers(session, ["R", "CMD", "test", "."], fixers)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def probe(cls, path):
|
||||||
|
if os.path.exists(os.path.join(path, 'DESCRIPTION')):
|
||||||
|
return cls(path)
|
||||||
|
|
||||||
|
|
||||||
class Meson(BuildSystem):
|
class Meson(BuildSystem):
|
||||||
|
|
||||||
name = "meson"
|
name = "meson"
|
||||||
|
@ -868,7 +890,7 @@ class PerlBuildTiny(BuildSystem):
|
||||||
|
|
||||||
BUILDSYSTEM_CLSES = [
|
BUILDSYSTEM_CLSES = [
|
||||||
Pear, SetupPy, Npm, Waf, Cargo, Meson, Cabal, Gradle, Maven,
|
Pear, SetupPy, Npm, Waf, Cargo, Meson, Cabal, Gradle, Maven,
|
||||||
DistInkt, Gem, Make, PerlBuildTiny, Golang]
|
DistInkt, Gem, Make, PerlBuildTiny, Golang, R]
|
||||||
|
|
||||||
|
|
||||||
def detect_buildsystems(path, trust_package=False):
|
def detect_buildsystems(path, trust_package=False):
|
||||||
|
|
|
@ -76,6 +76,44 @@ class CPANResolver(Resolver):
|
||||||
raise UnsatisfiedRequirements(missing)
|
raise UnsatisfiedRequirements(missing)
|
||||||
|
|
||||||
|
|
||||||
|
class CRANResolver(Resolver):
|
||||||
|
def __init__(self, session, repos='"http://cran.r-project.org'):
|
||||||
|
self.session = session
|
||||||
|
self.repos = repos
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "cran"
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "%s(%r, %r)" % (type(self).__name__, self.session, self.repos)
|
||||||
|
|
||||||
|
def _cmd(self, req):
|
||||||
|
return ["R", "-e", "install.packages('%s', repos=%r)" % (req.package, self.repos)]
|
||||||
|
|
||||||
|
def explain(self, requirements):
|
||||||
|
from ..requirements import RPackageRequirement
|
||||||
|
|
||||||
|
rreqs = []
|
||||||
|
for requirement in requirements:
|
||||||
|
if not isinstance(requirement, RPackageRequirement):
|
||||||
|
continue
|
||||||
|
rreqs.append(requirement)
|
||||||
|
if rreqs:
|
||||||
|
yield ([self._cmd(req) for req in rreqs])
|
||||||
|
|
||||||
|
def install(self, requirements):
|
||||||
|
from ..requirements import RPackageRequirement
|
||||||
|
|
||||||
|
missing = []
|
||||||
|
for requirement in requirements:
|
||||||
|
if not isinstance(requirement, RPackageRequirement):
|
||||||
|
missing.append(requirement)
|
||||||
|
continue
|
||||||
|
self.session.check_call(self._cmd(requirement))
|
||||||
|
if missing:
|
||||||
|
raise UnsatisfiedRequirements(missing)
|
||||||
|
|
||||||
|
|
||||||
class HackageResolver(Resolver):
|
class HackageResolver(Resolver):
|
||||||
def __init__(self, session):
|
def __init__(self, session):
|
||||||
self.session = session
|
self.session = session
|
||||||
|
@ -268,6 +306,7 @@ NATIVE_RESOLVER_CLS = [
|
||||||
NpmResolver,
|
NpmResolver,
|
||||||
GoResolver,
|
GoResolver,
|
||||||
HackageResolver,
|
HackageResolver,
|
||||||
|
CRANResolver,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue