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,8 +173,9 @@ def main(): # noqa: C901
display_explain_commands(e.commands) display_explain_commands(e.commands)
return 1 return 1
if args.subcommand == "dist": if args.subcommand == "dist":
from .dist import run_dist from .dist import run_dist, DistNoTarball
try:
run_dist( run_dist(
session=session, session=session,
buildsystems=bss, buildsystems=bss,
@ -182,6 +183,9 @@ def main(): # noqa: C901
fixers=fixers, fixers=fixers,
target_directory=".", target_directory=".",
) )
except DistNoTarball:
logging.fatal('No tarball created.')
return 1
if args.subcommand == "build": if args.subcommand == "build":
from .build import run_build from .build import run_build

View file

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