Some renames.

This commit is contained in:
Jelmer Vernooij 2021-03-01 15:00:32 +00:00
parent 217e87a3a8
commit 78b59759c9
10 changed files with 57 additions and 49 deletions

View file

@ -50,7 +50,7 @@ def shebang_binary(p):
return os.path.basename(args[0].decode()).strip() return os.path.basename(args[0].decode()).strip()
class UpstreamRequirement(object): class Requirement(object):
# Name of the family of requirements - e.g. "python-package" # Name of the family of requirements - e.g. "python-package"
family: str family: str

View file

@ -62,9 +62,9 @@ STAGE_MAP = {
} }
def determine_fixers(session, resolver): def determine_fixers(session, resolver):
from .buildlog import UpstreamRequirementFixer from .buildlog import RequirementFixer
from .resolver.apt import AptResolver from .resolver.apt import AptResolver
return [UpstreamRequirementFixer(resolver)] return [RequirementFixer(resolver)]
def main(): # noqa: C901 def main(): # noqa: C901
@ -136,6 +136,7 @@ def main(): # noqa: C901
if not args.ignore_declared_dependencies and not args.explain: if not args.ignore_declared_dependencies and not args.explain:
stages = STAGE_MAP[args.subcommand] stages = STAGE_MAP[args.subcommand]
if stages: if stages:
logging.info('Checking that declared requirements are present')
for bs in bss: for bs in bss:
install_necessary_declared_requirements(resolver, bs, stages) install_necessary_declared_requirements(resolver, bs, stages)
fixers = determine_fixers(session, resolver) fixers = determine_fixers(session, resolver)
@ -166,7 +167,7 @@ def main(): # noqa: C901
if args.subcommand == "info": if args.subcommand == "info":
from .info import run_info from .info import run_info
run_info(session, buildsystems=bss) run_info(session, buildsystems=bss)
except UnidentifiedError: except UnidentifiedError as e:
return 1 return 1
except NoBuildToolsFound: except NoBuildToolsFound:
logging.info("No build tools found.") logging.info("No build tools found.")

View file

@ -173,7 +173,7 @@ def problem_to_upstream_requirement(problem):
return None return None
class UpstreamRequirementFixer(BuildFixer): class RequirementFixer(BuildFixer):
def __init__(self, resolver): def __init__(self, resolver):
self.resolver = resolver self.resolver = resolver

View file

@ -118,6 +118,8 @@ class SetupPy(BuildSystem):
def __init__(self, path): def __init__(self, path):
self.path = path self.path = path
from distutils.core import run_setup from distutils.core import run_setup
# TODO(jelmer): Perhaps run this in session, so we can install
# missing dependencies?
try: try:
self.result = run_setup(os.path.abspath(path), stop_after="init") self.result = run_setup(os.path.abspath(path), stop_after="init")
except RuntimeError as e: except RuntimeError as e:
@ -421,6 +423,10 @@ class Make(BuildSystem):
self.setup(session, resolver, fixers) self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "all"], fixers) run_with_build_fixers(session, ["make", "all"], fixers)
def clean(self, session, resolver, fixers):
self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "clean"], fixers)
def test(self, session, resolver, fixers): def test(self, session, resolver, fixers):
self.setup(session, resolver, fixers) self.setup(session, resolver, fixers)
run_with_build_fixers(session, ["make", "check"], fixers) run_with_build_fixers(session, ["make", "check"], fixers)

View file

@ -39,11 +39,9 @@ def run_apt(session: Session, args: List[str]) -> None:
match, error = find_apt_get_failure(lines) match, error = find_apt_get_failure(lines)
if error is not None: if error is not None:
raise DetailedFailure(retcode, args, error) raise DetailedFailure(retcode, args, error)
if match is not None:
raise UnidentifiedError(retcode, args, lines, secondary=(match.lineno, match.line))
while lines and lines[-1] == "": while lines and lines[-1] == "":
lines.pop(-1) lines.pop(-1)
raise UnidentifiedError(retcode, args, lines) raise UnidentifiedError(retcode, args, lines, secondary=match)
class FileSearcher(object): class FileSearcher(object):

View file

@ -81,7 +81,7 @@ from buildlog_consultant.sbuild import (
) )
from ..fix_build import BuildFixer, resolve_error, DependencyContext from ..fix_build import BuildFixer, resolve_error, DependencyContext
from ..buildlog import UpstreamRequirementFixer from ..buildlog import RequirementFixer
from ..resolver.apt import ( from ..resolver.apt import (
AptRequirement, AptRequirement,
get_package_for_python_module, get_package_for_python_module,
@ -525,7 +525,7 @@ def apt_fixers(apt) -> List[BuildFixer]:
SimpleBuildFixer(MissingPythonModule, fix_missing_python_module), SimpleBuildFixer(MissingPythonModule, fix_missing_python_module),
SimpleBuildFixer(MissingPythonDistribution, fix_missing_python_distribution), SimpleBuildFixer(MissingPythonDistribution, fix_missing_python_distribution),
SimpleBuildFixer(AptFetchFailure, retry_apt_failure), SimpleBuildFixer(AptFetchFailure, retry_apt_failure),
UpstreamRequirementFixer(resolver), RequirementFixer(resolver),
] ]

View file

@ -125,7 +125,7 @@ def create_dist_schroot(
) -> str: ) -> str:
from .buildsystem import detect_buildsystems from .buildsystem import detect_buildsystems
from .resolver.apt import AptResolver from .resolver.apt import AptResolver
from .buildlog import UpstreamRequirementFixer from .buildlog import RequirementFixer
if subdir is None: if subdir is None:
subdir = "package" subdir = "package"
@ -151,7 +151,7 @@ def create_dist_schroot(
buildsystems = list(detect_buildsystems(export_directory)) buildsystems = list(detect_buildsystems(export_directory))
resolver = AptResolver.from_session(session) resolver = AptResolver.from_session(session)
fixers = [UpstreamRequirementFixer(resolver)] fixers = [RequirementFixer(resolver)]
with DistCatcher(export_directory) as dc: with DistCatcher(export_directory) as dc:
oldcwd = os.getcwd() oldcwd = os.getcwd()

View file

@ -89,11 +89,12 @@ def run_with_build_fixers(
return return
match, error = find_build_failure_description(lines) match, error = find_build_failure_description(lines)
if error is None: if error is None:
logging.warning("Build failed with unidentified error. Giving up.") if match:
if match is not None: logging.warning("Build failed with unidentified error:")
raise UnidentifiedError( logging.warning('%s', match.line.rstrip('\n'))
retcode, args, lines, secondary=(match.lineno, match.line)) else:
raise UnidentifiedError(retcode, args, lines) logging.warning("Build failed and unable to find cause. Giving up.")
raise UnidentifiedError(retcode, args, lines, secondary=match)
logging.info("Identified error: %r", error) logging.info("Identified error: %r", error)
if error in fixed_errors: if error in fixed_errors:

View file

@ -19,10 +19,10 @@
import posixpath import posixpath
from typing import Optional, List, Tuple from typing import Optional, List, Tuple
from . import UpstreamRequirement from . import Requirement
class PythonPackageRequirement(UpstreamRequirement): class PythonPackageRequirement(Requirement):
package: str package: str
@ -41,7 +41,7 @@ class PythonPackageRequirement(UpstreamRequirement):
return "python package: %s" % self.package return "python package: %s" % self.package
class BinaryRequirement(UpstreamRequirement): class BinaryRequirement(Requirement):
binary_name: str binary_name: str
@ -50,7 +50,7 @@ class BinaryRequirement(UpstreamRequirement):
self.binary_name = binary_name self.binary_name = binary_name
class PerlModuleRequirement(UpstreamRequirement): class PerlModuleRequirement(Requirement):
module: str module: str
filename: Optional[str] filename: Optional[str]
@ -66,7 +66,7 @@ class PerlModuleRequirement(UpstreamRequirement):
return self.module.replace("::", "/") + ".pm" return self.module.replace("::", "/") + ".pm"
class NodePackageRequirement(UpstreamRequirement): class NodePackageRequirement(Requirement):
package: str package: str
@ -75,7 +75,7 @@ class NodePackageRequirement(UpstreamRequirement):
self.package = package self.package = package
class CargoCrateRequirement(UpstreamRequirement): class CargoCrateRequirement(Requirement):
crate: str crate: str
@ -84,7 +84,7 @@ class CargoCrateRequirement(UpstreamRequirement):
self.crate = crate self.crate = crate
class PkgConfigRequirement(UpstreamRequirement): class PkgConfigRequirement(Requirement):
module: str module: str
@ -94,7 +94,7 @@ class PkgConfigRequirement(UpstreamRequirement):
self.minimum_version = minimum_version self.minimum_version = minimum_version
class PathRequirement(UpstreamRequirement): class PathRequirement(Requirement):
path: str path: str
@ -103,7 +103,7 @@ class PathRequirement(UpstreamRequirement):
self.path = path self.path = path
class CHeaderRequirement(UpstreamRequirement): class CHeaderRequirement(Requirement):
header: str header: str
@ -112,14 +112,14 @@ class CHeaderRequirement(UpstreamRequirement):
self.header = header self.header = header
class JavaScriptRuntimeRequirement(UpstreamRequirement): class JavaScriptRuntimeRequirement(Requirement):
def __init__(self): def __init__(self):
super(JavaScriptRuntimeRequirement, self).__init__( super(JavaScriptRuntimeRequirement, self).__init__(
'javascript-runtime') 'javascript-runtime')
class ValaPackageRequirement(UpstreamRequirement): class ValaPackageRequirement(Requirement):
package: str package: str
@ -128,7 +128,7 @@ class ValaPackageRequirement(UpstreamRequirement):
self.package = package self.package = package
class RubyGemRequirement(UpstreamRequirement): class RubyGemRequirement(Requirement):
gem: str gem: str
minimum_version: Optional[str] minimum_version: Optional[str]
@ -139,7 +139,7 @@ class RubyGemRequirement(UpstreamRequirement):
self.minimum_version = minimum_version self.minimum_version = minimum_version
class GoPackageRequirement(UpstreamRequirement): class GoPackageRequirement(Requirement):
package: str package: str
@ -148,7 +148,7 @@ class GoPackageRequirement(UpstreamRequirement):
self.package = package self.package = package
class DhAddonRequirement(UpstreamRequirement): class DhAddonRequirement(Requirement):
path: str path: str
@ -157,7 +157,7 @@ class DhAddonRequirement(UpstreamRequirement):
self.path = path self.path = path
class PhpClassRequirement(UpstreamRequirement): class PhpClassRequirement(Requirement):
php_class: str php_class: str
@ -166,7 +166,7 @@ class PhpClassRequirement(UpstreamRequirement):
self.php_class = php_class self.php_class = php_class
class RPackageRequirement(UpstreamRequirement): class RPackageRequirement(Requirement):
package: str package: str
minimum_version: Optional[str] minimum_version: Optional[str]
@ -177,7 +177,7 @@ class RPackageRequirement(UpstreamRequirement):
self.minimum_version = minimum_version self.minimum_version = minimum_version
class LibraryRequirement(UpstreamRequirement): class LibraryRequirement(Requirement):
library: str library: str
@ -186,7 +186,7 @@ class LibraryRequirement(UpstreamRequirement):
self.library = library self.library = library
class RubyFileRequirement(UpstreamRequirement): class RubyFileRequirement(Requirement):
filename: str filename: str
@ -195,7 +195,7 @@ class RubyFileRequirement(UpstreamRequirement):
self.filename = filename self.filename = filename
class XmlEntityRequirement(UpstreamRequirement): class XmlEntityRequirement(Requirement):
url: str url: str
@ -204,7 +204,7 @@ class XmlEntityRequirement(UpstreamRequirement):
self.url = url self.url = url
class SprocketsFileRequirement(UpstreamRequirement): class SprocketsFileRequirement(Requirement):
content_type: str content_type: str
name: str name: str
@ -215,7 +215,7 @@ class SprocketsFileRequirement(UpstreamRequirement):
self.name = name self.name = name
class JavaClassRequirement(UpstreamRequirement): class JavaClassRequirement(Requirement):
classname: str classname: str
@ -224,7 +224,7 @@ class JavaClassRequirement(UpstreamRequirement):
self.classname = classname self.classname = classname
class HaskellPackageRequirement(UpstreamRequirement): class HaskellPackageRequirement(Requirement):
package: str package: str
@ -233,7 +233,7 @@ class HaskellPackageRequirement(UpstreamRequirement):
self.package = package self.package = package
class MavenArtifactRequirement(UpstreamRequirement): class MavenArtifactRequirement(Requirement):
artifacts: List[Tuple[str, str, str]] artifacts: List[Tuple[str, str, str]]
@ -242,13 +242,13 @@ class MavenArtifactRequirement(UpstreamRequirement):
self.artifacts = artifacts self.artifacts = artifacts
class GnomeCommonRequirement(UpstreamRequirement): class GnomeCommonRequirement(Requirement):
def __init__(self): def __init__(self):
super(GnomeCommonRequirement, self).__init__('gnome-common') super(GnomeCommonRequirement, self).__init__('gnome-common')
class JDKFileRequirement(UpstreamRequirement): class JDKFileRequirement(Requirement):
jdk_path: str jdk_path: str
filename: str filename: str
@ -263,7 +263,7 @@ class JDKFileRequirement(UpstreamRequirement):
return posixpath.join(self.jdk_path, self.filename) return posixpath.join(self.jdk_path, self.filename)
class PerlFileRequirement(UpstreamRequirement): class PerlFileRequirement(Requirement):
filename: str filename: str
@ -272,7 +272,7 @@ class PerlFileRequirement(UpstreamRequirement):
self.filename = filename self.filename = filename
class AutoconfMacroRequirement(UpstreamRequirement): class AutoconfMacroRequirement(Requirement):
macro: str macro: str
@ -281,7 +281,7 @@ class AutoconfMacroRequirement(UpstreamRequirement):
self.macro = macro self.macro = macro
class PythonModuleRequirement(UpstreamRequirement): class PythonModuleRequirement(Requirement):
module: str module: str
python_version: Optional[str] python_version: Optional[str]

View file

@ -23,11 +23,12 @@ from ..debian.apt import AptManager
from . import Resolver, UnsatisfiedRequirements from . import Resolver, UnsatisfiedRequirements
from ..requirements import ( from ..requirements import (
Requirement,
BinaryRequirement, BinaryRequirement,
CHeaderRequirement, CHeaderRequirement,
PkgConfigRequirement, PkgConfigRequirement,
PathRequirement, PathRequirement,
UpstreamRequirement, Requirement,
JavaScriptRuntimeRequirement, JavaScriptRuntimeRequirement,
ValaPackageRequirement, ValaPackageRequirement,
RubyGemRequirement, RubyGemRequirement,
@ -53,9 +54,10 @@ from ..requirements import (
) )
class AptRequirement(object): class AptRequirement(Requirement):
def __init__(self, package, minimum_version=None): def __init__(self, package, minimum_version=None):
super(AptRequirement, self).__init__('apt')
self.package = package self.package = package
self.minimum_version = minimum_version self.minimum_version = minimum_version
@ -493,7 +495,7 @@ APT_REQUIREMENT_RESOLVERS = [
] ]
def resolve_requirement_apt(apt_mgr, req: UpstreamRequirement) -> AptRequirement: def resolve_requirement_apt(apt_mgr, req: Requirement) -> AptRequirement:
for rr_class, rr_fn in APT_REQUIREMENT_RESOLVERS: for rr_class, rr_fn in APT_REQUIREMENT_RESOLVERS:
if isinstance(req, rr_class): if isinstance(req, rr_class):
return rr_fn(apt_mgr, req) return rr_fn(apt_mgr, req)
@ -538,5 +540,5 @@ class AptResolver(Resolver):
def explain(self, requirements): def explain(self, requirements):
raise NotImplementedError(self.explain) raise NotImplementedError(self.explain)
def resolve(self, req: UpstreamRequirement): def resolve(self, req: Requirement):
return resolve_requirement_apt(self.apt, req) return resolve_requirement_apt(self.apt, req)