diff options
author | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2012-04-11 13:15:31 +0100 |
---|---|---|
committer | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2012-04-11 13:42:57 +0100 |
commit | 5afd3d7ce64b762acb228f7f6b4f0326d030807b (patch) | |
tree | 75996c6ca35f742fdec74e300bce2662c3c7abcf | |
parent | d1f60363d74a579ee8eee22e0b03494d63dee830 (diff) | |
download | morph-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.py | 3 | ||||
-rw-r--r-- | morphlib/source.py | 4 | ||||
-rw-r--r-- | morphlib/source_tests.py | 14 | ||||
-rw-r--r-- | morphlib/sourcepool.py | 10 | ||||
-rw-r--r-- | morphlib/sourcepool_tests.py | 5 |
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 = [] |