diff options
-rw-r--r-- | morphlib/__init__.py | 1 | ||||
-rw-r--r-- | morphlib/morphologyfinder.py | 71 | ||||
-rw-r--r-- | morphlib/morphologyfinder_tests.py | 111 | ||||
-rw-r--r-- | morphlib/plugins/deploy_plugin.py | 5 | ||||
-rw-r--r-- | morphlib/sysbranchdir.py | 18 |
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): |