Merge lp:~cjwatson/launchpad/codeimport-source-details-refactor into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18230
Proposed branch: lp:~cjwatson/launchpad/codeimport-source-details-refactor
Merge into: lp:launchpad
Prerequisite: lp:~cjwatson/launchpad/codeimport-git-auth
Diff against target: 211 lines (+51/-55)
5 files modified
lib/lp/code/xmlrpc/codeimportscheduler.py (+3/-3)
lib/lp/code/xmlrpc/tests/test_codeimportscheduler.py (+3/-3)
lib/lp/codehosting/codeimport/tests/test_worker.py (+37/-42)
lib/lp/codehosting/codeimport/tests/test_workermonitor.py (+4/-4)
lib/lp/codehosting/codeimport/worker.py (+4/-3)
To merge this branch: bzr merge lp:~cjwatson/launchpad/codeimport-source-details-refactor
Reviewer Review Type Date Requested Status
William Grant (community) code Approve
Review via email: mp+308117@code.launchpad.net

Commit message

Refactor CodeImportSourceDetails.fromCodeImport to CodeImportSourceDetails.fromCodeImportJob, to make it easier to issue macaroons in future.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/code/xmlrpc/codeimportscheduler.py'
2--- lib/lp/code/xmlrpc/codeimportscheduler.py 2015-07-08 16:05:11 +0000
3+++ lib/lp/code/xmlrpc/codeimportscheduler.py 2016-10-11 13:11:47 +0000
4@@ -1,4 +1,4 @@
5-# Copyright 2009 Canonical Ltd. This software is licensed under the
6+# Copyright 2009-2016 Canonical Ltd. This software is licensed under the
7 # GNU Affero General Public License version 3 (see the file LICENSE).
8
9 """The code import scheduler XML-RPC API."""
10@@ -67,8 +67,8 @@
11 @return_fault
12 def _getImportDataForJobID(self, job_id):
13 job = self._getJob(job_id)
14- arguments = CodeImportSourceDetails.fromCodeImport(
15- job.code_import).asArguments()
16+ arguments = CodeImportSourceDetails.fromCodeImportJob(
17+ job).asArguments()
18 branch = job.code_import.branch
19 branch_url = canonical_url(branch)
20 log_file_name = '%s.log' % branch.unique_name[1:].replace('/', '-')
21
22=== modified file 'lib/lp/code/xmlrpc/tests/test_codeimportscheduler.py'
23--- lib/lp/code/xmlrpc/tests/test_codeimportscheduler.py 2011-12-30 06:14:56 +0000
24+++ lib/lp/code/xmlrpc/tests/test_codeimportscheduler.py 2016-10-11 13:11:47 +0000
25@@ -1,4 +1,4 @@
26-# Copyright 2010 Canonical Ltd. This software is licensed under the
27+# Copyright 2010-2016 Canonical Ltd. This software is licensed under the
28 # GNU Affero General Public License version 3 (see the file LICENSE).
29
30 """Test for the methods of `ICodeImportScheduler`."""
31@@ -63,8 +63,8 @@
32 code_import = removeSecurityProxy(code_import_job).code_import
33 code_import_arguments, branch_url, log_file_name = \
34 self.api.getImportDataForJobID(code_import_job.id)
35- import_as_arguments = CodeImportSourceDetails.fromCodeImport(
36- code_import).asArguments()
37+ import_as_arguments = CodeImportSourceDetails.fromCodeImportJob(
38+ code_import_job).asArguments()
39 expected_log_file_name = '%s.log' % (
40 code_import.branch.unique_name[1:].replace('/', '-'))
41 self.assertEqual(
42
43=== modified file 'lib/lp/codehosting/codeimport/tests/test_worker.py'
44--- lib/lp/codehosting/codeimport/tests/test_worker.py 2016-10-05 14:08:09 +0000
45+++ lib/lp/codehosting/codeimport/tests/test_worker.py 2016-10-11 13:11:47 +0000
46@@ -48,6 +48,7 @@
47 import subvertpy
48 import subvertpy.client
49 import subvertpy.ra
50+from testtools.matchers import Equals
51
52 from lp.app.enums import InformationType
53 from lp.code.interfaces.codehosting import (
54@@ -1394,70 +1395,64 @@
55 # Use an admin user as we aren't checking edit permissions here.
56 TestCaseWithFactory.setUp(self, 'admin@canonical.com')
57
58+ def assertArgumentsMatch(self, code_import, matcher):
59+ job = self.factory.makeCodeImportJob(code_import=code_import)
60+ details = CodeImportSourceDetails.fromCodeImportJob(job)
61+ self.assertThat(details.asArguments(), matcher)
62+
63 def test_bzr_arguments(self):
64 code_import = self.factory.makeCodeImport(
65 bzr_branch_url="http://example.com/foo")
66- arguments = CodeImportSourceDetails.fromCodeImport(
67- code_import).asArguments()
68- self.assertEquals([
69- str(code_import.branch.id), 'bzr', 'http://example.com/foo'],
70- arguments)
71+ self.assertArgumentsMatch(
72+ code_import, Equals([
73+ str(code_import.branch.id), 'bzr',
74+ 'http://example.com/foo']))
75
76 def test_git_arguments(self):
77 code_import = self.factory.makeCodeImport(
78- git_repo_url="git://git.example.com/project.git")
79- arguments = CodeImportSourceDetails.fromCodeImport(
80- code_import).asArguments()
81- self.assertEquals([
82- str(code_import.branch.id), 'git',
83- 'git://git.example.com/project.git'],
84- arguments)
85+ git_repo_url="git://git.example.com/project.git")
86+ self.assertArgumentsMatch(
87+ code_import, Equals([
88+ str(code_import.branch.id), 'git',
89+ 'git://git.example.com/project.git']))
90
91 def test_cvs_arguments(self):
92 code_import = self.factory.makeCodeImport(
93 cvs_root=':pserver:foo@example.com/bar', cvs_module='bar')
94- arguments = CodeImportSourceDetails.fromCodeImport(
95- code_import).asArguments()
96- self.assertEquals([
97- str(code_import.branch.id), 'cvs',
98- ':pserver:foo@example.com/bar', 'bar'],
99- arguments)
100+ self.assertArgumentsMatch(
101+ code_import, Equals([
102+ str(code_import.branch.id), 'cvs',
103+ ':pserver:foo@example.com/bar', 'bar']))
104
105 def test_bzr_svn_arguments(self):
106 code_import = self.factory.makeCodeImport(
107- svn_branch_url='svn://svn.example.com/trunk')
108- arguments = CodeImportSourceDetails.fromCodeImport(
109- code_import).asArguments()
110- self.assertEquals([
111- str(code_import.branch.id), 'bzr-svn',
112- 'svn://svn.example.com/trunk'],
113- arguments)
114+ svn_branch_url='svn://svn.example.com/trunk')
115+ self.assertArgumentsMatch(
116+ code_import, Equals([
117+ str(code_import.branch.id), 'bzr-svn',
118+ 'svn://svn.example.com/trunk']))
119
120 def test_bzr_stacked(self):
121 devfocus = self.factory.makeAnyBranch()
122 code_import = self.factory.makeCodeImport(
123- bzr_branch_url='bzr://bzr.example.com/foo',
124- context=devfocus.target.context)
125+ bzr_branch_url='bzr://bzr.example.com/foo',
126+ context=devfocus.target.context)
127 code_import.branch.stacked_on = devfocus
128- details = CodeImportSourceDetails.fromCodeImport(
129- code_import)
130- self.assertEquals([
131- str(code_import.branch.id), 'bzr',
132- 'bzr://bzr.example.com/foo',
133- compose_public_url('http', branch_id_alias(devfocus))],
134- details.asArguments())
135+ self.assertArgumentsMatch(
136+ code_import, Equals([
137+ str(code_import.branch.id), 'bzr',
138+ 'bzr://bzr.example.com/foo',
139+ compose_public_url('http', branch_id_alias(devfocus))]))
140
141 def test_bzr_stacked_private(self):
142 # Code imports can't be stacked on private branches.
143 devfocus = self.factory.makeAnyBranch(
144 information_type=InformationType.USERDATA)
145 code_import = self.factory.makeCodeImport(
146- context=devfocus.target.context,
147- bzr_branch_url='bzr://bzr.example.com/foo')
148+ context=devfocus.target.context,
149+ bzr_branch_url='bzr://bzr.example.com/foo')
150 code_import.branch.stacked_on = devfocus
151- details = CodeImportSourceDetails.fromCodeImport(
152- code_import)
153- self.assertEquals([
154- str(code_import.branch.id), 'bzr',
155- 'bzr://bzr.example.com/foo'],
156- details.asArguments())
157+ self.assertArgumentsMatch(
158+ code_import, Equals([
159+ str(code_import.branch.id), 'bzr',
160+ 'bzr://bzr.example.com/foo']))
161
162=== modified file 'lib/lp/codehosting/codeimport/tests/test_workermonitor.py'
163--- lib/lp/codehosting/codeimport/tests/test_workermonitor.py 2015-09-05 14:39:17 +0000
164+++ lib/lp/codehosting/codeimport/tests/test_workermonitor.py 2016-10-11 13:11:47 +0000
165@@ -1,4 +1,4 @@
166-# Copyright 2009-2015 Canonical Ltd. This software is licensed under the
167+# Copyright 2009-2016 Canonical Ltd. This software is licensed under the
168 # GNU Affero General Public License version 3 (see the file LICENSE).
169
170 """Tests for the CodeImportWorkerMonitor and related classes."""
171@@ -754,15 +754,15 @@
172 returns the job. It also makes sure there are no branches or foreign
173 trees in the default stores to interfere with processing this job.
174 """
175- source_details = CodeImportSourceDetails.fromCodeImport(code_import)
176- clean_up_default_stores_for_import(source_details)
177- self.addCleanup(clean_up_default_stores_for_import, source_details)
178 if code_import.review_status != CodeImportReviewStatus.REVIEWED:
179 code_import.updateFromData(
180 {'review_status': CodeImportReviewStatus.REVIEWED},
181 self.factory.makePerson())
182 job = getUtility(ICodeImportJobSet).getJobForMachine('machine', 10)
183 self.assertEqual(code_import, job.code_import)
184+ source_details = CodeImportSourceDetails.fromCodeImportJob(job)
185+ clean_up_default_stores_for_import(source_details)
186+ self.addCleanup(clean_up_default_stores_for_import, source_details)
187 return job
188
189 def assertCodeImportResultCreated(self, code_import):
190
191=== modified file 'lib/lp/codehosting/codeimport/worker.py'
192--- lib/lp/codehosting/codeimport/worker.py 2015-06-12 14:20:12 +0000
193+++ lib/lp/codehosting/codeimport/worker.py 2016-10-11 13:11:47 +0000
194@@ -1,4 +1,4 @@
195-# Copyright 2009-2015 Canonical Ltd. This software is licensed under the
196+# Copyright 2009-2016 Canonical Ltd. This software is licensed under the
197 # GNU Affero General Public License version 3 (see the file LICENSE).
198
199 """The code import worker. This imports code from foreign repositories."""
200@@ -308,8 +308,9 @@
201 branch_id, rcstype, url, cvs_root, cvs_module, stacked_on_url)
202
203 @classmethod
204- def fromCodeImport(cls, code_import):
205- """Convert a `CodeImport` to an instance."""
206+ def fromCodeImportJob(cls, job):
207+ """Convert a `CodeImportJob` to an instance."""
208+ code_import = job.code_import
209 branch = code_import.branch
210 if branch.stacked_on is not None and not branch.stacked_on.private:
211 stacked_path = branch_id_alias(branch.stacked_on)