Code review comment for lp:~rharding/charmworld/fix-revisionless-store_url

Revision history for this message
Richard Harding (rharding) wrote :

Reviewers: mp+193336_code.launchpad.net,

Message:
Please take a look.

Description:
Allow revisionless cs: urls to be valid and found.

- Normally a full qualified store_url has a version on the end. Some
users
(Jorge) remove those to create bundles that stay up to date with charms
vs
locked.
- This supports that by performing a mongo regex vs exact match query
when no
revision is found on the charm store urls.

https://code.launchpad.net/~rharding/charmworld/fix-revisionless-store_url/+merge/193336

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/19990043/

Affected files (+24, -1 lines):
   A [revision details]
   M charmworld/models.py
   M charmworld/tests/test_models.py

Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: tarmac-20131030201737-gz0c5vg8fgoy12ly
+New revision: <email address hidden>

Index: charmworld/models.py
=== modified file 'charmworld/models.py'
--- charmworld/models.py 2013-10-24 17:24:43 +0000
+++ charmworld/models.py 2013-10-30 20:59:40 +0000
@@ -1627,7 +1627,16 @@
      charm_query = None
      if (charm_description.store_url):
          # The description includes a cs: charm store url, use that.
- charm_query = {'store_url': charm_description.store_url}
+ # That cs url may or may not have a revision in it. If not, use a
+ # regex query to find charms regardless of revision.
+ if charm_description.revision:
+ charm_query = {'store_url': charm_description.store_url}
+ else:
+ charm_query = {
+ 'store_url': {
+ "$regex": charm_description.store_url
+ }
+ }
      elif charm_description.branch:
          # The description includes a branch_spec to search for.
          charm_query = {u'branch_spec': charm_description.branch}

Index: charmworld/tests/test_models.py
=== modified file 'charmworld/tests/test_models.py'
--- charmworld/tests/test_models.py 2013-10-24 18:23:37 +0000
+++ charmworld/tests/test_models.py 2013-10-30 20:59:40 +0000
@@ -2150,6 +2150,18 @@
          self.assertEqual(1, charm['store_data']['revision'])
          self.assertEqual(1, charm['revision'])

+ def test_resolve_by_store_url_sans_version(self):
+ data = {
+ 'charm': 'cs:precise/wikipedia'
+ }
+ charm_description = BundledCharmDescription('wiki', data)
+ charm = resolve_charm_from_description(self.db, charm_description)
+ self.assertIsNotNone(charm)
+ self.assertEqual('~charmers/precise/wikipedia/3', charm['_id'])
+ self.assertEqual('wikipedia', charm['name'])
+ self.assertEqual(3, charm['store_data']['revision'])
+ self.assertEqual(3, charm['revision'])
+
      def test_resolve_by_name_and_series(self):
          data = {
              'charm': 'wikipedia'

« Back to merge proposal