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()
|
session = PlainSession()
|
||||||
with session:
|
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":
|
if args.resolve == "apt":
|
||||||
resolver = AptResolver.from_session(session)
|
resolver = AptResolver.from_session(session)
|
||||||
elif args.resolve == "native":
|
elif args.resolve == "native":
|
||||||
|
@ -161,7 +165,6 @@ def main(): # noqa: C901
|
||||||
elif args.resolve == "auto":
|
elif args.resolve == "auto":
|
||||||
resolver = auto_resolver(session, explain=args.explain)
|
resolver = auto_resolver(session, explain=args.explain)
|
||||||
logging.info("Using requirement resolver: %s", resolver)
|
logging.info("Using requirement resolver: %s", resolver)
|
||||||
os.chdir(args.directory)
|
|
||||||
try:
|
try:
|
||||||
bss = list(detect_buildsystems(args.directory))
|
bss = list(detect_buildsystems(args.directory))
|
||||||
logging.info(
|
logging.info(
|
||||||
|
|
|
@ -174,13 +174,7 @@ class SetupPy(BuildSystem):
|
||||||
return "%s(%r)" % (type(self).__name__, self.path)
|
return "%s(%r)" % (type(self).__name__, self.path)
|
||||||
|
|
||||||
def setup(self, resolver):
|
def setup(self, resolver):
|
||||||
with open(self.path, "r") as f:
|
pass
|
||||||
setup_py_contents = f.read()
|
|
||||||
try:
|
|
||||||
with open("setup.cfg", "r") as f:
|
|
||||||
setup_cfg_contents = f.read()
|
|
||||||
except FileNotFoundError:
|
|
||||||
setup_cfg_contents = ""
|
|
||||||
|
|
||||||
def test(self, session, resolver, fixers):
|
def test(self, session, resolver, fixers):
|
||||||
self.setup(resolver)
|
self.setup(resolver)
|
||||||
|
|
|
@ -155,13 +155,8 @@ def create_dist_schroot(
|
||||||
fixers = [InstallFixer(resolver)]
|
fixers = [InstallFixer(resolver)]
|
||||||
|
|
||||||
with DistCatcher(export_directory) as dc:
|
with DistCatcher(export_directory) as dc:
|
||||||
oldcwd = os.getcwd()
|
session.chdir(reldir)
|
||||||
os.chdir(export_directory)
|
run_dist(session, buildsystems, resolver, fixers)
|
||||||
try:
|
|
||||||
session.chdir(os.path.join(reldir, subdir))
|
|
||||||
run_dist(session, buildsystems, resolver, fixers)
|
|
||||||
finally:
|
|
||||||
os.chdir(oldcwd)
|
|
||||||
|
|
||||||
for path in dc.files:
|
for path in dc.files:
|
||||||
shutil.copy(path, target_dir)
|
shutil.copy(path, target_dir)
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
# 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 sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
@ -74,6 +74,14 @@ class Session(object):
|
||||||
def scandir(self, path: str):
|
def scandir(self, path: str):
|
||||||
raise NotImplementedError(self.scandir)
|
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):
|
class SessionSetupFailure(Exception):
|
||||||
"""Session failed to be set up."""
|
"""Session failed to be set up."""
|
||||||
|
|
|
@ -18,8 +18,10 @@
|
||||||
|
|
||||||
from . import Session
|
from . import Session
|
||||||
|
|
||||||
|
import contextlib
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import tempfile
|
||||||
from typing import Optional, Dict, List
|
from typing import Optional, Dict, List
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,6 +40,15 @@ class PlainSession(Session):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "%s()" % (type(self).__name__, )
|
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):
|
def create_home(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -69,3 +80,21 @@ class PlainSession(Session):
|
||||||
|
|
||||||
def chdir(self, path):
|
def chdir(self, path):
|
||||||
os.chdir(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)
|
return os.scandir(fullpath)
|
||||||
|
|
||||||
def setup_from_vcs(
|
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
|
from ..vcs import dupe_vcs_tree, export_vcs_tree
|
||||||
build_dir = os.path.join(self.location, "build")
|
build_dir = os.path.join(self.location, "build")
|
||||||
|
|
||||||
directory = tempfile.mkdtemp(dir=build_dir)
|
directory = tempfile.mkdtemp(dir=build_dir)
|
||||||
reldir = "/" + os.path.relpath(directory, self.location)
|
reldir = "/" + os.path.relpath(directory, self.location)
|
||||||
os.chdir(reldir)
|
|
||||||
|
|
||||||
export_directory = os.path.join(directory, subdir)
|
export_directory = os.path.join(directory, subdir)
|
||||||
if not include_controldir:
|
if not include_controldir:
|
||||||
|
@ -184,4 +184,13 @@ class SchrootSession(Session):
|
||||||
else:
|
else:
|
||||||
dupe_vcs_tree(tree, export_directory)
|
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