Add schroot arg.

This commit is contained in:
Jelmer Vernooij 2021-03-17 13:12:56 +00:00
parent c6afe4eb40
commit b3a9fc3aac
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8
4 changed files with 62 additions and 23 deletions

View file

@ -241,6 +241,10 @@ class SetupPy(BuildSystem):
for require in self.result.get_requires(): for require in self.result.get_requires():
yield "core", PythonPackageRequirement.from_requirement_str(require) yield "core", PythonPackageRequirement.from_requirement_str(require)
# Not present for distutils-only packages # Not present for distutils-only packages
if getattr(self.result, "setup_requires", []):
for require in self.result.setup_requires:
yield "build", PythonPackageRequirement.from_requirement_str(require)
# Not present for distutils-only packages
if getattr(self.result, "install_requires", []): if getattr(self.result, "install_requires", []):
for require in self.result.install_requires: for require in self.result.install_requires:
yield "core", PythonPackageRequirement.from_requirement_str(require) yield "core", PythonPackageRequirement.from_requirement_str(require)

View file

@ -696,16 +696,19 @@ def main(argv=None):
help="force updating of the changelog", help="force updating of the changelog",
default=None, default=None,
) )
parser.add_argument(
'--schroot',
type=str,
help='chroot to use.')
args = parser.parse_args() args = parser.parse_args()
from breezy.workingtree import WorkingTree from breezy.workingtree import WorkingTree
from .apt import AptManager from .apt import AptManager
from ..session.plain import PlainSession from ..session.plain import PlainSession
from ..session.schroot import SchrootSession
import tempfile import tempfile
import contextlib import contextlib
apt = AptManager(PlainSession())
logging.basicConfig(level=logging.INFO, format="%(message)s") logging.basicConfig(level=logging.INFO, format="%(message)s")
with contextlib.ExitStack() as es: with contextlib.ExitStack() as es:
@ -716,17 +719,38 @@ def main(argv=None):
output_directory = args.output_directory output_directory = args.output_directory
tree = WorkingTree.open(".") tree = WorkingTree.open(".")
build_incrementally( if args.schroot:
tree, session = SchrootSession(args.schroot)
apt, es.enter_context(session)
args.suffix, else:
args.suite, session = PlainSession()
output_directory,
args.build_command, apt = AptManager(session)
None,
committer=args.committer, try:
update_changelog=args.update_changelog, build_incrementally(
) tree,
apt,
args.suffix,
args.suite,
output_directory,
args.build_command,
None,
committer=args.committer,
update_changelog=args.update_changelog,
)
except SbuildFailure as e:
if e.phase is None:
phase = 'unknown phase'
elif len(e.phase) == 1:
phase = e.phase[0]
else:
phase = '%s (%s)' % (e.phase[0], e.phase[1])
if e.error:
logging.fatal('Error during %s: %s', phase, e.error)
else:
logging.fatal('Error during %s: %s', phase, e.description)
return 1
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -37,7 +37,6 @@ from buildlog_consultant.common import (
from . import DetailedFailure from . import DetailedFailure
from .buildsystem import NoBuildToolsFound from .buildsystem import NoBuildToolsFound
from .session.schroot import SchrootSession from .session.schroot import SchrootSession
from .vcs import dupe_vcs_tree, export_vcs_tree
SUPPORTED_DIST_EXTENSIONS = [ SUPPORTED_DIST_EXTENSIONS = [
@ -142,20 +141,14 @@ def create_dist_schroot(
from .debian import satisfy_build_deps from .debian import satisfy_build_deps
satisfy_build_deps(session, packaging_tree) satisfy_build_deps(session, packaging_tree)
build_dir = os.path.join(session.location, "build")
try: try:
directory = tempfile.mkdtemp(dir=build_dir) export_directory, reldir = session.setup_from_vcs(
tree, include_controldir=include_controldir, subdir=subdir)
except OSError as e: except OSError as e:
if e.errno == errno.ENOSPC: if e.errno == errno.ENOSPC:
raise DetailedFailure(1, ["mkdtemp"], NoSpaceOnDevice()) raise DetailedFailure(1, ["mkdtemp"], NoSpaceOnDevice())
reldir = "/" + os.path.relpath(directory, session.location) raise
export_directory = os.path.join(directory, subdir)
if not include_controldir:
export_vcs_tree(tree, export_directory)
else:
dupe_vcs_tree(tree, export_directory)
buildsystems = list(detect_buildsystems(export_directory)) buildsystems = list(detect_buildsystems(export_directory))
resolver = AptResolver.from_session(session) resolver = AptResolver.from_session(session)

View file

@ -19,6 +19,7 @@ import logging
import os import os
import shlex import shlex
import subprocess import subprocess
import tempfile
from typing import Optional, List, Dict from typing import Optional, List, Dict
@ -167,3 +168,20 @@ class SchrootSession(Session):
def scandir(self, path: str): def scandir(self, path: str):
fullpath = self._fullpath(path) fullpath = self._fullpath(path)
return os.scandir(fullpath) return os.scandir(fullpath)
def setup_from_vcs(
self, tree, include_controldir=False, subdir="package"):
from ..vcs import dupe_vcs_tree, export_vcs_tree
build_dir = os.path.join(self.location, "build")
directory = tempfile.mkdtemp(dir=build_dir)
reldir = "/" + os.path.relpath(directory, self.location)
os.chdir(reldir)
export_directory = os.path.join(directory, subdir)
if not include_controldir:
export_vcs_tree(tree, export_directory)
else:
dupe_vcs_tree(tree, export_directory)
return export_directory, reldir