Merge lp:~bac/charmworld/show-bundle-changes into lp:~juju-jitsu/charmworld/trunk
- show-bundle-changes
- Merge into trunk
Proposed by
Brad Crittenden
Status: | Merged |
---|---|
Merged at revision: | 429 |
Proposed branch: | lp:~bac/charmworld/show-bundle-changes |
Merge into: | lp:~juju-jitsu/charmworld/trunk |
Diff against target: |
377 lines (+63/-23) 15 files modified
charmworld/jobs/ingest.py (+4/-3) charmworld/jobs/tests/test_ingest.py (+11/-2) charmworld/jobs/tests/test_lp.py (+1/-1) charmworld/migrations/versions/tests/test_migrations.py (+1/-1) charmworld/models.py (+8/-3) charmworld/templates/bundle.pt (+10/-0) charmworld/templates/charm.pt (+1/-1) charmworld/templates/recent.pt (+1/-1) charmworld/testing/factory.py (+1/-1) charmworld/tests/test_models.py (+11/-4) charmworld/tests/test_search.py (+1/-1) charmworld/views/bundles.py (+2/-0) charmworld/views/helpers.py (+4/-4) charmworld/views/tests/test_api.py (+5/-0) charmworld/views/tests/test_feeds.py (+2/-1) |
To merge this branch: | bzr merge lp:~bac/charmworld/show-bundle-changes |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Juju-Jitsu Hackers | Pending | ||
Review via email: mp+192563@code.launchpad.net |
Commit message
Description of the change
Add changelog to bundle page.
To post a comment you must log in.
Revision history for this message
Brad Crittenden (bac) wrote : | # |
- 432. By Brad Crittenden
-
Remove broken RSS link for bundles.
Revision history for this message
Brad Crittenden (bac) wrote : | # |
Please take a look.
Revision history for this message
Brad Crittenden (bac) wrote : | # |
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'charmworld/jobs/ingest.py' | |||
2 | --- charmworld/jobs/ingest.py 2013-10-23 18:07:20 +0000 | |||
3 | +++ charmworld/jobs/ingest.py 2013-10-24 19:26:47 +0000 | |||
4 | @@ -310,10 +310,10 @@ | |||
5 | 310 | super(UpdateBundleJob, self).__init__() | 310 | super(UpdateBundleJob, self).__init__() |
6 | 311 | 311 | ||
7 | 312 | def store_bundles(self, deployer_config, owner, basket_id, first_change, | 312 | def store_bundles(self, deployer_config, owner, basket_id, first_change, |
9 | 313 | last_change, changes): | 313 | last_change, changes, branch_spec): |
10 | 314 | store_bundles( | 314 | store_bundles( |
11 | 315 | self.db.bundles, deployer_config, owner, basket_id, first_change, | 315 | self.db.bundles, deployer_config, owner, basket_id, first_change, |
13 | 316 | last_change, changes) | 316 | last_change, changes, branch_spec) |
14 | 317 | 317 | ||
15 | 318 | @staticmethod | 318 | @staticmethod |
16 | 319 | def set_basket_info(data, revno): | 319 | def set_basket_info(data, revno): |
17 | @@ -347,7 +347,8 @@ | |||
18 | 347 | deployer_config = self.get_deployer_config(fs, basket_data) | 347 | deployer_config = self.get_deployer_config(fs, basket_data) |
19 | 348 | self.store_bundles( | 348 | self.store_bundles( |
20 | 349 | deployer_config, basket_data['owner'], basket_data['name_revno'], | 349 | deployer_config, basket_data['owner'], basket_data['name_revno'], |
22 | 350 | None, None, None) | 350 | basket_data['first_change'], basket_data['last_change'], |
23 | 351 | basket_data['changes'], basket_data['branch_spec']) | ||
24 | 351 | 352 | ||
25 | 352 | 353 | ||
26 | 353 | def _rev_info(r, branch): | 354 | def _rev_info(r, branch): |
27 | 354 | 355 | ||
28 | === modified file 'charmworld/jobs/tests/test_ingest.py' | |||
29 | --- charmworld/jobs/tests/test_ingest.py 2013-10-23 17:37:08 +0000 | |||
30 | +++ charmworld/jobs/tests/test_ingest.py 2013-10-24 19:26:47 +0000 | |||
31 | @@ -534,12 +534,16 @@ | |||
32 | 534 | fs.put(deployer_config, _id=DEPLOYER_CONFIG_HASH) | 534 | fs.put(deployer_config, _id=DEPLOYER_CONFIG_HASH) |
33 | 535 | job.store_bundles( | 535 | job.store_bundles( |
34 | 536 | yaml.safe_load(deployer_config), basket_data['owner'], | 536 | yaml.safe_load(deployer_config), basket_data['owner'], |
36 | 537 | basket_data['name_revno'], None, None, None) | 537 | basket_data['name_revno'], None, None, None, None) |
37 | 538 | self.assertIsNotNone(self.db.bundles.find_one(bundle_id)) | 538 | self.assertIsNotNone(self.db.bundles.find_one(bundle_id)) |
38 | 539 | 539 | ||
39 | 540 | def test_job_run_stores_bundles_in_the_db(self): | 540 | def test_job_run_stores_bundles_in_the_db(self): |
40 | 541 | basket_data = factory.get_payload_json(name='wordpress') | 541 | basket_data = factory.get_payload_json(name='wordpress') |
41 | 542 | basket_data['name_revno'] = 'dummy' | 542 | basket_data['name_revno'] = 'dummy' |
42 | 543 | basket_data['first_change'] = None | ||
43 | 544 | basket_data['last_change'] = None | ||
44 | 545 | basket_data['changes'] = None | ||
45 | 546 | basket_data['branch_spec'] = None | ||
46 | 543 | job = UpdateBundleJob() | 547 | job = UpdateBundleJob() |
47 | 544 | job.setup(self.db) | 548 | job.setup(self.db) |
48 | 545 | with patch.object(job, 'get_deployer_config'): | 549 | with patch.object(job, 'get_deployer_config'): |
49 | @@ -551,6 +555,10 @@ | |||
50 | 551 | def test_job_run_does_not_alter_bundle_data(self): | 555 | def test_job_run_does_not_alter_bundle_data(self): |
51 | 552 | basket_data = factory.get_payload_json(name='wordpress') | 556 | basket_data = factory.get_payload_json(name='wordpress') |
52 | 553 | basket_data['name_revno'] = 'dummy' | 557 | basket_data['name_revno'] = 'dummy' |
53 | 558 | basket_data['first_change'] = None | ||
54 | 559 | basket_data['last_change'] = None | ||
55 | 560 | basket_data['changes'] = None | ||
56 | 561 | basket_data['branch_spec'] = None | ||
57 | 554 | job = UpdateBundleJob() | 562 | job = UpdateBundleJob() |
58 | 555 | job.setup(self.db) | 563 | job.setup(self.db) |
59 | 556 | with patch.object(job, 'get_deployer_config', | 564 | with patch.object(job, 'get_deployer_config', |
60 | @@ -559,7 +567,8 @@ | |||
61 | 559 | with patch.object(job, 'store_bundles') as store_bundles: | 567 | with patch.object(job, 'store_bundles') as store_bundles: |
62 | 560 | job.run(basket_data) | 568 | job.run(basket_data) |
63 | 561 | store_bundles.assert_called_with( | 569 | store_bundles.assert_called_with( |
65 | 562 | {'foo': {}}, 'charmers', 'dummy', None, None, None) | 570 | {'foo': {}}, 'charmers', 'dummy', None, None, None, |
66 | 571 | None) | ||
67 | 563 | 572 | ||
68 | 564 | 573 | ||
69 | 565 | class TestUpdateCharm(MongoTestBase): | 574 | class TestUpdateCharm(MongoTestBase): |
70 | 566 | 575 | ||
71 | === modified file 'charmworld/jobs/tests/test_lp.py' | |||
72 | --- charmworld/jobs/tests/test_lp.py 2013-10-23 21:53:17 +0000 | |||
73 | +++ charmworld/jobs/tests/test_lp.py 2013-10-24 19:26:47 +0000 | |||
74 | @@ -288,7 +288,7 @@ | |||
75 | 288 | 'store_data': { | 288 | 'store_data': { |
76 | 289 | 'errors': ['entry not found'], | 289 | 'errors': ['entry not found'], |
77 | 290 | 'revision': 0, | 290 | 'revision': 0, |
79 | 291 | 'store_checked': 'lambada' | 291 | 'store_checked': 'lambada', |
80 | 292 | }, | 292 | }, |
81 | 293 | 'store_url': 'cs:~baz/qux/quxx-0', | 293 | 'store_url': 'cs:~baz/qux/quxx-0', |
82 | 294 | } | 294 | } |
83 | 295 | 295 | ||
84 | === modified file 'charmworld/migrations/versions/tests/test_migrations.py' | |||
85 | --- charmworld/migrations/versions/tests/test_migrations.py 2013-10-23 17:37:08 +0000 | |||
86 | +++ charmworld/migrations/versions/tests/test_migrations.py 2013-10-24 19:26:47 +0000 | |||
87 | @@ -60,7 +60,7 @@ | |||
88 | 60 | owner, basket_name, bundle_name) | 60 | owner, basket_name, bundle_name) |
89 | 61 | store_bundles( | 61 | store_bundles( |
90 | 62 | self.db.bundles, parsed, owner, basket_id, | 62 | self.db.bundles, parsed, owner, basket_id, |
92 | 63 | None, None, None, | 63 | None, None, None, None, |
93 | 64 | index_client=self.index_client) | 64 | index_client=self.index_client) |
94 | 65 | 65 | ||
95 | 66 | def test_bundles_are_removed_from_elastic_search(self): | 66 | def test_bundles_are_removed_from_elastic_search(self): |
96 | 67 | 67 | ||
97 | === modified file 'charmworld/models.py' | |||
98 | --- charmworld/models.py 2013-10-23 18:52:03 +0000 | |||
99 | +++ charmworld/models.py 2013-10-24 19:26:47 +0000 | |||
100 | @@ -1298,6 +1298,10 @@ | |||
101 | 1298 | 'data': dict(), | 1298 | 'data': dict(), |
102 | 1299 | 'promulgated': False, | 1299 | 'promulgated': False, |
103 | 1300 | 'branch_deleted': False, | 1300 | 'branch_deleted': False, |
104 | 1301 | 'first_change': None, | ||
105 | 1302 | 'last_change': None, | ||
106 | 1303 | 'changes': None, | ||
107 | 1304 | 'branch_spec': None, | ||
108 | 1301 | } | 1305 | } |
109 | 1302 | 1306 | ||
110 | 1303 | def __init__(self, data): | 1307 | def __init__(self, data): |
111 | @@ -1744,7 +1748,7 @@ | |||
112 | 1744 | 1748 | ||
113 | 1745 | 1749 | ||
114 | 1746 | def make_bundle_doc(data, owner, basket_id, bundle_name, first_change, | 1750 | def make_bundle_doc(data, owner, basket_id, bundle_name, first_change, |
116 | 1747 | last_change, changes): | 1751 | last_change, changes, branch_spec): |
117 | 1748 | basket_name, basket_revision = basket_id.split('/') | 1752 | basket_name, basket_revision = basket_id.split('/') |
118 | 1749 | _id = Bundle.construct_id(owner, basket_name, bundle_name, basket_revision) | 1753 | _id = Bundle.construct_id(owner, basket_name, bundle_name, basket_revision) |
119 | 1750 | return { | 1754 | return { |
120 | @@ -1757,11 +1761,12 @@ | |||
121 | 1757 | 'first_change': first_change, | 1761 | 'first_change': first_change, |
122 | 1758 | 'last_change': last_change, | 1762 | 'last_change': last_change, |
123 | 1759 | 'changes': changes, | 1763 | 'changes': changes, |
124 | 1764 | 'branch_spec': branch_spec, | ||
125 | 1760 | } | 1765 | } |
126 | 1761 | 1766 | ||
127 | 1762 | 1767 | ||
128 | 1763 | def store_bundles(collection, deployer_config, owner, basket_id, first_change, | 1768 | def store_bundles(collection, deployer_config, owner, basket_id, first_change, |
130 | 1764 | last_change, changes, index_client=None): | 1769 | last_change, changes, branch_spec, index_client=None): |
131 | 1765 | """Store a basket of bundles into MongoDB and/or ElasticSearch. | 1770 | """Store a basket of bundles into MongoDB and/or ElasticSearch. |
132 | 1766 | 1771 | ||
133 | 1767 | :param: collection: A db bundles collection. If None the bundles are not | 1772 | :param: collection: A db bundles collection. If None the bundles are not |
134 | @@ -1785,7 +1790,7 @@ | |||
135 | 1785 | data = get_flattened_deployment(deployer_config, bundle_name) | 1790 | data = get_flattened_deployment(deployer_config, bundle_name) |
136 | 1786 | index_data[bundle_name] = make_bundle_doc( | 1791 | index_data[bundle_name] = make_bundle_doc( |
137 | 1787 | data, owner, basket_id, bundle_name, first_change, last_change, | 1792 | data, owner, basket_id, bundle_name, first_change, last_change, |
139 | 1788 | changes) | 1793 | changes, branch_spec) |
140 | 1789 | if collection is not None: | 1794 | if collection is not None: |
141 | 1790 | collection.save(index_data[bundle_name]) | 1795 | collection.save(index_data[bundle_name]) |
142 | 1791 | 1796 | ||
143 | 1792 | 1797 | ||
144 | === modified file 'charmworld/templates/bundle.pt' | |||
145 | --- charmworld/templates/bundle.pt 2013-10-22 22:37:03 +0000 | |||
146 | +++ charmworld/templates/bundle.pt 2013-10-24 19:26:47 +0000 | |||
147 | @@ -103,6 +103,16 @@ | |||
148 | 103 | </li> | 103 | </li> |
149 | 104 | </ul> | 104 | </ul> |
150 | 105 | </div> | 105 | </div> |
151 | 106 | <div class="row no-border"> | ||
152 | 107 | <h3> | ||
153 | 108 | Changes | ||
154 | 109 | </h3> | ||
155 | 110 | <ul class="list"> | ||
156 | 111 | <li tal:repeat="change bundle.changes" | ||
157 | 112 | tal:content="structure: format_change(change, bundle.branch_spec)"> | ||
158 | 113 | </li> | ||
159 | 114 | </ul> | ||
160 | 115 | </div> | ||
161 | 106 | </metal:block> | 116 | </metal:block> |
162 | 107 | </body> | 117 | </body> |
163 | 108 | </html> | 118 | </html> |
164 | 109 | 119 | ||
165 | === modified file 'charmworld/templates/charm.pt' | |||
166 | --- charmworld/templates/charm.pt 2013-10-01 12:38:21 +0000 | |||
167 | +++ charmworld/templates/charm.pt 2013-10-24 19:26:47 +0000 | |||
168 | @@ -268,7 +268,7 @@ | |||
169 | 268 | </h3> | 268 | </h3> |
170 | 269 | <ul class="list"> | 269 | <ul class="list"> |
171 | 270 | <li tal:repeat="change charm.changes" | 270 | <li tal:repeat="change charm.changes" |
173 | 271 | tal:content="structure: format_change(change, charm)"> | 271 | tal:content="structure: format_change(change, charm.branch_spec)"> |
174 | 272 | </li> | 272 | </li> |
175 | 273 | </ul> | 273 | </ul> |
176 | 274 | </div> | 274 | </div> |
177 | 275 | 275 | ||
178 | === modified file 'charmworld/templates/recent.pt' | |||
179 | --- charmworld/templates/recent.pt 2013-09-05 10:55:42 +0000 | |||
180 | +++ charmworld/templates/recent.pt 2013-10-24 19:26:47 +0000 | |||
181 | @@ -27,7 +27,7 @@ | |||
182 | 27 | <td> | 27 | <td> |
183 | 28 | <a href="${charm.short_url}">${charm.store_url}</a></td> | 28 | <a href="${charm.short_url}">${charm.store_url}</a></td> |
184 | 29 | <td tal:content="charm.summary"></td> | 29 | <td tal:content="charm.summary"></td> |
186 | 30 | <td tal:content="structure: format_change(charm.last_change, charm)"></td> | 30 | <td tal:content="structure: format_change(charm.last_change, charm.branch_spec)"></td> |
187 | 31 | </tr> | 31 | </tr> |
188 | 32 | </table> | 32 | </table> |
189 | 33 | </div> | 33 | </div> |
190 | 34 | 34 | ||
191 | === modified file 'charmworld/testing/factory.py' | |||
192 | --- charmworld/testing/factory.py 2013-10-23 17:37:08 +0000 | |||
193 | +++ charmworld/testing/factory.py 2013-10-24 19:26:47 +0000 | |||
194 | @@ -332,7 +332,7 @@ | |||
195 | 332 | relations=relations, | 332 | relations=relations, |
196 | 333 | services=services) | 333 | services=services) |
197 | 334 | bundle_doc = make_bundle_doc( | 334 | bundle_doc = make_bundle_doc( |
199 | 335 | data, owner, basket_with_rev, name, None, None, None) | 335 | data, owner, basket_with_rev, name, None, None, None, None) |
200 | 336 | bundle_doc.update(dict(branch_deleted=branch_deleted, | 336 | bundle_doc.update(dict(branch_deleted=branch_deleted, |
201 | 337 | data=data, | 337 | data=data, |
202 | 338 | description=description, | 338 | description=description, |
203 | 339 | 339 | ||
204 | === modified file 'charmworld/tests/test_models.py' | |||
205 | --- charmworld/tests/test_models.py 2013-10-23 18:52:03 +0000 | |||
206 | +++ charmworld/tests/test_models.py 2013-10-24 19:26:47 +0000 | |||
207 | @@ -1595,7 +1595,7 @@ | |||
208 | 1595 | basket_id = "%s/%d" % (basket_name, basket_rev) | 1595 | basket_id = "%s/%d" % (basket_name, basket_rev) |
209 | 1596 | _id = Bundle.construct_id(owner, basket_name, bundle_name, basket_rev) | 1596 | _id = Bundle.construct_id(owner, basket_name, bundle_name, basket_rev) |
210 | 1597 | store_bundles( | 1597 | store_bundles( |
212 | 1598 | self.db.bundles, parsed, 'bac', basket_id, None, None, None) | 1598 | self.db.bundles, parsed, 'bac', basket_id, None, None, None, None) |
213 | 1599 | self.assertEqual( | 1599 | self.assertEqual( |
214 | 1600 | { | 1600 | { |
215 | 1601 | '_id': _id, | 1601 | '_id': _id, |
216 | @@ -1607,6 +1607,7 @@ | |||
217 | 1607 | 'first_change': None, | 1607 | 'first_change': None, |
218 | 1608 | 'last_change': None, | 1608 | 'last_change': None, |
219 | 1609 | 'changes': None, | 1609 | 'changes': None, |
220 | 1610 | 'branch_spec': None, | ||
221 | 1610 | }, | 1611 | }, |
222 | 1611 | self.db.bundles.find_one(_id)) | 1612 | self.db.bundles.find_one(_id)) |
223 | 1612 | 1613 | ||
224 | @@ -1643,7 +1644,7 @@ | |||
225 | 1643 | get_flattened_deployment): | 1644 | get_flattened_deployment): |
226 | 1644 | store_bundles( | 1645 | store_bundles( |
227 | 1645 | self.db.bundles, parsed, 'bac', 'wordpress-basket/5', None, | 1646 | self.db.bundles, parsed, 'bac', 'wordpress-basket/5', None, |
229 | 1646 | None, None) | 1647 | None, None, None) |
230 | 1647 | self.assertItemsEqual(['wordpress-stage', 'wordpress-prod'], keys) | 1648 | self.assertItemsEqual(['wordpress-stage', 'wordpress-prod'], keys) |
231 | 1648 | 1649 | ||
232 | 1649 | def test_storing_a_bundle_includes_indexing_it(self): | 1650 | def test_storing_a_bundle_includes_indexing_it(self): |
233 | @@ -1663,7 +1664,7 @@ | |||
234 | 1663 | FauxElasticSearchClient): | 1664 | FauxElasticSearchClient): |
235 | 1664 | store_bundles( | 1665 | store_bundles( |
236 | 1665 | self.db.bundles, {}, 'owner', 'wordpress-basket/5', None, | 1666 | self.db.bundles, {}, 'owner', 'wordpress-basket/5', None, |
238 | 1666 | None, None) | 1667 | None, None, None) |
239 | 1667 | 1668 | ||
240 | 1668 | self.assertTrue(FauxElasticSearchClient.index_bundles_called) | 1669 | self.assertTrue(FauxElasticSearchClient.index_bundles_called) |
241 | 1669 | 1670 | ||
242 | @@ -1703,6 +1704,9 @@ | |||
243 | 1703 | 'owner': 'sinzui', | 1704 | 'owner': 'sinzui', |
244 | 1704 | 'basket_name': 'mysql', | 1705 | 'basket_name': 'mysql', |
245 | 1705 | 'basket_revision': 1, | 1706 | 'basket_revision': 1, |
246 | 1707 | 'changes': None, | ||
247 | 1708 | 'first_change': None, | ||
248 | 1709 | 'last_change': None, | ||
249 | 1706 | 'name': 'tiny', | 1710 | 'name': 'tiny', |
250 | 1707 | 'title': 'Tiny bundle', | 1711 | 'title': 'Tiny bundle', |
251 | 1708 | 'description': 'My Tiny Bundle', | 1712 | 'description': 'My Tiny Bundle', |
252 | @@ -1714,6 +1718,7 @@ | |||
253 | 1714 | 'promulgated': True, | 1718 | 'promulgated': True, |
254 | 1715 | 'branch_deleted': True, | 1719 | 'branch_deleted': True, |
255 | 1716 | 'is_featured': False, | 1720 | 'is_featured': False, |
256 | 1721 | 'branch_spec': '~sinzui/fake/path', | ||
257 | 1717 | } | 1722 | } |
258 | 1718 | bundle = Bundle(bundle_data) | 1723 | bundle = Bundle(bundle_data) |
259 | 1719 | self.assertIs(bundle_data, bundle._raw_representation) | 1724 | self.assertIs(bundle_data, bundle._raw_representation) |
260 | @@ -2010,7 +2015,8 @@ | |||
261 | 2010 | 2015 | ||
262 | 2011 | def test_bundle_doc(self): | 2016 | def test_bundle_doc(self): |
263 | 2012 | doc = make_bundle_doc( | 2017 | doc = make_bundle_doc( |
265 | 2013 | {'a': 'b'}, 'foo', 'bar/9', 'baz', None, None, None) | 2018 | {'a': 'b'}, 'foo', 'bar/9', 'baz', None, None, None, |
266 | 2019 | 'fake/branch/spec') | ||
267 | 2014 | self.assertEqual({ | 2020 | self.assertEqual({ |
268 | 2015 | 'owner': 'foo', | 2021 | 'owner': 'foo', |
269 | 2016 | 'basket_name': 'bar', | 2022 | 'basket_name': 'bar', |
270 | @@ -2021,6 +2027,7 @@ | |||
271 | 2021 | 'first_change': None, | 2027 | 'first_change': None, |
272 | 2022 | 'last_change': None, | 2028 | 'last_change': None, |
273 | 2023 | 'changes': None, | 2029 | 'changes': None, |
274 | 2030 | 'branch_spec': 'fake/branch/spec', | ||
275 | 2024 | }, doc) | 2031 | }, doc) |
276 | 2025 | 2032 | ||
277 | 2026 | 2033 | ||
278 | 2027 | 2034 | ||
279 | === modified file 'charmworld/tests/test_search.py' | |||
280 | --- charmworld/tests/test_search.py 2013-10-23 17:37:08 +0000 | |||
281 | +++ charmworld/tests/test_search.py 2013-10-24 19:26:47 +0000 | |||
282 | @@ -168,7 +168,7 @@ | |||
283 | 168 | parsed = yaml.safe_load(deployer_config) | 168 | parsed = yaml.safe_load(deployer_config) |
284 | 169 | store_bundles( | 169 | store_bundles( |
285 | 170 | None, parsed, 'abentley', 'wordpress-basket/5', None, None, None, | 170 | None, parsed, 'abentley', 'wordpress-basket/5', None, None, None, |
287 | 171 | index_client=self.index_client) | 171 | None, index_client=self.index_client) |
288 | 172 | return _id | 172 | return _id |
289 | 173 | 173 | ||
290 | 174 | def test_store_bundles_bundle_name_indexed(self): | 174 | def test_store_bundles_bundle_name_indexed(self): |
291 | 175 | 175 | ||
292 | === modified file 'charmworld/views/bundles.py' | |||
293 | --- charmworld/views/bundles.py 2013-10-10 20:29:41 +0000 | |||
294 | +++ charmworld/views/bundles.py 2013-10-24 19:26:47 +0000 | |||
295 | @@ -9,6 +9,7 @@ | |||
296 | 9 | from charmworld.views.helpers import ( | 9 | from charmworld.views.helpers import ( |
297 | 10 | find_bundle, | 10 | find_bundle, |
298 | 11 | found, | 11 | found, |
299 | 12 | format_change, | ||
300 | 12 | ) | 13 | ) |
301 | 13 | 14 | ||
302 | 14 | 15 | ||
303 | @@ -101,6 +102,7 @@ | |||
304 | 101 | readme, readme_ext = bundle.readme_info(request.db) | 102 | readme, readme_ext = bundle.readme_info(request.db) |
305 | 102 | return dict( | 103 | return dict( |
306 | 103 | bundle=bundle, | 104 | bundle=bundle, |
307 | 105 | format_change=format_change, | ||
308 | 104 | icon_path=bundle.icon_path(request), | 106 | icon_path=bundle.icon_path(request), |
309 | 105 | is_owner=is_owner, | 107 | is_owner=is_owner, |
310 | 106 | readme=readme, | 108 | readme=readme, |
311 | 107 | 109 | ||
312 | === modified file 'charmworld/views/helpers.py' | |||
313 | --- charmworld/views/helpers.py 2013-10-02 13:47:53 +0000 | |||
314 | +++ charmworld/views/helpers.py 2013-10-24 19:26:47 +0000 | |||
315 | @@ -14,23 +14,23 @@ | |||
316 | 14 | # View helpers used throughout various views | 14 | # View helpers used throughout various views |
317 | 15 | 15 | ||
318 | 16 | 16 | ||
320 | 17 | def format_change(change, charm=None): | 17 | def format_change(change, branch_spec=None): |
321 | 18 | """Format a bzr commit.""" | 18 | """Format a bzr commit.""" |
322 | 19 | parts = [] | 19 | parts = [] |
323 | 20 | date = change["created"] | 20 | date = change["created"] |
324 | 21 | # bug 1199790: We may have a branch without any commits. | 21 | # bug 1199790: We may have a branch without any commits. |
326 | 22 | # In this case, class Charm returns dummy data for its attributes | 22 | # In this case, Charm and Bundle return dummy data for its attributes |
327 | 23 | # first_change and last_change. | 23 | # first_change and last_change. |
328 | 24 | if date is not None: | 24 | if date is not None: |
329 | 25 | date = datetime.utcfromtimestamp(date) | 25 | date = datetime.utcfromtimestamp(date) |
330 | 26 | parts.append(unicode(date.strftime("%Y/%m/%d"))) | 26 | parts.append(unicode(date.strftime("%Y/%m/%d"))) |
331 | 27 | parts.append(name_filter(change['committer'])) | 27 | parts.append(name_filter(change['committer'])) |
332 | 28 | parts.append(change["message"][:100]) | 28 | parts.append(change["message"][:100]) |
334 | 29 | if charm is not None: | 29 | if branch_spec is not None: |
335 | 30 | parts.append( | 30 | parts.append( |
336 | 31 | u'(<a href="' | 31 | u'(<a href="' |
337 | 32 | 'https://bazaar.launchpad.net/%s/revision/%s">revno %s</a>)' % ( | 32 | 'https://bazaar.launchpad.net/%s/revision/%s">revno %s</a>)' % ( |
339 | 33 | charm.branch_spec, change["revno"], change["revno"])) | 33 | branch_spec, change["revno"], change["revno"])) |
340 | 34 | return u" ".join(parts) | 34 | return u" ".join(parts) |
341 | 35 | 35 | ||
342 | 36 | 36 | ||
343 | 37 | 37 | ||
344 | === modified file 'charmworld/views/tests/test_api.py' | |||
345 | --- charmworld/views/tests/test_api.py 2013-10-23 18:52:03 +0000 | |||
346 | +++ charmworld/views/tests/test_api.py 2013-10-24 19:26:47 +0000 | |||
347 | @@ -735,6 +735,7 @@ | |||
348 | 735 | first_change=None, | 735 | first_change=None, |
349 | 736 | last_change=None, | 736 | last_change=None, |
350 | 737 | changes=None, | 737 | changes=None, |
351 | 738 | branch_spec=None, | ||
352 | 738 | ) | 739 | ) |
353 | 739 | self.assertEqual(expected, bundle._representation) | 740 | self.assertEqual(expected, bundle._representation) |
354 | 740 | 741 | ||
355 | @@ -821,6 +822,10 @@ | |||
356 | 821 | }, | 822 | }, |
357 | 822 | u'description': u'', | 823 | u'description': u'', |
358 | 823 | u'files': [], | 824 | u'files': [], |
359 | 825 | u'first_change': None, | ||
360 | 826 | u'last_change': None, | ||
361 | 827 | u'changes': None, | ||
362 | 828 | u'branch_spec': None, | ||
363 | 824 | u'id': u'~bac/byobu/4/bat', | 829 | u'id': u'~bac/byobu/4/bat', |
364 | 825 | u'name': u'bat', | 830 | u'name': u'bat', |
365 | 826 | u'owner': u'bac', | 831 | u'owner': u'bac', |
366 | 827 | 832 | ||
367 | === modified file 'charmworld/views/tests/test_feeds.py' | |||
368 | --- charmworld/views/tests/test_feeds.py 2013-09-05 09:47:11 +0000 | |||
369 | +++ charmworld/views/tests/test_feeds.py 2013-10-24 19:26:47 +0000 | |||
370 | @@ -107,5 +107,6 @@ | |||
371 | 107 | self.assertEqual(charm.short_url, anchor.attrib['href']) | 107 | self.assertEqual(charm.short_url, anchor.attrib['href']) |
372 | 108 | self.assertEqual(charm.summary, cells[1].text) | 108 | self.assertEqual(charm.summary, cells[1].text) |
373 | 109 | self.assertEqual( | 109 | self.assertEqual( |
375 | 110 | '<td>%s</td>' % format_change(charm.last_change, charm), | 110 | '<td>%s</td>' % format_change( |
376 | 111 | charm.last_change, charm.branch_spec), | ||
377 | 111 | tostring(cells[2]).strip()) | 112 | tostring(cells[2]).strip()) |
Reviewers: mp+192563_ code.launchpad. net,
Message:
Please take a look.
Description:
Add changelog to bundle page.
https:/ /code.launchpad .net/~bac/ charmworld/ show-bundle- changes/ +merge/ 192563
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/16690043/
Affected files (+69, -23 lines): jobs/ingest. py jobs/tests/ test_ingest. py jobs/tests/ test_lp. py migrations/ versions/ tests/test_ migrations. py models. py templates/ bundle. pt templates/ charm.pt templates/ recent. pt testing/ factory. py tests/test_ models. py tests/test_ search. py views/bundles. py views/helpers. py views/tests/ test_api. py views/tests/ test_feeds. py
A [revision details]
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
M charmworld/
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: <email address hidden>
+New revision: <email address hidden>
Index: charmworld/ models. py models. py' models. py 2013-10-23 18:52:03 +0000 models. py 2013-10-24 17:24:43 +0000
'promulgated ': False,
'branch_ deleted' : False,
=== modified file 'charmworld/
--- charmworld/
+++ charmworld/
@@ -1298,6 +1298,10 @@
'data': dict(),
+ 'first_change': None,
+ 'last_change': None,
+ 'changes': None,
+ 'branch_spec': None,
}
def __init__(self, data):
@@ -1744,7 +1748,7 @@
def make_bundle_ doc(data, owner, basket_id, bundle_name, first_change, id.split( '/') construct_ id(owner, basket_name, bundle_name,
'first_ change' : first_change,
'last_ change' : last_change,
'changes' : changes,
- last_change, changes):
+ last_change, changes, branch_spec):
basket_name, basket_revision = basket_
_id = Bundle.
basket_revision)
return {
@@ -1757,11 +1761,12 @@
+ 'branch_spec': branch_spec,
}
def store_bundles( collection, deployer_config, owner, basket_id,
first_change,
- last_change, changes, index_client=None):
+ last_change, changes, branch_spec, index_client=None):
"""Store a basket of bundles into MongoDB and/or ElasticSearch.
:param: collection: A db bundles collection. If None the bundles are deployment( deployer_ config, bundle_name)
index_ data[bundle_ name] = make_bundle_doc(
collection. save(index_ data[bundle_ name])
not
@@ -1785,7 +1790,7 @@
data = get_flattened_
data, owner, basket_id, bundle_name, first_change, last_change,
- changes)
+ changes, branch_spec)
if collection is not None:
Index: charmworld/ jobs/ingest. py jobs/ingest. py' jobs/ingest. py 2013-10-23 18:07:20 +0000 jobs/ingest. py 2013-10-24 17:24:43 +0000
super( Update. ..
=== modified file 'charmworld/
--- charmworld/
+++ charmworld/
@@ -310,10 +310,10 @@