Support quiet mode for dist.
This commit is contained in:
parent
354001c60a
commit
677358e0d5
5 changed files with 79 additions and 28 deletions
|
@ -58,7 +58,7 @@ class BuildSystem(object):
|
|||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
raise NotImplementedError(self.dist)
|
||||
|
||||
def test(self, session, resolver, fixers):
|
||||
|
@ -90,7 +90,7 @@ class Pear(BuildSystem):
|
|||
def setup(self, resolver):
|
||||
resolver.install([BinaryRequirement("pear")])
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(resolver)
|
||||
run_with_build_fixers(session, ["pear", "package"], fixers)
|
||||
|
||||
|
@ -111,13 +111,48 @@ class Pear(BuildSystem):
|
|||
run_with_build_fixers(session, ["pear", "install", self.path], fixers)
|
||||
|
||||
|
||||
# run_setup, but setting __name__
|
||||
# Imported from Python's distutils.core, Copyright (C) PSF
|
||||
|
||||
def run_setup(script_name, script_args=None, stop_after="run"):
|
||||
from distutils import core
|
||||
import sys
|
||||
if stop_after not in ('init', 'config', 'commandline', 'run'):
|
||||
raise ValueError("invalid value for 'stop_after': %r" % (stop_after,))
|
||||
|
||||
core._setup_stop_after = stop_after
|
||||
|
||||
save_argv = sys.argv.copy()
|
||||
g = {'__file__': script_name, '__name__': '__main__'}
|
||||
try:
|
||||
try:
|
||||
sys.argv[0] = script_name
|
||||
if script_args is not None:
|
||||
sys.argv[1:] = script_args
|
||||
with open(script_name, 'rb') as f:
|
||||
exec(f.read(), g)
|
||||
finally:
|
||||
sys.argv = save_argv
|
||||
core._setup_stop_after = None
|
||||
except SystemExit:
|
||||
# Hmm, should we do something if exiting with a non-zero code
|
||||
# (ie. error)?
|
||||
pass
|
||||
|
||||
if core._setup_distribution is None:
|
||||
raise RuntimeError(("'distutils.core.setup()' was never called -- "
|
||||
"perhaps '%s' is not a Distutils setup script?") % \
|
||||
script_name)
|
||||
|
||||
return core._setup_distribution
|
||||
|
||||
|
||||
class SetupPy(BuildSystem):
|
||||
|
||||
name = "setup.py"
|
||||
|
||||
def __init__(self, path):
|
||||
self.path = path
|
||||
from distutils.core import run_setup
|
||||
# TODO(jelmer): Perhaps run this in session, so we can install
|
||||
# missing dependencies?
|
||||
try:
|
||||
|
@ -163,9 +198,12 @@ class SetupPy(BuildSystem):
|
|||
self.setup(resolver)
|
||||
self._run_setup(session, resolver, ["build"], fixers)
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(resolver)
|
||||
self._run_setup(session, resolver, ["sdist"], fixers)
|
||||
preargs = []
|
||||
if quiet:
|
||||
preargs.append('--quiet')
|
||||
self._run_setup(session, resolver, preargs + ["sdist"], fixers)
|
||||
|
||||
def clean(self, session, resolver, fixers):
|
||||
self.setup(resolver)
|
||||
|
@ -230,7 +268,7 @@ class PyProject(BuildSystem):
|
|||
with open(self.path, "r") as pf:
|
||||
return toml.load(pf)
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
if "poetry" in self.pyproject.get("tool", []):
|
||||
logging.debug(
|
||||
"Found pyproject.toml with poetry section, "
|
||||
|
@ -261,7 +299,7 @@ class SetupCfg(BuildSystem):
|
|||
]
|
||||
)
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(resolver)
|
||||
session.check_call(["python3", "-m", "pep517.build", "-s", "."])
|
||||
|
||||
|
@ -285,7 +323,7 @@ class Npm(BuildSystem):
|
|||
def setup(self, resolver):
|
||||
resolver.install([BinaryRequirement("npm")])
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(resolver)
|
||||
run_with_build_fixers(session, ["npm", "pack"], fixers)
|
||||
|
||||
|
@ -300,7 +338,7 @@ class Waf(BuildSystem):
|
|||
def setup(self, session, resolver, fixers):
|
||||
resolver.install([BinaryRequirement("python3")])
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(session, resolver, fixers)
|
||||
run_with_build_fixers(session, ["./waf", "dist"], fixers)
|
||||
|
||||
|
@ -319,7 +357,7 @@ class Gem(BuildSystem):
|
|||
def setup(self, resolver):
|
||||
resolver.install([BinaryRequirement("gem2deb")])
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(resolver)
|
||||
gemfiles = [
|
||||
entry.name for entry in session.scandir(".") if entry.name.endswith(".gem")
|
||||
|
@ -359,7 +397,7 @@ class DistInkt(BuildSystem):
|
|||
]
|
||||
)
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(resolver)
|
||||
if self.name == "dist-inkt":
|
||||
resolver.install([PerlModuleRequirement(self.dist_inkt_class)])
|
||||
|
@ -435,7 +473,7 @@ class Make(BuildSystem):
|
|||
self.setup(session, resolver, fixers)
|
||||
run_with_build_fixers(session, ["make", "install"], fixers)
|
||||
|
||||
def dist(self, session, resolver, fixers):
|
||||
def dist(self, session, resolver, fixers, quiet=False):
|
||||
self.setup(session, resolver, fixers)
|
||||
try:
|
||||
run_with_build_fixers(session, ["make", "dist"], fixers)
|
||||
|
|
|
@ -62,7 +62,7 @@ class AptManager(object):
|
|||
def searchers(self):
|
||||
if self._searchers is None:
|
||||
self._searchers = [
|
||||
RemoteAptContentsFileSearcher.from_session(self.session),
|
||||
AptContentsFileSearcher.from_session(self.session),
|
||||
GENERATED_FILE_SEARCHER]
|
||||
return self._searchers
|
||||
|
||||
|
@ -106,7 +106,7 @@ class ContentsFileNotFound(Exception):
|
|||
"""The contents file was not found."""
|
||||
|
||||
|
||||
class RemoteAptContentsFileSearcher(FileSearcher):
|
||||
class AptContentsFileSearcher(FileSearcher):
|
||||
def __init__(self):
|
||||
self._db = {}
|
||||
|
||||
|
@ -233,7 +233,7 @@ class RemoteAptContentsFileSearcher(FileSearcher):
|
|||
response = self._get(url + ext)
|
||||
except HTTPError as e:
|
||||
if e.status == 404:
|
||||
continue
|
||||
continue
|
||||
raise
|
||||
break
|
||||
else:
|
||||
|
|
|
@ -42,6 +42,7 @@ from debmutate.debhelper import (
|
|||
)
|
||||
from debmutate.deb822 import (
|
||||
Deb822Editor,
|
||||
PkgRelation,
|
||||
)
|
||||
from debmutate.reformatting import (
|
||||
FormattingUnpreservable,
|
||||
|
@ -144,16 +145,17 @@ def add_build_dependency(
|
|||
try:
|
||||
with ControlEditor(path=control_path) as updater:
|
||||
for binary in updater.binaries:
|
||||
if binary["Package"] == requirement.package:
|
||||
raise CircularDependency(requirement.package)
|
||||
updater.source["Build-Depends"] = ensure_relation(
|
||||
updater.source.get("Build-Depends", ""),
|
||||
requirement.relations)
|
||||
if requirement.touches_package(binary["Package"]):
|
||||
raise CircularDependency(binary["Package"])
|
||||
for rel in requirement.relations:
|
||||
updater.source["Build-Depends"] = ensure_relation(
|
||||
updater.source.get("Build-Depends", ""),
|
||||
PkgRelation.str([rel]))
|
||||
except FormattingUnpreservable as e:
|
||||
logging.info("Unable to edit %s in a way that preserves formatting.", e.path)
|
||||
return False
|
||||
|
||||
desc = PkgRelation.str(requirement.relations)
|
||||
desc = requirement.pkg_relation_str()
|
||||
|
||||
if not updater.changed:
|
||||
logging.info("Giving up; dependency %s was already present.", desc)
|
||||
|
@ -193,16 +195,17 @@ def add_test_dependency(
|
|||
command_counter += 1
|
||||
if name != testname:
|
||||
continue
|
||||
control["Depends"] = ensure_relation(
|
||||
control.get("Depends", ""),
|
||||
requirement.relations)
|
||||
for rel in requirement.relations:
|
||||
control["Depends"] = ensure_relation(
|
||||
control.get("Depends", ""),
|
||||
PkgRelation.str([rel]))
|
||||
except FormattingUnpreservable as e:
|
||||
logging.info("Unable to edit %s in a way that preserves formatting.", e.path)
|
||||
return False
|
||||
if not updater.changed:
|
||||
return False
|
||||
|
||||
desc = PkgRelation.str(requirement.relations)
|
||||
desc = requirement.pkg_relation_str()
|
||||
|
||||
logging.info("Adding dependency to test %s: %s", testname, desc)
|
||||
return commit_debian_changes(
|
||||
|
@ -240,7 +243,7 @@ def commit_debian_changes(
|
|||
def targeted_python_versions(tree: Tree) -> Set[str]:
|
||||
with tree.get_file("debian/control") as f:
|
||||
control = Deb822(f)
|
||||
build_depends = PkgRelation.parse_relations(control.get("Build-Depends", ""))
|
||||
build_depends = PkgRelation.parse(control.get("Build-Depends", ""))
|
||||
all_build_deps: Set[str] = set()
|
||||
for or_deps in build_depends:
|
||||
all_build_deps.update(or_dep["name"] for or_dep in or_deps)
|
||||
|
|
|
@ -63,13 +63,13 @@ class DistNoTarball(Exception):
|
|||
"""Dist operation did not create a tarball."""
|
||||
|
||||
|
||||
def run_dist(session, buildsystems, resolver, fixers):
|
||||
def run_dist(session, buildsystems, resolver, fixers, quiet=False):
|
||||
# Some things want to write to the user's home directory,
|
||||
# e.g. pip caches in ~/.cache
|
||||
session.create_home()
|
||||
|
||||
for buildsystem in buildsystems:
|
||||
buildsystem.dist(session, resolver, fixers)
|
||||
buildsystem.dist(session, resolver, fixers, quiet=quiet)
|
||||
return
|
||||
|
||||
raise NoBuildToolsFound()
|
||||
|
|
|
@ -75,6 +75,16 @@ class AptRequirement(Requirement):
|
|||
def from_str(cls, text):
|
||||
return cls(PkgRelation.parse_relations(text))
|
||||
|
||||
def pkg_relation_str(self):
|
||||
return PkgRelation.str(self.relations)
|
||||
|
||||
def touches_package(self, package):
|
||||
for rel in self.relations:
|
||||
for entry in rel:
|
||||
if entry['name'] == package:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def get_package_for_python_package(apt_mgr, package, python_version, specs=None):
|
||||
if python_version == "pypy":
|
||||
|
|
Loading…
Add table
Reference in a new issue