Add code for exporting.
This commit is contained in:
parent
9792ddb865
commit
cc85d9d7a3
6 changed files with 57 additions and 19 deletions
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue