diff --git a/ognibuild/__main__.py b/ognibuild/__main__.py index 3db88bf..f7b61f7 100644 --- a/ognibuild/__main__.py +++ b/ognibuild/__main__.py @@ -23,7 +23,7 @@ from .buildsystem import NoBuildToolsFound, detect_buildsystems from .resolver import ( auto_resolver, native_resolvers, - MissingDependencies, + UnsatisfiedRequirements, ) from .resolver.apt import AptResolver diff --git a/ognibuild/buildsystem.py b/ognibuild/buildsystem.py index 37261aa..5304573 100644 --- a/ognibuild/buildsystem.py +++ b/ognibuild/buildsystem.py @@ -117,7 +117,6 @@ class SetupPy(BuildSystem): return "%s(%r)" % (type(self).__name__, self.path) def setup(self, resolver): - resolver.install([PythonPackageRequirement('pip')]) with open(self.path, "r") as f: setup_py_contents = f.read() try: @@ -222,10 +221,9 @@ class PyProject(BuildSystem): resolver.install( [ PythonPackageRequirement("venv"), - PythonPackageRequirement("pip"), + PythonPackageRequirement("poetry"), ] ) - session.check_call(["pip3", "install", "poetry"], user="root") session.check_call(["poetry", "build", "-f", "sdist"]) return raise AssertionError("no supported section in pyproject.toml") @@ -242,7 +240,6 @@ class SetupCfg(BuildSystem): resolver.install( [ PythonPackageRequirement("pep517"), - PythonPackageRequirement("pip"), ] ) diff --git a/ognibuild/dist.py b/ognibuild/dist.py index cfe38d2..2349fe7 100644 --- a/ognibuild/dist.py +++ b/ognibuild/dist.py @@ -125,6 +125,7 @@ def create_dist_schroot( ) -> str: from .buildsystem import detect_buildsystems from .resolver.apt import AptResolver + from .buildlog import UpstreamRequirementFixer if subdir is None: subdir = "package" @@ -150,13 +151,14 @@ def create_dist_schroot( buildsystems = list(detect_buildsystems(export_directory)) resolver = AptResolver.from_session(session) + fixers = [UpstreamRequirementFixer(resolver)] with DistCatcher(export_directory) as dc: oldcwd = os.getcwd() os.chdir(export_directory) try: session.chdir(os.path.join(reldir, subdir)) - run_dist(session, buildsystems, resolver) + run_dist(session, buildsystems, resolver, fixers) finally: os.chdir(oldcwd) @@ -194,9 +196,17 @@ if __name__ == "__main__": parser.add_argument( "--target-directory", type=str, default="..", help="Target directory" ) + parser.add_argument( + "--verbose", + action="store_true", + help="Be verbose") + args = parser.parse_args() - logging.basicConfig(level=logging.INFO) + if args.verbose: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.INFO) tree = WorkingTree.open(args.directory) if args.packaging_directory: diff --git a/ognibuild/resolver/__init__.py b/ognibuild/resolver/__init__.py index dd12b60..93074ab 100644 --- a/ognibuild/resolver/__init__.py +++ b/ognibuild/resolver/__init__.py @@ -16,7 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -class MissingDependencies(Exception): +class UnsatisfiedRequirements(Exception): def __init__(self, reqs): self.requirements = reqs @@ -55,7 +55,7 @@ class CPANResolver(Resolver): user="root", env={"PERL_MM_USE_DEFAULT": "1"} ) if missing: - raise MissingDependencies(missing) + raise UnsatisfiedRequirements(missing) def explain(self, requirements): raise NotImplementedError(self.explain) @@ -83,7 +83,7 @@ class CargoResolver(Resolver): ["cargo", "install", requirement.crate], user="root") if missing: - raise MissingDependencies(missing) + raise UnsatisfiedRequirements(missing) def explain(self, requirements): raise NotImplementedError(self.explain) @@ -109,7 +109,7 @@ class PypiResolver(Resolver): continue self.session.check_call(["pip", "install", requirement.package]) if missing: - raise MissingDependencies(missing) + raise UnsatisfiedRequirements(missing) def explain(self, requirements): raise NotImplementedError(self.explain) @@ -145,7 +145,7 @@ class NpmResolver(Resolver): continue self.session.check_call(["npm", "-g", "install", package]) if missing: - raise MissingDependencies(missing) + raise UnsatisfiedRequirements(missing) def explain(self, requirements): raise NotImplementedError(self.explain) @@ -165,7 +165,7 @@ class StackedResolver(Resolver): for sub in self.subs: try: sub.install(requirements) - except MissingDependencies as e: + except UnsatisfiedRequirements as e: requirements = e.requirements else: return @@ -188,7 +188,7 @@ class ExplainResolver(Resolver): return cls(session) def install(self, requirements): - raise MissingDependencies(requirements) + raise UnsatisfiedRequirements(requirements) def auto_resolver(session): diff --git a/ognibuild/resolver/apt.py b/ognibuild/resolver/apt.py index 49d9470..fc11525 100644 --- a/ognibuild/resolver/apt.py +++ b/ognibuild/resolver/apt.py @@ -21,7 +21,7 @@ import posixpath from ..debian.apt import AptManager -from . import Resolver, MissingDependencies +from . import Resolver, UnsatisfiedRequirements from ..requirements import ( BinaryRequirement, CHeaderRequirement, @@ -520,19 +520,20 @@ class AptResolver(Resolver): missing.append(req) except NotImplementedError: missing.append(req) - if missing: - still_missing = [] - apt_requirements = [] - for m in missing: - apt_req = self.resolve(m) - if apt_req is None: - still_missing.append(m) - else: - apt_requirements.append(m) - self.apt.install( - [req.package for req in apt_requirements]) - if still_missing: - raise MissingDependencies(still_missing) + if not missing: + return + still_missing = [] + apt_requirements = [] + for m in missing: + apt_req = self.resolve(m) + if apt_req is None: + still_missing.append(m) + else: + apt_requirements.append(m) + self.apt.install( + [req.package for req in apt_requirements]) + if still_missing: + raise UnsatisfiedRequirements(still_missing) def explain(self, requirements): raise NotImplementedError(self.explain) diff --git a/ognibuild/session/schroot.py b/ognibuild/session/schroot.py index 1b1b645..8941844 100644 --- a/ognibuild/session/schroot.py +++ b/ognibuild/session/schroot.py @@ -61,6 +61,9 @@ class SchrootSession(Session): except subprocess.CalledProcessError: # TODO(jelmer): Capture stderr and forward in SessionSetupFailure raise SessionSetupFailure() + logging.info( + 'Opened schroot session %s (from %s)', self.session_id, + self.chroot) return self def __exit__(self, exc_type, exc_val, exc_tb):