Avoid pre-emptively installing.

This commit is contained in:
Jelmer Vernooij 2021-03-26 18:16:24 +00:00
parent 8ab342f21c
commit 996b135c80
2 changed files with 45 additions and 44 deletions

View file

@ -173,15 +173,19 @@ def main(): # noqa: C901
display_explain_commands(e.commands)
return 1
if args.subcommand == "dist":
from .dist import run_dist
from .dist import run_dist, DistNoTarball
run_dist(
session=session,
buildsystems=bss,
resolver=resolver,
fixers=fixers,
target_directory=".",
)
try:
run_dist(
session=session,
buildsystems=bss,
resolver=resolver,
fixers=fixers,
target_directory=".",
)
except DistNoTarball:
logging.fatal('No tarball created.')
return 1
if args.subcommand == "build":
from .build import run_build

View file

@ -121,30 +121,23 @@ class Pear(BuildSystem):
def __init__(self, path):
self.path = path
def setup(self, resolver):
resolver.install([BinaryRequirement("pear")])
def dist(self, session, resolver, fixers, target_directory: str, quiet=False):
self.setup(resolver)
with DistCatcher([session.external_path(".")]) as dc:
run_with_build_fixers(session, ["pear", "package"], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "pear"), "package"], fixers)
return dc.copy_single(target_directory)
def test(self, session, resolver, fixers):
self.setup(resolver)
run_with_build_fixers(session, ["pear", "run-tests"], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "pear"), "run-tests"], fixers)
def build(self, session, resolver, fixers):
self.setup(resolver)
run_with_build_fixers(session, ["pear", "build", self.path], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "pear"), "build", self.path], fixers)
def clean(self, session, resolver, fixers):
self.setup(resolver)
# TODO
def install(self, session, resolver, fixers, install_target):
self.setup(resolver)
run_with_build_fixers(session, ["pear", "install", self.path], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "pear"), "install", self.path], fixers)
def get_declared_dependencies(self, session, fixers=None):
path = os.path.join(self.path, "package.xml")
@ -387,7 +380,9 @@ class SetupPy(BuildSystem):
# Pre-emptively insall setuptools, since distutils doesn't provide
# a 'test' subcommand and some packages fall back to distutils
# if setuptools is not available.
resolver.install([PythonPackageRequirement("setuptools")])
setuptools_req = PythonPackageRequirement("setuptools")
if not setuptools_req.met(session):
resolver.install([setuptools_req])
self._run_setup(session, resolver, ["test"], fixers)
else:
raise NotImplementedError
@ -406,7 +401,9 @@ class SetupPy(BuildSystem):
preargs.append("--quiet")
# Preemptively install setuptools since some packages fail in
# some way without it.
resolver.install([PythonPackageRequirement("setuptools")])
setuptools_req = PythonPackageRequirement("setuptools")
if not setuptools_req.met(session):
resolver.install([setuptools_req])
with DistCatcher([session.external_path("dist")]) as dc:
self._run_setup(session, resolver, preargs + ["sdist"], fixers)
return dc.copy_single(target_directory)
@ -610,12 +607,14 @@ class Gradle(BuildSystem):
logging.debug("Found build.gradle, assuming gradle package.")
return cls.from_path(path)
def setup(self, resolver):
def setup(self, session, resolver):
if not self.executable.startswith("./"):
resolver.install([BinaryRequirement(self.executable)])
binary_req = BinaryRequirement(self.executable)
if not binary_req.met(session):
resolver.install([binary_req])
def _run(self, session, resolver, task, args, fixers):
self.setup(resolver)
self.setup(session, resolver)
argv = []
if self.executable.startswith("./") and (
not os.access(os.path.join(self.path, self.executable), os.X_OK)
@ -790,17 +789,19 @@ class Npm(BuildSystem):
# TODO(jelmer): Look at version
yield "build", NodePackageRequirement(name)
def setup(self, resolver):
resolver.install([BinaryRequirement("npm")])
def setup(self, session, resolver):
binary_req = BinaryRequirement("npm")
if not binary_req.met(session):
resolver.install([binary_req])
def dist(self, session, resolver, fixers, target_directory, quiet=False):
self.setup(resolver)
self.setup(session, resolver)
with DistCatcher([session.external_path(".")]) as dc:
run_with_build_fixers(session, ["npm", "pack"], fixers)
return dc.copy_single(target_directory)
def test(self, session, resolver, fixers):
self.setup(resolver)
self.setup(session, resolver)
test_script = self.package["scripts"].get("test")
if test_script:
run_with_build_fixers(session, shlex.split(test_script), fixers)
@ -808,7 +809,7 @@ class Npm(BuildSystem):
raise NotImplementedError
def build(self, session, resolver, fixers):
self.setup(resolver)
self.setup(session, resolver)
build_script = self.package["scripts"].get("build")
if build_script:
run_with_build_fixers(session, shlex.split(build_script), fixers)
@ -816,7 +817,7 @@ class Npm(BuildSystem):
raise NotImplementedError
def clean(self, session, resolver, fixers):
self.setup(resolver)
self.setup(session, resolver)
clean_script = self.package["scripts"].get("clean")
if clean_script:
run_with_build_fixers(session, shlex.split(clean_script), fixers)
@ -838,7 +839,9 @@ class Waf(BuildSystem):
self.path = path
def setup(self, session, resolver, fixers):
resolver.install([BinaryRequirement("python3")])
binary_req = BinaryRequirement("python3")
if not binary_req.met(session):
resolver.install([binary_req])
def dist(self, session, resolver, fixers, target_directory, quiet=False):
self.setup(session, resolver, fixers)
@ -864,18 +867,16 @@ class Gem(BuildSystem):
def __init__(self, path):
self.path = path
def setup(self, resolver):
resolver.install([BinaryRequirement("gem2deb")])
def dist(self, session, resolver, fixers, target_directory, quiet=False):
self.setup(resolver)
gemfiles = [
entry.name for entry in session.scandir(".") if entry.name.endswith(".gem")
]
if len(gemfiles) > 1:
logging.warning("More than one gemfile. Trying the first?")
with DistCatcher.default(session.external_path(".")) as dc:
run_with_build_fixers(session, ["gem2tgz", gemfiles[0]], fixers)
run_with_build_fixers(
session,
[guaranteed_which(session, resolver, "gem2tgz"), gemfiles[0]], fixers)
return dc.copy_single(target_directory)
@classmethod
@ -921,26 +922,22 @@ class DistZilla(BuildSystem):
def dist(self, session, resolver, fixers, target_directory, quiet=False):
self.setup(resolver)
if self.name == "dist-inkt":
resolver.install([PerlModuleRequirement(self.dist_inkt_class)])
with DistCatcher.default(session.external_path(".")) as dc:
run_with_build_fixers(session, ["distinkt-dist"], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "distinkt-dist")], fixers)
return dc.copy_single(target_directory)
else:
# Default to invoking Dist::Zilla
resolver.install([PerlModuleRequirement("Dist::Zilla")])
with DistCatcher.default(session.external_path(".")) as dc:
run_with_build_fixers(session, ["dzil", "build", "--tgz"], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "dzil"), "build", "--tgz"], fixers)
return dc.copy_single(target_directory)
def test(self, session, resolver, fixers):
self.setup(resolver)
resolver.install([PerlModuleRequirement("Dist::Zilla")])
run_with_build_fixers(session, ["dzil", "test"], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "dzil"), "test"], fixers)
def build(self, session, resolver, fixers):
self.setup(resolver)
resolver.install([PerlModuleRequirement("Dist::Zilla")])
run_with_build_fixers(session, ["dzil", "build"], fixers)
run_with_build_fixers(session, [guaranteed_which(session, resolver, "dzil"), "build"], fixers)
@classmethod
def probe(cls, path):