Merge lp:~robru/cupstream2distro/auto-discover-manual-sources into lp:cupstream2distro

Proposed by Robert Bruce Park
Status: Merged
Approved by: Robert Bruce Park
Approved revision: 1149
Merged at revision: 1141
Proposed branch: lp:~robru/cupstream2distro/auto-discover-manual-sources
Merge into: lp:cupstream2distro
Diff against target: 141 lines (+34/-6)
3 files modified
citrain/recipes/manager.py (+3/-2)
cupstream2distro/silomanager.py (+10/-3)
tests/unit/test_silomanager.py (+21/-1)
To merge this branch: bzr merge lp:~robru/cupstream2distro/auto-discover-manual-sources
Reviewer Review Type Date Requested Status
Robert Bruce Park (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+273599@code.launchpad.net

Commit message

Jenkins will discover manual sources and fill out the bileto field.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:1147
http://jenkins.qa.ubuntu.com/job/cu2d-choo-choo-ci/819/
Executed test runs:

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/cu2d-choo-choo-ci/819/rebuild

review: Approve (continuous-integration)
1148. By Robert Bruce Park

Get only Pending and Published sources.

1149. By Robert Bruce Park

Tweak.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:1149
http://jenkins.qa.ubuntu.com/job/cu2d-choo-choo-ci/820/
Executed test runs:

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/cu2d-choo-choo-ci/820/rebuild

review: Approve (continuous-integration)
Revision history for this message
Robert Bruce Park (robru) wrote :

Looking great in staging.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'citrain/recipes/manager.py'
2--- citrain/recipes/manager.py 2015-09-24 06:49:54 +0000
3+++ citrain/recipes/manager.py 2015-10-06 19:30:02 +0000
4@@ -71,9 +71,10 @@
5 include_binaries = env.INCLUDE_BINARIES_IN_SYNC == 'true'
6 Sync = BinarySync if include_binaries else SourceSync
7 Source = Sync if self.silo_state.source_archive else Manual
8+ merges = set(self.silo_state.mps)
9 self.types = {
10- Merge: self.names & set(self.silo_state.mps),
11- Source: self.names & set(self.silo_state.sources),
12+ Merge: self.names & merges,
13+ Source: self.names - merges,
14 }
15 if self.silo_state.source_archive:
16 Sync.from_archive = self.silo_state.source_archive
17
18=== modified file 'cupstream2distro/silomanager.py'
19--- cupstream2distro/silomanager.py 2015-10-05 19:25:59 +0000
20+++ cupstream2distro/silomanager.py 2015-10-06 19:30:02 +0000
21@@ -340,7 +340,7 @@
22 for field in MANDATORY:
23 if not getattr(self, '_' + field, None):
24 raise PrepError('Field "{}" is mandatory.'.format(field))
25- if not (self._merge_proposals or self._sources or self._sync_request):
26+ if not (self._merge_proposals or self.sources or self._sync_request):
27 raise PrepError('Need either merges, sources, or a sync.')
28 if self._distribution not in SILO_NAME_LIST:
29 raise PrepError('{} is unsupported.'.format(self._distribution))
30@@ -392,6 +392,7 @@
31 request_id=self.requestid,
32 status=self.status,
33 siloname=self.siloname or self._siloname,
34+ sources=' '.join(sorted(self.sources)),
35 )
36 bileto_comment(
37 author=env.BUILD_USER_ID or 'ci-train-bot',
38@@ -512,10 +513,16 @@
39 def sources(self):
40 """Identify the manual source packages configured for this silo."""
41 archive = self.sync_request.partition(',')[0]
42- sources = splitter(self._sources)
43+ sources = set(splitter(self._sources))
44 if not sources and archive.isdigit():
45 return self.load_source_sync_sources(int(archive))
46- return sources
47+ inppa = {src.source_package_name
48+ for src in self.ppa.getPublishedSources(
49+ distro_series=self.series)
50+ if src.status.startswith('P')}
51+ log_value_of.sources('Bileto says')
52+ log_value_of.inppa('PPA has')
53+ return sources | inppa
54
55 @memoize
56 def load_source_sync_sources(self, silonum):
57
58=== modified file 'tests/unit/test_silomanager.py'
59--- tests/unit/test_silomanager.py 2015-10-05 19:25:59 +0000
60+++ tests/unit/test_silomanager.py 2015-10-06 19:30:02 +0000
61@@ -33,6 +33,7 @@
62 from cupstream2distro.errors import PrepError
63
64
65+SOURCES = 'bar bat foo zing'.split()
66 MPS = dict(
67 foo=[Mock(self_link='https://api.launchpad.net/devel/foomp',
68 web_link='https://launchpad.net/foomp')],
69@@ -447,6 +448,7 @@
70 with self.assertRaisesRegexp(PrepError, '"landers" is mandatory'):
71 self.state.validate_bileto()
72
73+ @patch('cupstream2distro.silomanager.SiloState.sources', [])
74 def test_silostate_validate_what_to_do(self):
75 """Raise PrepError when bileto is missing at least one thing to do."""
76 self.state._merge_proposals = ''
77@@ -481,6 +483,7 @@
78 state.load_bileto()
79 self.assertFalse(vb_mock.called)
80
81+ @patch('cupstream2distro.silomanager.SiloState.sources', SOURCES)
82 @patch('cupstream2distro.silomanager.SiloState.requestid', '121')
83 @patch('cupstream2distro.silomanager.SiloState.dest', Mock())
84 @patch('cupstream2distro.silomanager.SiloState.mps', MPS)
85@@ -533,6 +536,7 @@
86 call().lp_save(),
87 ])
88
89+ @patch('cupstream2distro.silomanager.SiloState.sources', [])
90 @patch('cupstream2distro.silomanager.SiloState.requestid', '121')
91 @patch('cupstream2distro.silomanager.BILETO_API', 'example.com')
92 @patch('cupstream2distro.silomanager.COMMENT_API', 'comment.com')
93@@ -558,6 +562,7 @@
94 @patch('cupstream2distro.silomanager.SiloState.requestid', '121')
95 @patch('cupstream2distro.silomanager.BILETO_API', 'example.com')
96 @patch('cupstream2distro.silomanager.COMMENT_API', 'comment.com')
97+ @patch('cupstream2distro.silomanager.SiloState.sources', [])
98 @patch('cupstream2distro.silomanager.requests')
99 @patch('cupstream2distro.silomanager.logging')
100 def test_silostate_push_to_bileto_no_response(self, log_mock, req_mock):
101@@ -569,6 +574,7 @@
102 call('Failed to contact Bileto: token=XXX'),
103 ])
104
105+ @patch('cupstream2distro.silomanager.SiloState.sources', [])
106 @patch('cupstream2distro.silomanager.SiloState.requestid', '121')
107 @patch('cupstream2distro.silomanager.BILETO_API', 'example.com')
108 @patch('cupstream2distro.silomanager.COMMENT_API', 'comment.com')
109@@ -611,6 +617,20 @@
110 self.assertEqual(self.state.sources, ss_mock.return_value.all_projects)
111 ss_mock.assert_called_once_with('ubuntu/landing-005')
112
113+ @patch('cupstream2distro.silomanager.SiloState.series', Mock())
114+ @patch('cupstream2distro.silomanager.SiloState.ppa')
115+ def test_silostate_sources_inppa(self, ppa_mock):
116+ """Confirm we can grab sources from PPA."""
117+ self.state._bileto.update(sources='preserved')
118+ ppa_mock.getPublishedSources.return_value = [
119+ Mock(source_package_name='bleep', status='Pending'),
120+ Mock(source_package_name='blorp', status='Published'),
121+ Mock(source_package_name='nawp', status='Deleted'),
122+ ]
123+ self.assertEqual(self.state.sources, {'preserved', 'bleep', 'blorp'})
124+ ppa_mock.getPublishedSources.assert_called_once_with(
125+ distro_series=self.state.series)
126+
127 def test_silostate_dual(self):
128 """Ensure that dual property reflects correct series."""
129 self.state._bileto.update(series='wily+vivid')
130@@ -685,10 +705,10 @@
131 self.assertEqual(
132 self.state.published_versions, 'bar=5.0 foo=1.0,1.0~vivid')
133
134+ @patch('cupstream2distro.silomanager.SiloState.sources', ['foobar'])
135 @patch('cupstream2distro.silomanager.SiloState.mps', dict(merger=[]))
136 def test_silostate_all_projects(self):
137 """List all projects including MPs, source uploads, and syncs."""
138- self.state._bileto['sources'] = 'foobar'
139 self.assertEqual(self.state.all_projects, ['foobar', 'merger'])
140
141 def test_silostate_booleans(self):

Subscribers

People subscribed via source and target branches