Merge lp:~jelmer/launchpad/no-code-import-approval into lp:launchpad

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merged at revision: 13821
Proposed branch: lp:~jelmer/launchpad/no-code-import-approval
Merge into: lp:launchpad
Diff against target: 581 lines (+81/-125)
13 files modified
lib/lp/code/doc/codeimport-event.txt (+5/-5)
lib/lp/code/doc/codeimport.txt (+1/-5)
lib/lp/code/model/codeimport.py (+4/-8)
lib/lp/code/model/tests/test_branch.py (+0/-2)
lib/lp/code/model/tests/test_codeimport.py (+12/-40)
lib/lp/code/model/tests/test_codeimportjob.py (+16/-11)
lib/lp/code/stories/codeimport/xx-admin-codeimport.txt (+3/-20)
lib/lp/code/stories/codeimport/xx-create-codeimport.txt (+9/-4)
lib/lp/code/stories/codeimport/xx-edit-codeimport.txt (+3/-1)
lib/lp/code/stories/webservice/xx-code-import.txt (+2/-2)
lib/lp/testing/factory.py (+11/-13)
lib/lp/testing/tests/test_factory.py (+4/-3)
utilities/sourcedeps.cache (+11/-11)
To merge this branch: bzr merge lp:~jelmer/launchpad/no-code-import-approval
Reviewer Review Type Date Requested Status
Benji York (community) code Approve
Review via email: mp+73187@code.launchpad.net

This proposal supersedes a proposal from 2011-08-28.

Commit message

[r=benji][bug=418932] Remove the requirement for svn and cvs imports to be pre-approved by a Launchpad admin.

Description of the change

Remove the requirement for svn and cvs imports to be pre-approved by a Launchpad admin, fixing bug #418932.

To post a comment you must log in.
Revision history for this message
Benji York (benji) wrote :

This branch looks fine.

It's unfortunate that the state is named "reviewed" when no one has
actually reviewed the import. Perhaps we could rename that status to
something like "pending" or "awaiting import" and remove the notion of
approval altogether.

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/doc/codeimport-event.txt'
2--- lib/lp/code/doc/codeimport-event.txt 2010-10-18 22:24:59 +0000
3+++ lib/lp/code/doc/codeimport-event.txt 2011-08-30 00:09:34 +0000
4@@ -120,7 +120,7 @@
5 >>> print_items(svn_create_event)
6 CODE_IMPORT <muted>
7 OWNER ...
8- REVIEW_STATUS u'NEW'
9+ REVIEW_STATUS u'REVIEWED'
10 ASSIGNEE None
11 UPDATE_INTERVAL None
12 URL u'svn://svn.example.com/trunk'
13@@ -144,7 +144,7 @@
14 >>> print_items(cvs_create_event)
15 CODE_IMPORT <muted>
16 OWNER ...
17- REVIEW_STATUS u'NEW'
18+ REVIEW_STATUS u'REVIEWED'
19 ASSIGNEE None
20 UPDATE_INTERVAL None
21 CVS_ROOT u':pserver:anonymous@cvs.example.com:/cvsroot'
22@@ -206,7 +206,7 @@
23
24 >>> from lp.code.enums import CodeImportReviewStatus
25 >>> removeSecurityProxy(svn_import).review_status = (
26- ... CodeImportReviewStatus.REVIEWED)
27+ ... CodeImportReviewStatus.SUSPENDED)
28
29 After applying changes, the newModify method can create an event that
30 details the changes that have been applied.
31@@ -234,8 +234,8 @@
32 >>> print_items(modify_event)
33 CODE_IMPORT <muted>
34 OWNER ...
35- REVIEW_STATUS u'REVIEWED'
36- OLD_REVIEW_STATUS u'NEW'
37+ REVIEW_STATUS u'SUSPENDED'
38+ OLD_REVIEW_STATUS u'REVIEWED'
39 ASSIGNEE None
40 UPDATE_INTERVAL None
41 URL u'svn://svn.example.com/trunk'
42
43=== modified file 'lib/lp/code/doc/codeimport.txt'
44--- lib/lp/code/doc/codeimport.txt 2011-06-28 17:13:42 +0000
45+++ lib/lp/code/doc/codeimport.txt 2011-08-30 00:09:34 +0000
46@@ -243,7 +243,7 @@
47 >>> code_import = factory.makeProductCodeImport(
48 ... svn_branch_url='http://svn.example.com/project')
49 >>> print code_import.review_status.title
50- Pending Review
51+ Reviewed
52
53 When an import operator updates the code import emails are sent out to
54 the branch subscribers and members of VCS Imports that describe the
55@@ -275,8 +275,6 @@
56 To: david.allouche@canonical.com, ...
57 Subject: Code import product.../name... status: Reviewed
58 <BLANKLINE>
59- The import has been approved and an import will start shortly.
60- <BLANKLINE>
61 ... is now being imported from:
62 http://svn.example.com/project/trunk
63 instead of:
64@@ -293,8 +291,6 @@
65 To: import@example.com
66 Subject: Code import product.../name... status: Reviewed
67 <BLANKLINE>
68- The import has been approved and an import will start shortly.
69- <BLANKLINE>
70 ... is now being imported from:
71 http://svn.example.com/project/trunk
72 instead of:
73
74=== modified file 'lib/lp/code/model/codeimport.py'
75--- lib/lp/code/model/codeimport.py 2011-08-28 07:29:11 +0000
76+++ lib/lp/code/model/codeimport.py 2011-08-30 00:09:34 +0000
77@@ -198,7 +198,8 @@
78 setattr(self, name, value)
79 if 'review_status' in data:
80 if data['review_status'] == CodeImportReviewStatus.REVIEWED:
81- CodeImportJobWorkflow().newJob(self)
82+ if self.import_job is None:
83+ CodeImportJobWorkflow().newJob(self)
84 else:
85 self._removeJob()
86 event = event_set.newModify(self, user, token)
87@@ -265,13 +266,8 @@
88 "Don't know how to sanity check source details for unknown "
89 "rcs_type %s" % rcs_type)
90 if review_status is None:
91- # Auto approve git and hg imports.
92- if rcs_type in (
93- RevisionControlSystems.GIT, RevisionControlSystems.HG,
94- RevisionControlSystems.BZR):
95- review_status = CodeImportReviewStatus.REVIEWED
96- else:
97- review_status = CodeImportReviewStatus.NEW
98+ # Auto approve imports.
99+ review_status = CodeImportReviewStatus.REVIEWED
100 if not target.supports_code_imports:
101 raise AssertionError("%r doesn't support code imports" % target)
102 if owner is None:
103
104=== modified file 'lib/lp/code/model/tests/test_branch.py'
105--- lib/lp/code/model/tests/test_branch.py 2011-08-25 22:58:14 +0000
106+++ lib/lp/code/model/tests/test_branch.py 2011-08-30 00:09:34 +0000
107@@ -1510,7 +1510,6 @@
108 """break_links allows deleting a code import branch."""
109 code_import = self.factory.makeCodeImport()
110 code_import_id = code_import.id
111- self.factory.makeCodeImportJob(code_import)
112 code_import.branch.destroySelf(break_references=True)
113 self.assertRaises(
114 SQLObjectNotFound, CodeImport.get, code_import_id)
115@@ -1575,7 +1574,6 @@
116 """DeleteCodeImport.__call__ must delete the CodeImport."""
117 code_import = self.factory.makeCodeImport()
118 code_import_id = code_import.id
119- self.factory.makeCodeImportJob(code_import)
120 DeleteCodeImport(code_import)()
121 self.assertRaises(
122 SQLObjectNotFound, CodeImport.get, code_import_id)
123
124=== modified file 'lib/lp/code/model/tests/test_codeimport.py'
125--- lib/lp/code/model/tests/test_codeimport.py 2011-08-28 08:36:14 +0000
126+++ lib/lp/code/model/tests/test_codeimport.py 2011-08-30 00:09:34 +0000
127@@ -56,20 +56,6 @@
128
129 layer = DatabaseFunctionalLayer
130
131- def test_new_svn_import(self):
132- """A new subversion code import should have NEW status."""
133- code_import = CodeImportSet().new(
134- registrant=self.factory.makePerson(),
135- target=IBranchTarget(self.factory.makeProduct()),
136- branch_name='imported',
137- rcs_type=RevisionControlSystems.SVN,
138- url=self.factory.getUniqueURL())
139- self.assertEqual(
140- CodeImportReviewStatus.NEW,
141- code_import.review_status)
142- # No job is created for the import.
143- self.assertIs(None, code_import.import_job)
144-
145 def test_new_svn_import_svn_scheme(self):
146 """A subversion import can use the svn:// scheme."""
147 code_import = CodeImportSet().new(
148@@ -79,10 +65,10 @@
149 rcs_type=RevisionControlSystems.SVN,
150 url=self.factory.getUniqueURL(scheme="svn"))
151 self.assertEqual(
152- CodeImportReviewStatus.NEW,
153+ CodeImportReviewStatus.REVIEWED,
154 code_import.review_status)
155 # No job is created for the import.
156- self.assertIs(None, code_import.import_job)
157+ self.assertIsNot(None, code_import.import_job)
158
159 def test_reviewed_svn_import(self):
160 """A specific review status can be set for a new import."""
161@@ -92,30 +78,15 @@
162 branch_name='imported',
163 rcs_type=RevisionControlSystems.SVN,
164 url=self.factory.getUniqueURL(),
165- review_status=CodeImportReviewStatus.REVIEWED)
166+ review_status=None)
167 self.assertEqual(
168 CodeImportReviewStatus.REVIEWED,
169 code_import.review_status)
170 # A job is created for the import.
171 self.assertIsNot(None, code_import.import_job)
172
173- def test_new_cvs_import(self):
174- """A new CVS code import should have NEW status."""
175- code_import = CodeImportSet().new(
176- registrant=self.factory.makePerson(),
177- target=IBranchTarget(self.factory.makeProduct()),
178- branch_name='imported',
179- rcs_type=RevisionControlSystems.CVS,
180- cvs_root=self.factory.getUniqueURL(),
181- cvs_module='module')
182- self.assertEqual(
183- CodeImportReviewStatus.NEW,
184- code_import.review_status)
185- # No job is created for the import.
186- self.assertIs(None, code_import.import_job)
187-
188- def test_reviewed_cvs_import(self):
189- """A specific review status can be set for a new import."""
190+ def test_cvs_import_reviewed(self):
191+ """A new CVS code import should have REVIEWED status."""
192 code_import = CodeImportSet().new(
193 registrant=self.factory.makePerson(),
194 target=IBranchTarget(self.factory.makeProduct()),
195@@ -123,7 +94,7 @@
196 rcs_type=RevisionControlSystems.CVS,
197 cvs_root=self.factory.getUniqueURL(),
198 cvs_module='module',
199- review_status=CodeImportReviewStatus.REVIEWED)
200+ review_status=None)
201 self.assertEqual(
202 CodeImportReviewStatus.REVIEWED,
203 code_import.review_status)
204@@ -275,8 +246,7 @@
205 """Ensure deleting CodeImport objects deletes associated jobs."""
206 code_import = self.factory.makeCodeImport()
207 login_person(getUtility(ILaunchpadCelebrities).vcs_imports.teamowner)
208- code_import_job = self.factory.makeCodeImportJob(code_import)
209- job_id = code_import_job.id
210+ job_id = code_import.import_job.id
211 CodeImportJobSet().getById(job_id)
212 job = CodeImportJobSet().getById(job_id)
213 assert job is not None
214@@ -644,7 +614,8 @@
215 # tryFailingImportAgain only succeeds for imports that are FAILING.
216 outcomes = {}
217 for status in CodeImportReviewStatus.items:
218- code_import = self.factory.makeCodeImport()
219+ code_import = self.factory.makeCodeImport(
220+ review_status=CodeImportReviewStatus.NEW)
221 code_import.updateFromData(
222 {'review_status': status}, self.factory.makePerson())
223 try:
224@@ -726,9 +697,10 @@
225 self.assertEqual(requester, e.requesting_user)
226
227 def test_exception_on_disabled(self):
228- # get an SVN request, which isn't reviewed by default
229+ # get an SVN request which is suspended
230 code_import = self.factory.makeCodeImport(
231- svn_branch_url=self.factory.getUniqueURL())
232+ svn_branch_url=self.factory.getUniqueURL(),
233+ review_status=CodeImportReviewStatus.SUSPENDED)
234 requester = self.factory.makePerson()
235 # which leads to an exception if we try and ask for an import
236 self.assertRaises(
237
238=== modified file 'lib/lp/code/model/tests/test_codeimportjob.py'
239--- lib/lp/code/model/tests/test_codeimportjob.py 2011-06-29 12:00:39 +0000
240+++ lib/lp/code/model/tests/test_codeimportjob.py 2011-08-30 00:09:34 +0000
241@@ -115,7 +115,8 @@
242
243 def makeJob(self, state, date_due_delta, requesting_user=None):
244 """Create a CodeImportJob object from a spec."""
245- code_import = self.factory.makeCodeImport()
246+ code_import = self.factory.makeCodeImport(
247+ review_status=CodeImportReviewStatus.NEW)
248 job = self.factory.makeCodeImportJob(code_import)
249 if state == CodeImportJobState.RUNNING:
250 getUtility(ICodeImportJobWorkflow).startJob(job, self.machine)
251@@ -387,11 +388,12 @@
252 def test_wrongReviewStatus(self):
253 # CodeImportJobWorkflow.newJob fails if the CodeImport review_status
254 # is different from REVIEWED.
255- new_import = self.factory.makeCodeImport()
256+ new_import = self.factory.makeCodeImport(
257+ review_status=CodeImportReviewStatus.SUSPENDED)
258 branch_name = new_import.branch.unique_name
259 # Testing newJob failure.
260 self.assertFailure(
261- "Review status of %s is not REVIEWED: NEW" % (branch_name,),
262+ "Review status of %s is not REVIEWED: SUSPENDED" % (branch_name,),
263 getUtility(ICodeImportJobWorkflow).newJob, new_import)
264
265 def test_existingJob(self):
266@@ -417,14 +419,17 @@
267 # If there is no CodeImportResult for the CodeImport, then the new
268 # CodeImportJob has date_due set to UTC_NOW.
269 code_import = self.getCodeImportForDateDueTest()
270- job = getUtility(ICodeImportJobWorkflow).newJob(code_import)
271- self.assertSqlAttributeEqualsDate(job, 'date_due', UTC_NOW)
272+ self.assertSqlAttributeEqualsDate(code_import.import_job, 'date_due',
273+ UTC_NOW)
274
275 def test_dateDueRecentPreviousResult(self):
276 # If there is a CodeImportResult for the CodeImport that is more
277 # recent than the effective_update_interval, then the new
278 # CodeImportJob has date_due set in the future.
279 code_import = self.getCodeImportForDateDueTest()
280+ # A code import job is automatically started when a reviewed code import
281+ # is created. Remove it, so a "clean" one can be created later.
282+ removeSecurityProxy(code_import).import_job.destroySelf()
283 # Create a CodeImportResult that started a long time ago. This one
284 # must be superseded by the more recent one created below.
285 machine = self.factory.makeCodeImportMachine()
286@@ -469,8 +474,8 @@
287 date_job_started=datetime(2000, 1, 1, 12, 0, 0, tzinfo=UTC),
288 date_created=datetime(2000, 1, 1, 12, 5, 0, tzinfo=UTC))
289 # When we create the job, its date due must be set to UTC_NOW.
290- job = getUtility(ICodeImportJobWorkflow).newJob(code_import)
291- self.assertSqlAttributeEqualsDate(job, 'date_due', UTC_NOW)
292+ self.assertSqlAttributeEqualsDate(code_import.import_job, 'date_due',
293+ UTC_NOW)
294
295
296 class TestCodeImportJobWorkflowDeletePendingJob(TestCaseWithFactory,
297@@ -500,7 +505,8 @@
298 def test_noJob(self):
299 # CodeImportJobWorkflow.deletePendingJob fails if the
300 # CodeImport is not associated to a CodeImportJob.
301- new_import = self.factory.makeCodeImport()
302+ new_import = self.factory.makeCodeImport(
303+ review_status=CodeImportReviewStatus.NEW)
304 branch_name = new_import.branch.unique_name
305 # Testing deletePendingJob failure.
306 self.assertFailure(
307@@ -578,7 +584,7 @@
308 # CodeImportJobWorkflow.requestJob sets requesting_user and
309 # date_due if the current date_due is in the future.
310 code_import = self.factory.makeCodeImport()
311- pending_job = self.factory.makeCodeImportJob(code_import)
312+ pending_job = code_import.import_job
313 person = self.factory.makePerson()
314 # Set date_due in the future. ICodeImportJob does not allow setting
315 # date_due, so we must use removeSecurityProxy.
316@@ -877,8 +883,7 @@
317 unchecked_result_fields.difference_update(['log_file', 'status'])
318
319 code_import = self.factory.makeCodeImport()
320- removeSecurityProxy(code_import).review_status = \
321- CodeImportReviewStatus.REVIEWED
322+ removeSecurityProxy(code_import).import_job.destroySelf()
323 self.assertFinishJobPassesThroughJobField(
324 'code_import', 'code_import', code_import)
325 unchecked_result_fields.remove('code_import')
326
327=== modified file 'lib/lp/code/stories/codeimport/xx-admin-codeimport.txt'
328--- lib/lp/code/stories/codeimport/xx-admin-codeimport.txt 2010-04-28 02:49:58 +0000
329+++ lib/lp/code/stories/codeimport/xx-admin-codeimport.txt 2011-08-30 00:09:34 +0000
330@@ -61,9 +61,11 @@
331 ... print extract_text(div)
332 >>> import_browser.open(svn_import_location)
333 >>> print_import_details(import_browser)
334- Import Status: Pending Review
335+ Import Status: Reviewed
336 This branch is an import of the Subversion branch
337 from svn://svn.example.com/fooix/trunk.
338+ The next import is scheduled to run
339+ as soon as possible.
340 Edit import source or review import
341
342
343@@ -76,7 +78,6 @@
344 >>> import_browser.getLink('Edit import source or review import').click()
345 >>> print_submit_buttons(import_browser.contents)
346 Update
347- Approve
348 Mark Invalid
349 Suspend
350 Mark Failing
351@@ -190,24 +191,6 @@
352 The code import has been updated.
353
354
355-Approving an import
356-+++++++++++++++++++
357-
358-When a code import is approved, a pending job is created for it.
359-
360- >>> import_browser.open(svn_import_location + '/+edit-import')
361- >>> import_browser.getControl('Approve').click()
362- >>> print_import_details(import_browser)
363- Import Status: Reviewed
364- ...
365- The next import is scheduled to run as soon as possible.
366- Edit import source or review import
367-
368- >>> for message in get_feedback_messages(import_browser.contents):
369- ... print extract_text(message)
370- The code import has been approved.
371-
372-
373 Invalidating an import
374 ++++++++++++++++++++++
375
376
377=== modified file 'lib/lp/code/stories/codeimport/xx-create-codeimport.txt'
378--- lib/lp/code/stories/codeimport/xx-create-codeimport.txt 2010-09-28 19:25:54 +0000
379+++ lib/lp/code/stories/codeimport/xx-create-codeimport.txt 2011-08-30 00:09:34 +0000
380@@ -72,9 +72,11 @@
381 When the user clicks continue, the import branch is created
382
383 >>> print extract_text(find_tag_by_id(browser.contents, "import-details"))
384- Import Status: Pending Review
385+ Import Status: Reviewed
386 This branch is an import of the Subversion branch
387 from http://svn.example.com/firefox/trunk.
388+ The next import is scheduled to run
389+ as soon as possible.
390 >>> browser.getLink("http://svn.example.com/firefox/trunk")
391 <Link text='http://svn.example.com/firefox/trunk'
392 url='http://svn.example.com/firefox/trunk'>
393@@ -98,9 +100,11 @@
394 >>> browser.getControl('Project').value = "firefox"
395 >>> browser.getControl('Request Import').click()
396 >>> print extract_text(find_tag_by_id(browser.contents, "import-details"))
397- Import Status: Pending Review
398+ Import Status: Reviewed
399 This branch is an import of the Subversion branch
400 from http://user:password@svn.example.com/firefox/trunk.
401+ The next import is scheduled to run
402+ as soon as possible.
403
404
405 Requesting a Git import
406@@ -165,10 +169,11 @@
407 >>> browser.getControl('Request Import').click()
408
409 >>> print extract_text(find_tag_by_id(browser.contents, "import-details"))
410- Import Status: Pending Review
411+ Import Status: Reviewed
412 This branch is an import of the CVS module firefox from
413 :pserver:anonymous@cvs.example.com:/mozilla/cvs.
414-
415+ The next import is scheduled to run
416+ as soon as possible.
417
418 Requesting a CVS import with invalid information
419 ================================================
420
421=== modified file 'lib/lp/code/stories/codeimport/xx-edit-codeimport.txt'
422--- lib/lp/code/stories/codeimport/xx-edit-codeimport.txt 2010-03-18 15:39:58 +0000
423+++ lib/lp/code/stories/codeimport/xx-edit-codeimport.txt 2011-08-30 00:09:34 +0000
424@@ -43,9 +43,11 @@
425 ... print extract_text(div)
426 >>> anon_browser.open(svn_import_location)
427 >>> print_import_details(anon_browser)
428- Import Status: Pending Review
429+ Import Status: Reviewed
430 This branch is an import of the Subversion branch
431 from svn://svn.example.com/fooix/trunk.
432+ The next import is scheduled to run
433+ as soon as possible.
434
435 Because it's an svn:// URL, it doesn't get linkified:
436
437
438=== modified file 'lib/lp/code/stories/webservice/xx-code-import.txt'
439--- lib/lp/code/stories/webservice/xx-code-import.txt 2010-04-16 05:03:03 +0000
440+++ lib/lp/code/stories/webservice/xx-code-import.txt 2011-08-30 00:09:34 +0000
441@@ -55,7 +55,7 @@
442 >>> print representation['branch_link']
443 http://.../~import-owner/scruff/import
444 >>> print representation['review_status']
445- Pending Review
446+ Reviewed
447 >>> print representation['rcs_type']
448 Subversion via CSCVS
449 >>> print representation['url']
450@@ -105,7 +105,7 @@
451 >>> print representation['branch_link']
452 http://.../~import-owner/scruffbuntu/manic/scruff/import
453 >>> print representation['review_status']
454- Pending Review
455+ Reviewed
456 >>> print representation['rcs_type']
457 Subversion via CSCVS
458 >>> print representation['url']
459
460=== modified file 'lib/lp/testing/factory.py'
461--- lib/lp/testing/factory.py 2011-08-29 17:47:36 +0000
462+++ lib/lp/testing/factory.py 2011-08-30 00:09:34 +0000
463@@ -2153,34 +2153,32 @@
464 else:
465 assert rcs_type in (RevisionControlSystems.SVN,
466 RevisionControlSystems.BZR_SVN)
467- code_import = code_import_set.new(
468+ return code_import_set.new(
469 registrant, target, branch_name, rcs_type=rcs_type,
470- url=svn_branch_url)
471+ url=svn_branch_url, review_status=review_status)
472 elif git_repo_url is not None:
473 assert rcs_type in (None, RevisionControlSystems.GIT)
474- code_import = code_import_set.new(
475+ return code_import_set.new(
476 registrant, target, branch_name,
477 rcs_type=RevisionControlSystems.GIT,
478- url=git_repo_url)
479+ url=git_repo_url, review_status=review_status)
480 elif hg_repo_url is not None:
481- code_import = code_import_set.new(
482+ return code_import_set.new(
483 registrant, target, branch_name,
484 rcs_type=RevisionControlSystems.HG,
485- url=hg_repo_url)
486+ url=hg_repo_url, review_status=review_status)
487 elif bzr_branch_url is not None:
488- code_import = code_import_set.new(
489+ return code_import_set.new(
490 registrant, target, branch_name,
491 rcs_type=RevisionControlSystems.BZR,
492- url=bzr_branch_url)
493+ url=bzr_branch_url, review_status=review_status)
494 else:
495 assert rcs_type in (None, RevisionControlSystems.CVS)
496- code_import = code_import_set.new(
497+ return code_import_set.new(
498 registrant, target, branch_name,
499 rcs_type=RevisionControlSystems.CVS,
500- cvs_root=cvs_root, cvs_module=cvs_module)
501- if review_status:
502- removeSecurityProxy(code_import).review_status = review_status
503- return code_import
504+ cvs_root=cvs_root, cvs_module=cvs_module,
505+ review_status=review_status)
506
507 def makeChangelog(self, spn=None, versions=[]):
508 """Create and return a LFA of a valid Debian-style changelog."""
509
510=== modified file 'lib/lp/testing/tests/test_factory.py'
511--- lib/lp/testing/tests/test_factory.py 2011-08-26 04:15:38 +0000
512+++ lib/lp/testing/tests/test_factory.py 2011-08-30 00:09:34 +0000
513@@ -345,15 +345,16 @@
514
515 # makeCodeImport
516 def test_makeCodeImportNoStatus(self):
517- # If makeCodeImport is not given a review status, it defaults to NEW.
518+ # If makeCodeImport is not given a review status,
519+ # it defaults to REVIEWED.
520 code_import = self.factory.makeCodeImport()
521 self.assertEqual(
522- CodeImportReviewStatus.NEW, code_import.review_status)
523+ CodeImportReviewStatus.REVIEWED, code_import.review_status)
524
525 def test_makeCodeImportReviewStatus(self):
526 # If makeCodeImport is given a review status, then that is the status
527 # of the created import.
528- status = CodeImportReviewStatus.REVIEWED
529+ status = CodeImportReviewStatus.SUSPENDED
530 code_import = self.factory.makeCodeImport(review_status=status)
531 self.assertEqual(status, code_import.review_status)
532
533
534=== modified file 'utilities/sourcedeps.cache'
535--- utilities/sourcedeps.cache 2011-08-28 22:55:16 +0000
536+++ utilities/sourcedeps.cache 2011-08-30 00:09:34 +0000
537@@ -1,4 +1,8 @@
538 {
539+ "bzr-builder": [
540+ 68,
541+ "launchpad@pqm.canonical.com-20101123183213-777lz46xgagn1deg"
542+ ],
543 "testresources": [
544 16,
545 "robertc@robertcollins.net-20050911111209-ee5da49011cf936a"
546@@ -27,18 +31,14 @@
547 24,
548 "launchpad@pqm.canonical.com-20100601182722-wo7h2fh0fvyw3aaq"
549 ],
550+ "lpreview": [
551+ 23,
552+ "launchpad@pqm.canonical.com-20090720061538-euyh68ifavhy0pi8"
553+ ],
554 "bzr-git": [
555 259,
556 "launchpad@pqm.canonical.com-20110601140035-gl5merbechngjw5s"
557 ],
558- "loggerhead": [
559- 455,
560- "danilo@canonical.com-20110817125309-2r1fgcrqt5kr5h43"
561- ],
562- "bzr-builder": [
563- 68,
564- "launchpad@pqm.canonical.com-20101123183213-777lz46xgagn1deg"
565- ],
566 "bzr-loom": [
567 49,
568 "launchpad@pqm.canonical.com-20110601122412-54vo3k8yae9i2zve"
569@@ -47,9 +47,9 @@
570 4,
571 "sinzui-20090526164636-1swugzupwvjgomo4"
572 ],
573- "lpreview": [
574- 23,
575- "launchpad@pqm.canonical.com-20090720061538-euyh68ifavhy0pi8"
576+ "loggerhead": [
577+ 455,
578+ "danilo@canonical.com-20110817125309-2r1fgcrqt5kr5h43"
579 ],
580 "difftacular": [
581 6,