Merge lp:~fgallina/rnr-server/revno-in-preflight into lp:rnr-server

Proposed by Fabián Ezequiel Gallina
Status: Merged
Approved by: Fabián Ezequiel Gallina
Approved revision: 253
Merged at revision: 253
Proposed branch: lp:~fgallina/rnr-server/revno-in-preflight
Merge into: lp:rnr-server
Diff against target: 138 lines (+76/-9)
3 files modified
requirements.txt (+1/-0)
src/reviewsapp/preflight.py (+32/-7)
src/reviewsapp/tests/test_preflight.py (+43/-2)
To merge this branch: bzr merge lp:~fgallina/rnr-server/revno-in-preflight
Reviewer Review Type Date Requested Status
Matias Bordese (community) Approve
Review via email: mp+227717@code.launchpad.net

Commit message

Added bzr revno (if available) in preflight

To post a comment you must log in.
Revision history for this message
Matias Bordese (matiasb) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'requirements.txt'
2--- requirements.txt 2014-01-13 11:23:34 +0000
3+++ requirements.txt 2014-07-22 12:34:08 +0000
4@@ -2,6 +2,7 @@
5 -f https://launchpad.net/lazr.restfulclient/+download?start=10
6 -f http://code.google.com/p/httplib2/downloads/list
7 -f https://launchpad.net/django-pgtools/+download
8+bzr
9 configglue==1.0.1
10 coverage
11 django-openid-auth==0.2
12
13=== modified file 'src/reviewsapp/preflight.py'
14--- src/reviewsapp/preflight.py 2014-07-11 19:05:55 +0000
15+++ src/reviewsapp/preflight.py 2014-07-22 12:34:08 +0000
16@@ -22,6 +22,8 @@
17 __metaclass__ = type
18 __all__ = []
19
20+import logging
21+
22 import launchpadlib
23 import openid
24 import piston.utils
25@@ -33,15 +35,38 @@
26 from reviewsapp.utilities import web_services
27
28
29+logger = logging.getLogger(__name__)
30+
31+
32 class RNRPreflight(Preflight):
33
34- versions = [
35- {'name': 'rnr-server', 'version': reviewsapp.__version__},
36- {'name': 'openid', 'version': openid.__version__},
37- {'name': 'launchpadlib', 'version': launchpadlib.__version__},
38- {'name': 'piston', 'version': piston.utils.__version__},
39- {'name': 'South', 'version': south.__version__},
40- ]
41+ def versions(self):
42+ return [
43+ {'name': 'rnr-server', 'version': reviewsapp.__version__},
44+ {'name': 'bzr-revno', 'version': self.get_bzr_revno()},
45+ {'name': 'openid', 'version': openid.__version__},
46+ {'name': 'launchpadlib', 'version': launchpadlib.__version__},
47+ {'name': 'piston', 'version': piston.utils.__version__},
48+ {'name': 'South', 'version': south.__version__},
49+ ]
50+
51+ def get_bzr_revno(self):
52+ """Current deployed revno (if available)."""
53+ revno = None
54+ try:
55+ from bzrlib.errors import NotBranchError, NoWorkingTree
56+ from bzrlib.workingtree import WorkingTree
57+ try:
58+ t = WorkingTree.open_containing(__file__)[0]
59+ revno = t.branch.revno()
60+ except (NotBranchError, NoWorkingTree):
61+ pass
62+ except Exception:
63+ logger.exception(
64+ "bzrlib and branch available but revno retrieval failed.")
65+ except ImportError:
66+ pass
67+ return revno
68
69 def authenticate(self, request):
70 return (request.user.is_authenticated() and
71
72=== modified file 'src/reviewsapp/tests/test_preflight.py'
73--- src/reviewsapp/tests/test_preflight.py 2013-02-28 17:56:56 +0000
74+++ src/reviewsapp/tests/test_preflight.py 2014-07-22 12:34:08 +0000
75@@ -25,12 +25,14 @@
76 __metaclass__ = type
77 __all__ = [
78 'TestPreflight',
79+ 'TestGetBZRRevno',
80 ]
81
82 from mock import patch
83
84 from django.contrib.auth.models import Group
85
86+from reviewsapp.preflight import RNRPreflight
87 from reviewsapp.tests.factory import TestCaseWithFactory
88
89
90@@ -77,7 +79,46 @@
91 self.assertEqual(200, response.status_code)
92 libs = set([x['name'] for x in response.context[0]['versions']])
93 expected = set([
94- 'rnr-server', 'openid', 'Platform', 'Python', 'Django', 'piston',
95- 'launchpadlib', 'South', 'preflight',
96+ 'rnr-server', 'bzr-revno', 'openid', 'Platform', 'Python',
97+ 'Django', 'piston', 'launchpadlib', 'South', 'preflight',
98 ])
99 self.assertEqual(expected, libs)
100+
101+
102+class TestGetBZRRevno(TestCaseWithFactory):
103+
104+ def setUp(self):
105+ super(TestGetBZRRevno, self).setUp()
106+ self.preflight = RNRPreflight()
107+
108+ def test_success(self):
109+ self.assertIsNotNone(self.preflight.get_bzr_revno())
110+
111+ def test_no_bzrlib_returns_none(self):
112+ patch_name = 'bzrlib.workingtree.WorkingTree.open_containing'
113+ with patch(patch_name) as mock_open_containing:
114+ mock_open_containing.side_effect = ImportError
115+ self.assertIsNone(self.preflight.get_bzr_revno())
116+
117+ def test_no_branch_returns_none(self):
118+ from bzrlib.errors import NotBranchError
119+ patch_name = 'bzrlib.workingtree.WorkingTree.open_containing'
120+ with patch(patch_name) as mock_open_containing:
121+ mock_open_containing.side_effect = NotBranchError
122+ self.assertIsNone(self.preflight.get_bzr_revno())
123+
124+ def test_no_working_tree_returns_none(self):
125+ from bzrlib.errors import NoWorkingTree
126+ patch_name = 'bzrlib.workingtree.WorkingTree.open_containing'
127+ with patch(patch_name) as mock_open_containing:
128+ mock_open_containing.side_effect = NoWorkingTree
129+ self.assertIsNone(self.preflight.get_bzr_revno())
130+
131+ @patch('reviewsapp.preflight.logger')
132+ @patch('bzrlib.workingtree.WorkingTree.open_containing')
133+ def test_bzrlib_working_tree_and_branch_but_error(
134+ self, mock_open_containing, mock_logger):
135+ mock_open_containing.side_effect = IOError
136+ self.assertIsNone(self.preflight.get_bzr_revno())
137+ mock_logger.exception.assert_called_with(
138+ "bzrlib and branch available but revno retrieval failed.")

Subscribers

People subscribed via source and target branches