summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/__init__.py1
-rw-r--r--morphlib/morphologyfinder.py71
-rw-r--r--morphlib/morphologyfinder_tests.py111
-rw-r--r--morphlib/plugins/deploy_plugin.py5
-rw-r--r--morphlib/sysbranchdir.py18
5 files changed, 13 insertions, 193 deletions
diff --git a/morphlib/__init__.py b/morphlib/__init__.py
index 0c928fd3..a8932550 100644
--- a/morphlib/__init__.py
+++ b/morphlib/__init__.py
@@ -70,7 +70,6 @@ import localrepocache
import mountableimage
import morph2
import morphologyfactory
-import morphologyfinder
import morph3
import morphloader
import morphset
diff --git a/morphlib/morphologyfinder.py b/morphlib/morphologyfinder.py
deleted file mode 100644
index affa0e97..00000000
--- a/morphlib/morphologyfinder.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 2013 Codethink Limited
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# =*= License: GPL-2 =*=
-
-
-import cliapp
-
-import morphlib
-
-
-class MorphologyFinder(object):
-
- '''Abstract away finding morphologies in a git repository.
-
- This class provides an abstraction layer between a git repository
- and the morphologies contained in it.
-
- '''
-
- def __init__(self, gitdir, ref=None):
- self.gitdir = gitdir
- self.ref = ref
-
- def read_morphology(self, name):
- '''Return the un-parsed text of a morphology.
-
- For the given morphology name, locate and return the contents
- of the morphology as a string.
-
- Also returns a string describing where in the repository the
- morphology is located.
-
- Parsing of this morphology into a form useful for manipulating
- is handled by the MorphologyLoader class.
-
- '''
- filename = '%s.morph' % name
- return self.gitdir.read_file(filename, self.ref), filename
-
- def list_morphologies(self):
- '''Return the names of all morphologies in the (repo, ref).
-
- Finds all morphologies in the git directory at the specified
- ref. Morphology names are returned instead of filenames,
- so the implementation may change how morphologies are stored
- in git repositories.
-
- '''
-
- def is_morphology_path(path):
- return path.endswith('.morph')
-
- def transform_path_to_name(path):
- return path[:-len('.morph')]
-
- return (transform_path_to_name(path)
- for path in self.gitdir.list_files(self.ref)
- if is_morphology_path(path))
diff --git a/morphlib/morphologyfinder_tests.py b/morphlib/morphologyfinder_tests.py
deleted file mode 100644
index ff83ccff..00000000
--- a/morphlib/morphologyfinder_tests.py
+++ /dev/null
@@ -1,111 +0,0 @@
-# Copyright (C) 2013 Codethink Limited
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# =*= License: GPL-2 =*=
-
-
-import os
-import shutil
-import tempfile
-import unittest
-
-import morphlib
-
-
-class MorphologyFinderTests(unittest.TestCase):
-
- def setUp(self):
- self.tempdir = tempfile.mkdtemp()
- self.dirname = os.path.join(self.tempdir, 'repo')
- os.mkdir(self.dirname)
- gd = morphlib.gitdir.init(self.dirname)
- for fn in ('foo', 'bar.morph', 'baz.morph', 'quux'):
- with open(os.path.join(self.dirname, fn), "w") as f:
- f.write('dummy morphology text')
- gd._runcmd(['git', 'add', '.'])
- gd._runcmd(['git', 'commit', '-m', 'Initial commit'])
-
- # Changes for difference between commited and work tree
- newmorphpath = os.path.join(self.dirname, 'foo.morph')
- os.unlink(os.path.join(self.dirname, 'foo'))
- with open(newmorphpath, 'w') as f:
- f.write("altered morphology text")
-
- # Changes for bare repository
- self.mirror = os.path.join(self.tempdir, 'mirror')
- gd._runcmd(['git', 'clone', '--mirror', self.dirname, self.mirror])
-
- def tearDown(self):
- shutil.rmtree(self.tempdir)
-
- def test_list_morphs_in_HEAD(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd, 'HEAD')
- self.assertEqual(sorted(mf.list_morphologies()),
- ['bar', 'baz'])
-
- def test_list_morphs_in_master(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd, 'master')
- self.assertEqual(sorted(mf.list_morphologies()),
- ['bar', 'baz'])
-
- def test_list_morphs_raises_with_invalid_ref(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd, 'invalid_ref')
- self.assertRaises(morphlib.gitdir.InvalidRefError,
- mf.list_morphologies)
-
- def test_list_morphs_in_work_tree(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd)
- self.assertEqual(sorted(mf.list_morphologies()),
- ['bar', 'baz', 'foo'])
-
- def test_list_morphs_raises_no_worktree_no_ref(self):
- gd = morphlib.gitdir.GitDirectory(self.mirror)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd)
- self.assertRaises(morphlib.gitdir.NoWorkingTreeError,
- mf.list_morphologies)
-
- def test_read_morph_in_HEAD(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd, 'HEAD')
- self.assertEqual(mf.read_morphology('bar')[0],
- "dummy morphology text")
-
- def test_read_morph_in_master(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd, 'master')
- self.assertEqual(mf.read_morphology('bar')[0],
- "dummy morphology text")
-
- def test_read_morph_raises_with_invalid_ref(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd, 'invalid_ref')
- self.assertRaises(morphlib.gitdir.InvalidRefError,
- mf.read_morphology, 'bar')
-
- def test_read_morph_in_work_tree(self):
- gd = morphlib.gitdir.GitDirectory(self.dirname)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd)
- self.assertEqual(mf.read_morphology('foo')[0],
- "altered morphology text")
-
- def test_read_morph_raises_no_worktree_no_ref(self):
- gd = morphlib.gitdir.GitDirectory(self.mirror)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd)
- self.assertRaises(morphlib.gitdir.NoWorkingTreeError,
- mf.read_morphology, 'bar')
diff --git a/morphlib/plugins/deploy_plugin.py b/morphlib/plugins/deploy_plugin.py
index 6fc0998c..7c009071 100644
--- a/morphlib/plugins/deploy_plugin.py
+++ b/morphlib/plugins/deploy_plugin.py
@@ -292,11 +292,10 @@ class DeployPlugin(cliapp.Plugin):
name = morphlib.git.get_user_name(self.app.runcmd)
email = morphlib.git.get_user_email(self.app.runcmd)
build_ref_prefix = self.app.settings['build-ref-prefix']
-
root_repo_dir = morphlib.gitdir.GitDirectory(
sb.get_git_directory_name(sb.root_repository_url))
- mf = morphlib.morphologyfinder.MorphologyFinder(root_repo_dir)
- cluster_text, cluster_filename = mf.read_morphology(cluster_name)
+ cluster_filename = cluster_name + '.morph'
+ cluster_text = root_repo_dir.read_file(cluster_filename)
cluster_morphology = loader.load_from_string(cluster_text,
filename=cluster_filename)
diff --git a/morphlib/sysbranchdir.py b/morphlib/sysbranchdir.py
index 9d96e974..8546d726 100644
--- a/morphlib/sysbranchdir.py
+++ b/morphlib/sysbranchdir.py
@@ -175,13 +175,17 @@ class SystemBranchDirectory(object):
def load_all_morphologies(self, loader): # pragma: no cover
gd_name = self.get_git_directory_name(self.root_repository_url)
gd = morphlib.gitdir.GitDirectory(gd_name)
- mf = morphlib.morphologyfinder.MorphologyFinder(gd)
- for morph in mf.list_morphologies():
- text, filename = mf.read_morphology(morph)
- m = loader.load_from_string(text, filename=filename)
- m.repo_url = self.root_repository_url
- m.ref = self.system_branch_name
- yield m
+ for filename in gd.list_files():
+ text = gd.read_file(filename)
+ try:
+ m = loader.load_from_string(text, filename=filename)
+ except (morphlib.morphloader.MorphologySyntaxError,
+ morphlib.morphloader.MorphologyValidationError) as e:
+ continue
+ else:
+ m.repo_url = self.root_repository_url
+ m.ref = self.system_branch_name
+ yield m
def create(root_directory, root_repository_url, system_branch_name):