Add code for exporting.

This commit is contained in:
Jelmer Vernooij 2021-03-17 14:15:54 +00:00
parent 9792ddb865
commit cc85d9d7a3
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8
6 changed files with 57 additions and 19 deletions

View file

@ -154,6 +154,10 @@ def main(): # noqa: C901
session = PlainSession()
with session:
logging.info("Preparing directory %s", args.directory)
external_dir, internal_dir = session.setup_from_directory(args.directory)
session.chdir(internal_dir)
os.chdir(external_dir)
if args.resolve == "apt":
resolver = AptResolver.from_session(session)
elif args.resolve == "native":
@ -161,7 +165,6 @@ def main(): # noqa: C901
elif args.resolve == "auto":
resolver = auto_resolver(session, explain=args.explain)
logging.info("Using requirement resolver: %s", resolver)
os.chdir(args.directory)
try:
bss = list(detect_buildsystems(args.directory))
logging.info(

View file

@ -174,13 +174,7 @@ class SetupPy(BuildSystem):
return "%s(%r)" % (type(self).__name__, self.path)
def setup(self, resolver):
with open(self.path, "r") as f:
setup_py_contents = f.read()
try:
with open("setup.cfg", "r") as f:
setup_cfg_contents = f.read()
except FileNotFoundError:
setup_cfg_contents = ""
pass
def test(self, session, resolver, fixers):
self.setup(resolver)

View file

@ -155,13 +155,8 @@ def create_dist_schroot(
fixers = [InstallFixer(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, fixers)
finally:
os.chdir(oldcwd)
session.chdir(reldir)
run_dist(session, buildsystems, resolver, fixers)
for path in dc.files:
shutil.copy(path, target_dir)

View file

@ -16,7 +16,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from typing import Optional, List, Dict
from typing import Optional, List, Dict, Tuple
import sys
import subprocess
@ -74,6 +74,14 @@ class Session(object):
def scandir(self, path: str):
raise NotImplementedError(self.scandir)
def setup_from_vcs(
self, tree, include_controldir: Optional[bool] = None,
subdir="package") -> Tuple[str, str]:
raise NotImplementedError(self.setup_from_vcs)
def setup_from_directory(self, path, subdir="package") -> Tuple[str, str]:
raise NotImplementedError(self.setup_from_directory)
class SessionSetupFailure(Exception):
"""Session failed to be set up."""

View file

@ -18,8 +18,10 @@
from . import Session
import contextlib
import os
import subprocess
import tempfile
from typing import Optional, Dict, List
@ -38,6 +40,15 @@ class PlainSession(Session):
def __repr__(self):
return "%s()" % (type(self).__name__, )
def __enter__(self) -> "Session":
self.es = contextlib.ExitStack()
self.es.__enter__()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.es.__exit__(exc_type, exc_val, exc_tb)
return False
def create_home(self):
pass
@ -69,3 +80,21 @@ class PlainSession(Session):
def chdir(self, path):
os.chdir(path)
def setup_from_vcs(
self, tree, include_controldir=None, subdir="package"):
from ..vcs import dupe_vcs_tree, export_vcs_tree
if include_controldir is False or (
not hasattr(tree, 'base') and include_controldir is None):
td = self.es.enter_context(tempfile.TemporaryDirectory())
export_vcs_tree(tree, td)
return td, td
elif not hasattr(tree, 'base'):
td = self.es.enter_context(tempfile.TemporaryDirectory())
dupe_vcs_tree(tree, td)
return td, td
else:
return tree.base, tree.base
def setup_from_directory(self, path):
return path, path

View file

@ -170,13 +170,13 @@ class SchrootSession(Session):
return os.scandir(fullpath)
def setup_from_vcs(
self, tree, include_controldir=False, subdir="package"):
self, tree, include_controldir: Optional[bool] = None,
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:
@ -184,4 +184,13 @@ class SchrootSession(Session):
else:
dupe_vcs_tree(tree, export_directory)
return export_directory, reldir
return export_directory, os.path.join(reldir, subdir)
def setup_from_directory(self, path, subdir="package"):
import shutil
build_dir = os.path.join(self.location, "build")
directory = tempfile.mkdtemp(dir=build_dir)
reldir = "/" + os.path.relpath(directory, self.location)
export_directory = os.path.join(directory, subdir)
shutil.copytree(path, export_directory, dirs_exist_ok=True)
return export_directory, os.path.join(reldir, subdir)