summaryrefslogtreecommitdiff
path: root/morphlib/extensions.py
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-05-01 21:34:06 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-06-16 16:03:57 +0000
commit5477a3a9d785e2b853a68fd5a1b95ebaa38a30b5 (patch)
tree92c6e85e6299b7acac1e97f9309570e4fa1796d4 /morphlib/extensions.py
parenta500b2a432148040ae826c960c5693812c574e09 (diff)
downloadmorph-5477a3a9d785e2b853a68fd5a1b95ebaa38a30b5.tar.gz
Use DefinitionsRepo class in deploy plugin
This allows you to run `morph deploy` from any Git checkout of definitions.git. This also changes `morph help-extensions` to use the DefinitionsRepo class, as the code overlaps. Change-Id: I64c48f59c8ec5aebc7169f3b4b4abbb759bd0b9a
Diffstat (limited to 'morphlib/extensions.py')
-rw-r--r--morphlib/extensions.py31
1 files changed, 13 insertions, 18 deletions
diff --git a/morphlib/extensions.py b/morphlib/extensions.py
index 59281d66..b2a015b1 100644
--- a/morphlib/extensions.py
+++ b/morphlib/extensions.py
@@ -36,21 +36,13 @@ class ExtensionNotFoundError(ExtensionError):
class ExtensionNotExecutableError(ExtensionError):
pass
-def _get_root_repo():
- workspace = morphlib.workspace.open('.')
- system_branch = morphlib.sysbranchdir.open_from_within('.')
- root_repo_dir = morphlib.gitdir.GitDirectory(
- system_branch.get_git_directory_name(
- system_branch.root_repository_url))
- return root_repo_dir
def _get_morph_extension_directory():
code_dir = os.path.dirname(morphlib.__file__)
return os.path.join(code_dir, 'exts')
-def _list_repo_extension_filenames(kind): #pragma: no cover
- repo_dir = _get_root_repo()
- files = repo_dir.list_files()
+def _list_repo_extension_filenames(definitions_repo, kind): #pragma: no cover
+ files = definitions_repo.list_files()
return (f for f in files if os.path.splitext(f)[1] == kind)
def _list_morph_extension_filenames(kind):
@@ -60,9 +52,8 @@ def _list_morph_extension_filenames(kind):
def _get_extension_name(filename):
return os.path.basename(filename)
-def _get_repo_extension_contents(name, kind):
- repo_dir = _get_root_repo()
- return repo_dir.read_file(name + kind)
+def _get_repo_extension_contents(definitions_repo, name, kind):
+ return definitions_repo.read_file(name + kind)
def _get_morph_extension_filename(name, kind):
return os.path.join(_get_morph_extension_directory(), name + kind)
@@ -75,10 +66,13 @@ def _is_executable(filename):
def _list_extensions(kind):
repo_extension_filenames = []
try:
+ definitions_repo = morphlib.definitions_repo.open(
+ '.', search_for_root=True, search_workspace=True)
repo_extension_filenames = \
- _list_repo_extension_filenames(kind)
+ _list_repo_extension_filenames(definitions_repo, kind)
except (morphlib.workspace.NotInWorkspace,
- sysbranchdir.NotInSystemBranch):
+ sysbranchdir.NotInSystemBranch,
+ morphlib.definitions_repo.DefinitionsRepoNotFound):
# Squash this and just return no system branch extensions
pass
morph_extension_filenames = _list_morph_extension_filenames(kind)
@@ -123,7 +117,8 @@ class get_extension_filename():
If the extension is in the build repository then a temporary
file will be created, which will be deleted on exting the with block.
"""
- def __init__(self, name, kind, executable=True):
+ def __init__(self, definitions_repo, name, kind, executable=True):
+ self.definitions_repo = definitions_repo
self.name = name
self.kind = kind
self.executable = executable
@@ -132,8 +127,8 @@ class get_extension_filename():
def __enter__(self):
ext_filename = None
try:
- ext_contents = _get_repo_extension_contents(self.name,
- self.kind)
+ ext_contents = _get_repo_extension_contents(
+ self.definitions_repo, self.name, self.kind)
except (IOError, cliapp.AppException, sysbranchdir.NotInSystemBranch):
# Not found: look for it in the Morph code.
ext_filename = _get_morph_extension_filename(self.name, self.kind)