summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-04-11 13:15:31 +0100
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-04-11 13:42:57 +0100
commit5afd3d7ce64b762acb228f7f6b4f0326d030807b (patch)
tree75996c6ca35f742fdec74e300bce2662c3c7abcf
parentd1f60363d74a579ee8eee22e0b03494d63dee830 (diff)
downloadmorph-5afd3d7ce64b762acb228f7f6b4f0326d030807b.tar.gz
Add original_ref member to Source. Default to None for build-depends.
We will almost always want to look up sources based on the data we find in morphologies (e.g. chunk sources found in a stratum or strata found in a system). For that we need to remember the original_ref in addition to the resolved SHA1 and look up sources using this original ref. The original ref is therefore also used as part of the hash key in SourcePool now.
-rw-r--r--morphlib/morph2.py3
-rw-r--r--morphlib/source.py4
-rw-r--r--morphlib/source_tests.py14
-rw-r--r--morphlib/sourcepool.py10
-rw-r--r--morphlib/sourcepool_tests.py5
5 files changed, 23 insertions, 13 deletions
diff --git a/morphlib/morph2.py b/morphlib/morph2.py
index 717d855c..dbbf0c68 100644
--- a/morphlib/morph2.py
+++ b/morphlib/morph2.py
@@ -32,9 +32,10 @@ class Morphology(object):
('test-commands', []),
('install-commands', []),
('sources', []),
+ ('strata', []),
('max-jobs', None),
('description', ''),
- ('build-depends', []),
+ ('build-depends', None),
('build-system', 'manual'),
]
diff --git a/morphlib/source.py b/morphlib/source.py
index 33549df4..cfcd320b 100644
--- a/morphlib/source.py
+++ b/morphlib/source.py
@@ -24,6 +24,7 @@ class Source(object):
Has the following properties:
* ``repo`` -- the git repository which contains the source
+ * ``original_ref`` -- the git ref provided by the user or a morphology
* ``sha1`` -- the absolute git commit id for the revision we use
* ``morphology`` -- the in-memory representation of the morphology we use
* ``filename`` -- basename of the morphology filename
@@ -35,9 +36,10 @@ class Source(object):
'''
- def __init__(self, repo, sha1, morphology, filename):
+ def __init__(self, repo, original_ref, sha1, morphology, filename):
assert type(morphology) == morphlib.morph2.Morphology
self.repo = repo
+ self.original_ref = original_ref
self.sha1 = sha1
self.morphology = morphology
self.filename = filename
diff --git a/morphlib/source_tests.py b/morphlib/source_tests.py
index f9999ca0..3a396c63 100644
--- a/morphlib/source_tests.py
+++ b/morphlib/source_tests.py
@@ -30,17 +30,23 @@ class SourceTests(unittest.TestCase):
def setUp(self):
self.repo = 'foo.repo'
+ self.original_ref = 'original/ref'
self.sha1 = 'CAFEF00D'
self.morphology = morphlib.morph2.Morphology(self.morphology_text)
self.filename = 'foo.morph'
- self.source = morphlib.source.Source(self.repo, self.sha1,
- self.morphology, self.filename)
- self.other = morphlib.source.Source(self.repo, self.sha1,
- self.morphology, self.filename)
+ self.source = morphlib.source.Source(self.repo, self.original_ref,
+ self.sha1, self.morphology,
+ self.filename)
+ self.other = morphlib.source.Source(self.repo, self.original_ref,
+ self.sha1, self.morphology,
+ self.filename)
def test_sets_repo(self):
self.assertEqual(self.source.repo, self.repo)
+ def test_sets_original_ref(self):
+ self.assertEqual(self.source.original_ref, self.original_ref)
+
def test_sets_sha1(self):
self.assertEqual(self.source.sha1, self.sha1)
diff --git a/morphlib/sourcepool.py b/morphlib/sourcepool.py
index 449d7757..fe6bf9e9 100644
--- a/morphlib/sourcepool.py
+++ b/morphlib/sourcepool.py
@@ -22,23 +22,23 @@ class SourcePool(object):
self._sources = {}
self._order = []
- def _key(self, repo, sha1, filename):
- return (repo, sha1, filename)
+ def _key(self, repo, original_ref, filename):
+ return (repo, original_ref, filename)
def add(self, source):
'''Add a source to the pool.'''
- key = self._key(source.repo, source.sha1, source.filename)
+ key = self._key(source.repo, source.original_ref, source.filename)
self._sources[key] = source
self._order.append(source)
- def lookup(self, repo, sha1, filename):
+ def lookup(self, repo, original_ref, filename):
'''Find a source in the pool.
Raise KeyError if it is not found.
'''
- key = self._key(repo, sha1, filename)
+ key = self._key(repo, original_ref, filename)
return self._sources[key]
def __iter__(self):
diff --git a/morphlib/sourcepool_tests.py b/morphlib/sourcepool_tests.py
index 35a94b39..5ed5be4d 100644
--- a/morphlib/sourcepool_tests.py
+++ b/morphlib/sourcepool_tests.py
@@ -23,6 +23,7 @@ class DummySource(object):
def __init__(self):
self.repo = 'dummy.repo'
+ self.original_ref = 'original/ref'
self.sha1 = 'dummy.sha1'
self.filename = 'dummy.morph'
self.morphology = {}
@@ -46,13 +47,13 @@ class SourcePoolTests(unittest.TestCase):
def test_looks_up_source(self):
self.pool.add(self.source)
- result = self.pool.lookup(self.source.repo, self.source.sha1,
+ result = self.pool.lookup(self.source.repo, self.source.original_ref,
self.source.filename)
self.assertEqual(result, self.source)
def test_lookup_raises_keyerror_if_not_found(self):
self.assertRaises(KeyError, self.pool.lookup, self.source.repo,
- self.source.sha1, self.source.filename)
+ self.source.original_ref, self.source.filename)
def test_iterates_in_add_order(self):
sources = []