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):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def dist(self, session, resolver, fixers):
|
def dist(self, session, resolver, fixers, quiet=False):
|
||||||
raise NotImplementedError(self.dist)
|
raise NotImplementedError(self.dist)
|
||||||
|
|
||||||
def test(self, session, resolver, fixers):
|
def test(self, session, resolver, fixers):
|
||||||
|
@ -90,7 +90,7 @@ class Pear(BuildSystem):
|
||||||
def setup(self, resolver):
|
def setup(self, resolver):
|
||||||
resolver.install([BinaryRequirement("pear")])
|
resolver.install([BinaryRequirement("pear")])
|
||||||
|
|
||||||
def dist(self, session, resolver, fixers):
|
def dist(self, session, resolver, fixers, quiet=False):
|
||||||
self.setup(resolver)
|
self.setup(resolver)
|
||||||
run_with_build_fixers(session, ["pear", "package"], fixers)
|
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_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):
|
class SetupPy(BuildSystem):
|
||||||
|
|
||||||
name = "setup.py"
|
name = "setup.py"
|
||||||
|
|
||||||
def __init__(self, path):
|
def __init__(self, path):
|
||||||
self.path = path
|
self.path = path
|
||||||
from distutils.core import run_setup
|
|
||||||
# TODO(jelmer): Perhaps run this in session, so we can install
|
# TODO(jelmer): Perhaps run this in session, so we can install
|
||||||
# missing dependencies?
|
# missing dependencies?
|
||||||
try:
|
try:
|
||||||
|
@ -163,9 +198,12 @@ class SetupPy(BuildSystem):
|
||||||
self.setup(resolver)
|
self.setup(resolver)
|
||||||
self._run_setup(session, resolver, ["build"], fixers)
|
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.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):
|
def clean(self, session, resolver, fixers):
|
||||||
self.setup(resolver)
|
self.setup(resolver)
|
||||||
|
@ -230,7 +268,7 @@ class PyProject(BuildSystem):
|
||||||
with open(self.path, "r") as pf:
|
with open(self.path, "r") as pf:
|
||||||
return toml.load(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", []):
|
if "poetry" in self.pyproject.get("tool", []):
|
||||||
logging.debug(
|
logging.debug(
|
||||||
"Found pyproject.toml with poetry section, "
|
"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)
|
self.setup(resolver)
|
||||||
session.check_call(["python3", "-m", "pep517.build", "-s", "."])
|
session.check_call(["python3", "-m", "pep517.build", "-s", "."])
|
||||||
|
|
||||||
|
@ -285,7 +323,7 @@ class Npm(BuildSystem):
|
||||||
def setup(self, resolver):
|
def setup(self, resolver):
|
||||||
resolver.install([BinaryRequirement("npm")])
|
resolver.install([BinaryRequirement("npm")])
|
||||||
|
|
||||||
def dist(self, session, resolver, fixers):
|
def dist(self, session, resolver, fixers, quiet=False):
|
||||||
self.setup(resolver)
|
self.setup(resolver)
|
||||||
run_with_build_fixers(session, ["npm", "pack"], fixers)
|
run_with_build_fixers(session, ["npm", "pack"], fixers)
|
||||||
|
|
||||||
|
@ -300,7 +338,7 @@ class Waf(BuildSystem):
|
||||||
def setup(self, session, resolver, fixers):
|
def setup(self, session, resolver, fixers):
|
||||||
resolver.install([BinaryRequirement("python3")])
|
resolver.install([BinaryRequirement("python3")])
|
||||||
|
|
||||||
def dist(self, session, resolver, fixers):
|
def dist(self, session, resolver, fixers, quiet=False):
|
||||||
self.setup(session, resolver, fixers)
|
self.setup(session, resolver, fixers)
|
||||||
run_with_build_fixers(session, ["./waf", "dist"], fixers)
|
run_with_build_fixers(session, ["./waf", "dist"], fixers)
|
||||||
|
|
||||||
|
@ -319,7 +357,7 @@ class Gem(BuildSystem):
|
||||||
def setup(self, resolver):
|
def setup(self, resolver):
|
||||||
resolver.install([BinaryRequirement("gem2deb")])
|
resolver.install([BinaryRequirement("gem2deb")])
|
||||||
|
|
||||||
def dist(self, session, resolver, fixers):
|
def dist(self, session, resolver, fixers, quiet=False):
|
||||||
self.setup(resolver)
|
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")
|
||||||
|
@ -359,7 +397,7 @@ class DistInkt(BuildSystem):
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
def dist(self, session, resolver, fixers):
|
def dist(self, session, resolver, fixers, 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)])
|
resolver.install([PerlModuleRequirement(self.dist_inkt_class)])
|
||||||
|
@ -435,7 +473,7 @@ class Make(BuildSystem):
|
||||||
self.setup(session, resolver, fixers)
|
self.setup(session, resolver, fixers)
|
||||||
run_with_build_fixers(session, ["make", "install"], 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)
|
self.setup(session, resolver, fixers)
|
||||||
try:
|
try:
|
||||||
run_with_build_fixers(session, ["make", "dist"], fixers)
|
run_with_build_fixers(session, ["make", "dist"], fixers)
|
||||||
|
|
|
@ -62,7 +62,7 @@ class AptManager(object):
|
||||||
def searchers(self):
|
def searchers(self):
|
||||||
if self._searchers is None:
|
if self._searchers is None:
|
||||||
self._searchers = [
|
self._searchers = [
|
||||||
RemoteAptContentsFileSearcher.from_session(self.session),
|
AptContentsFileSearcher.from_session(self.session),
|
||||||
GENERATED_FILE_SEARCHER]
|
GENERATED_FILE_SEARCHER]
|
||||||
return self._searchers
|
return self._searchers
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ class ContentsFileNotFound(Exception):
|
||||||
"""The contents file was not found."""
|
"""The contents file was not found."""
|
||||||
|
|
||||||
|
|
||||||
class RemoteAptContentsFileSearcher(FileSearcher):
|
class AptContentsFileSearcher(FileSearcher):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._db = {}
|
self._db = {}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ from debmutate.debhelper import (
|
||||||
)
|
)
|
||||||
from debmutate.deb822 import (
|
from debmutate.deb822 import (
|
||||||
Deb822Editor,
|
Deb822Editor,
|
||||||
|
PkgRelation,
|
||||||
)
|
)
|
||||||
from debmutate.reformatting import (
|
from debmutate.reformatting import (
|
||||||
FormattingUnpreservable,
|
FormattingUnpreservable,
|
||||||
|
@ -144,16 +145,17 @@ def add_build_dependency(
|
||||||
try:
|
try:
|
||||||
with ControlEditor(path=control_path) as updater:
|
with ControlEditor(path=control_path) as updater:
|
||||||
for binary in updater.binaries:
|
for binary in updater.binaries:
|
||||||
if binary["Package"] == requirement.package:
|
if requirement.touches_package(binary["Package"]):
|
||||||
raise CircularDependency(requirement.package)
|
raise CircularDependency(binary["Package"])
|
||||||
|
for rel in requirement.relations:
|
||||||
updater.source["Build-Depends"] = ensure_relation(
|
updater.source["Build-Depends"] = ensure_relation(
|
||||||
updater.source.get("Build-Depends", ""),
|
updater.source.get("Build-Depends", ""),
|
||||||
requirement.relations)
|
PkgRelation.str([rel]))
|
||||||
except FormattingUnpreservable as e:
|
except FormattingUnpreservable as e:
|
||||||
logging.info("Unable to edit %s in a way that preserves formatting.", e.path)
|
logging.info("Unable to edit %s in a way that preserves formatting.", e.path)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
desc = PkgRelation.str(requirement.relations)
|
desc = requirement.pkg_relation_str()
|
||||||
|
|
||||||
if not updater.changed:
|
if not updater.changed:
|
||||||
logging.info("Giving up; dependency %s was already present.", desc)
|
logging.info("Giving up; dependency %s was already present.", desc)
|
||||||
|
@ -193,16 +195,17 @@ def add_test_dependency(
|
||||||
command_counter += 1
|
command_counter += 1
|
||||||
if name != testname:
|
if name != testname:
|
||||||
continue
|
continue
|
||||||
|
for rel in requirement.relations:
|
||||||
control["Depends"] = ensure_relation(
|
control["Depends"] = ensure_relation(
|
||||||
control.get("Depends", ""),
|
control.get("Depends", ""),
|
||||||
requirement.relations)
|
PkgRelation.str([rel]))
|
||||||
except FormattingUnpreservable as e:
|
except FormattingUnpreservable as e:
|
||||||
logging.info("Unable to edit %s in a way that preserves formatting.", e.path)
|
logging.info("Unable to edit %s in a way that preserves formatting.", e.path)
|
||||||
return False
|
return False
|
||||||
if not updater.changed:
|
if not updater.changed:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
desc = PkgRelation.str(requirement.relations)
|
desc = requirement.pkg_relation_str()
|
||||||
|
|
||||||
logging.info("Adding dependency to test %s: %s", testname, desc)
|
logging.info("Adding dependency to test %s: %s", testname, desc)
|
||||||
return commit_debian_changes(
|
return commit_debian_changes(
|
||||||
|
@ -240,7 +243,7 @@ def commit_debian_changes(
|
||||||
def targeted_python_versions(tree: Tree) -> Set[str]:
|
def targeted_python_versions(tree: Tree) -> Set[str]:
|
||||||
with tree.get_file("debian/control") as f:
|
with tree.get_file("debian/control") as f:
|
||||||
control = Deb822(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()
|
all_build_deps: Set[str] = set()
|
||||||
for or_deps in build_depends:
|
for or_deps in build_depends:
|
||||||
all_build_deps.update(or_dep["name"] for or_dep in or_deps)
|
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."""
|
"""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,
|
# Some things want to write to the user's home directory,
|
||||||
# e.g. pip caches in ~/.cache
|
# e.g. pip caches in ~/.cache
|
||||||
session.create_home()
|
session.create_home()
|
||||||
|
|
||||||
for buildsystem in buildsystems:
|
for buildsystem in buildsystems:
|
||||||
buildsystem.dist(session, resolver, fixers)
|
buildsystem.dist(session, resolver, fixers, quiet=quiet)
|
||||||
return
|
return
|
||||||
|
|
||||||
raise NoBuildToolsFound()
|
raise NoBuildToolsFound()
|
||||||
|
|
|
@ -75,6 +75,16 @@ class AptRequirement(Requirement):
|
||||||
def from_str(cls, text):
|
def from_str(cls, text):
|
||||||
return cls(PkgRelation.parse_relations(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):
|
def get_package_for_python_package(apt_mgr, package, python_version, specs=None):
|
||||||
if python_version == "pypy":
|
if python_version == "pypy":
|
||||||
|
|
Loading…
Add table
Reference in a new issue