Merge lp:~mwhudson/launchpad/bzr-2.1c1-update into lp:launchpad

Proposed by Michael Hudson-Doyle
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~mwhudson/launchpad/bzr-2.1c1-update
Merge into: lp:launchpad
Diff against target: 1289 lines (+216/-170)
39 files modified
bzrplugins/lpserve.py (+2/-2)
cronscripts/mpcreationjobs.py (+2/-2)
cronscripts/rosetta-branches.py (+2/-2)
cronscripts/sendbranchmail.py (+2/-2)
lib/canonical/launchpad/webapp/tests/test_errorlog.py (+1/-0)
lib/lp/code/mail/codehandler.py (+2/-2)
lib/lp/code/mail/tests/test_codehandler.py (+2/-2)
lib/lp/code/model/branchjob.py (+4/-5)
lib/lp/code/model/branchmergeproposaljob.py (+4/-4)
lib/lp/code/model/directbranchcommit.py (+2/-2)
lib/lp/codehosting/bzrutils.py (+2/-2)
lib/lp/codehosting/codeimport/tests/servers.py (+6/-6)
lib/lp/codehosting/codeimport/tests/test_foreigntree.py (+4/-4)
lib/lp/codehosting/codeimport/tests/test_worker.py (+8/-8)
lib/lp/codehosting/codeimport/tests/test_workermonitor.py (+16/-10)
lib/lp/codehosting/puller/tests/test_acceptance.py (+4/-4)
lib/lp/codehosting/puller/tests/test_worker.py (+2/-4)
lib/lp/codehosting/puller/tests/test_worker_formats.py (+0/-5)
lib/lp/codehosting/puller/worker.py (+2/-2)
lib/lp/codehosting/scanner/branch_scanner.py (+3/-2)
lib/lp/codehosting/scanner/fixture.py (+17/-1)
lib/lp/codehosting/scanner/tests/test_bzrsync.py (+6/-6)
lib/lp/codehosting/sftp.py (+1/-1)
lib/lp/codehosting/sshserver/tests/test_logging.py (+0/-18)
lib/lp/codehosting/tests/servers.py (+2/-2)
lib/lp/codehosting/tests/test_acceptance.py (+4/-4)
lib/lp/codehosting/tests/test_branchdistro.py (+2/-2)
lib/lp/codehosting/tests/test_bzrutils.py (+4/-4)
lib/lp/codehosting/tests/test_sftp.py (+6/-0)
lib/lp/codehosting/vfs/branchfs.py (+8/-8)
lib/lp/codehosting/vfs/tests/test_branchfs.py (+45/-24)
lib/lp/codehosting/vfs/tests/test_filesystem.py (+2/-2)
lib/lp/codehosting/vfs/tests/test_transport.py (+2/-2)
lib/lp/codehosting/vfs/transport.py (+13/-13)
lib/lp/testing/__init__.py (+26/-5)
lib/lp/translations/scripts/translations_to_branch.py (+2/-2)
scripts/branch-distro.py (+2/-2)
scripts/update-stacked-on.py (+2/-2)
versions.cfg (+2/-2)
To merge this branch: bzr merge lp:~mwhudson/launchpad/bzr-2.1c1-update
Reviewer Review Type Date Requested Status
Henning Eggers (community) code Approve
Review via email: mp+18358@code.launchpad.net

Commit message

Upgrade to bzr 2.1rc2, with fixes for bug 514090 and bug 513432

To post a comment you must log in.
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

Hi there,

This branch updates Launchpad to bzr 2.1rc1. It's mostly very boring fallout from bzrlib's Server class setUp -> start_server renaming although there a few test infrastructure and logging related changes too.

Revision history for this message
Henning Eggers (henninge) wrote :
Download full text (3.2 KiB)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> Hi there,
>
> This branch updates Launchpad to bzr 2.1rc1. It's mostly very boring fallout from bzrlib's Server class setUp -> start_server renaming although there a few test infrastructure and logging related changes too.
>

Yes, this was actually kind of boring but I managed to stay awake ... ;-)

As a consequence, I only have one marginal suggestion. But if you don't
feel like doing something about it, feel free to land this branch ... ;)
Thank you for doing this boring work!

 review approve code

Cheers,
Henning

> === modified file 'lib/lp/codehosting/scanner/branch_scanner.py'
> --- lib/lp/codehosting/scanner/branch_scanner.py 2009-12-17 02:00:16 +0000
> +++ lib/lp/codehosting/scanner/branch_scanner.py 2010-02-01 05:13:16 +0000
> @@ -23,7 +23,7 @@
> from lp.codehosting.scanner.bzrsync import (
> BzrSync, schedule_diff_updates, schedule_translation_upload)
> from lp.codehosting.scanner.fixture import (
> - Fixtures, make_zope_event_fixture, run_with_fixture)
> + Fixtures, make_zope_event_fixture, run_with_fixture, ServerFixture)
> from canonical.launchpad.webapp import canonical_url, errorlog
>
>
> @@ -100,7 +100,8 @@
> schedule_translation_upload,
> ]
> server = get_scanner_server()
> - fixture = Fixtures([server, make_zope_event_fixture(*event_handlers)])
> + fixture = Fixtures(
> + [ServerFixture(server), make_zope_event_fixture(*event_handlers)])

Wouldn't it be cool to be able to just do "IFixture(server)" here? See
below.

> self.log.info('Starting branch scanning')
> branches = getUtility(IBranchScanner).getBranchesToScan()
> run_with_fixture(fixture, self.scanBranches, branches)
>
> === modified file 'lib/lp/codehosting/scanner/fixture.py'
> --- lib/lp/codehosting/scanner/fixture.py 2009-06-30 16:56:07 +0000
> +++ lib/lp/codehosting/scanner/fixture.py 2010-02-01 05:13:16 +0000
> @@ -1,4 +1,4 @@
> -# Copyright 2009 Canonical Ltd. This software is licensed under the
> +# Copyright 2009, 2010 Canonical Ltd. This software is licensed under the
> # GNU Affero General Public License version 3 (see the file LICENSE).
>
> # pylint: disable-msg=E0211
> @@ -16,6 +16,7 @@
> 'IFixture',
> 'make_zope_event_fixture',
> 'run_with_fixture',
> + 'ServerFixture',
> 'with_fixture',
> ]
>
> @@ -121,3 +122,18 @@
>
> def make_zope_event_fixture(*handlers):
> return Fixtures(map(ZopeEventHandlerFixture, handlers))
> +
> +
> +class ServerFixture:
> + """Adapt a bzrlib `Server` into an `IFixture`."""
> +
> + implements(IFixture)

adapts(...)

Maybe this could be registered as a real adapter? But I am not sure if
there is an interface available that could be adapted.

> +
> + def __init__(self, server):
> + self.server = server
> +
> + def setUp(self):
> + self.server.start_server()
> +
> + def tearDown(self):
> + self.server.stop_server()
>

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAktmxtgACgkQBT3oW1L17iiaIACgv/EpHTRVrmy...

Read more...

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bzrplugins/lpserve.py'
2--- bzrplugins/lpserve.py 2009-07-17 00:26:05 +0000
3+++ bzrplugins/lpserve.py 2010-02-04 00:33:17 +0000
4@@ -92,7 +92,7 @@
5 lp_server = get_lp_server(
6 int(user_id), branchfs_endpoint_url,
7 upload_directory, mirror_directory)
8- lp_server.setUp()
9+ lp_server.start_server()
10
11 old_lockdir_timeout = lockdir._DEFAULT_TIMEOUT_SECONDS
12 try:
13@@ -102,7 +102,7 @@
14 self.run_server(smart_server)
15 finally:
16 lockdir._DEFAULT_TIMEOUT_SECONDS = old_lockdir_timeout
17- lp_server.tearDown()
18+ lp_server.stop_server()
19
20
21 register_command(cmd_launchpad_server)
22
23=== modified file 'cronscripts/mpcreationjobs.py'
24--- cronscripts/mpcreationjobs.py 2009-10-13 14:38:07 +0000
25+++ cronscripts/mpcreationjobs.py 2010-02-04 00:33:17 +0000
26@@ -33,11 +33,11 @@
27 job_source = getUtility(IMergeProposalCreatedJobSource)
28 runner = JobRunner.fromReady(job_source, self.logger)
29 server = get_scanner_server()
30- server.setUp()
31+ server.start_server()
32 try:
33 runner.runAll()
34 finally:
35- server.tearDown()
36+ server.stop_server()
37 self.logger.info(
38 'Ran %d MergeProposalCreatedJobs.', len(runner.completed_jobs))
39
40
41=== modified file 'cronscripts/rosetta-branches.py'
42--- cronscripts/rosetta-branches.py 2009-10-13 14:38:07 +0000
43+++ cronscripts/rosetta-branches.py 2010-02-04 00:33:17 +0000
44@@ -32,11 +32,11 @@
45 runner = JobRunner.fromReady(
46 getUtility(IRosettaUploadJobSource), self.logger)
47 server = get_scanner_server()
48- server.setUp()
49+ server.start_server()
50 try:
51 runner.runAll()
52 finally:
53- server.tearDown()
54+ server.stop_server()
55 self.logger.info('Ran %d RosettaBranchJobs.',
56 len(runner.completed_jobs))
57
58
59=== modified file 'cronscripts/sendbranchmail.py'
60--- cronscripts/sendbranchmail.py 2009-10-13 14:38:07 +0000
61+++ cronscripts/sendbranchmail.py 2010-02-04 00:33:17 +0000
62@@ -33,11 +33,11 @@
63 jobs.extend(getUtility(IRevisionsAddedJobSource).iterReady())
64 runner = JobRunner(jobs, self.logger)
65 server = get_scanner_server()
66- server.setUp()
67+ server.start_server()
68 try:
69 runner.runAll()
70 finally:
71- server.tearDown()
72+ server.stop_server()
73 self.logger.info(
74 'Ran %d RevisionMailJobs.' % len(runner.completed_jobs))
75
76
77=== modified file 'lib/canonical/launchpad/webapp/tests/test_errorlog.py'
78--- lib/canonical/launchpad/webapp/tests/test_errorlog.py 2009-11-26 16:06:55 +0000
79+++ lib/canonical/launchpad/webapp/tests/test_errorlog.py 2010-02-04 00:33:17 +0000
80@@ -581,6 +581,7 @@
81 class UnprintableException(Exception):
82 def __str__(self):
83 raise RuntimeError('arrgh')
84+ __repr__ = __str__
85
86 log = InstalledHandler('SiteError')
87 try:
88
89=== modified file 'lib/lp/code/mail/codehandler.py'
90--- lib/lp/code/mail/codehandler.py 2009-12-07 02:57:22 +0000
91+++ lib/lp/code/mail/codehandler.py 2010-02-04 00:33:17 +0000
92@@ -491,7 +491,7 @@
93
94 # Create the LP server as if the submitter was pushing a branch to LP.
95 lp_server = get_lp_server(submitter.id)
96- lp_server.setUp()
97+ lp_server.start_server()
98 try:
99 source_url = urljoin(lp_server.get_url(), db_source.unique_name)
100 target_url = urljoin(lp_server.get_url(), db_target.unique_name)
101@@ -512,7 +512,7 @@
102 db_source.requestMirror()
103 return db_source
104 finally:
105- lp_server.tearDown()
106+ lp_server.stop_server()
107
108 def _pullRevisionsFromMergeDirectiveIntoSourceBranch(self, md,
109 target_url,
110
111=== modified file 'lib/lp/code/mail/tests/test_codehandler.py'
112--- lib/lp/code/mail/tests/test_codehandler.py 2010-01-12 01:25:35 +0000
113+++ lib/lp/code/mail/tests/test_codehandler.py 2010-02-04 00:33:17 +0000
114@@ -850,8 +850,8 @@
115 The client has write access to the branch.
116 """
117 lp_server = get_lp_server(db_branch.owner.id)
118- lp_server.setUp()
119- self.addCleanup(lp_server.tearDown)
120+ lp_server.start_server()
121+ self.addCleanup(lp_server.stop_server)
122 branch_url = urljoin(lp_server.get_url(), db_branch.unique_name)
123 return Branch.open(branch_url)
124
125
126=== modified file 'lib/lp/code/model/branchjob.py'
127--- lib/lp/code/model/branchjob.py 2010-02-03 11:17:12 +0000
128+++ lib/lp/code/model/branchjob.py 2010-02-04 00:33:17 +0000
129@@ -50,8 +50,7 @@
130 from lp.code.model.revision import RevisionSet
131 from lp.codehosting.scanner import buglinks, email, mergedetection
132 from lp.codehosting.scanner.fixture import (
133- Fixtures, make_zope_event_fixture, run_with_fixture
134-)
135+ Fixtures, ServerFixture, make_zope_event_fixture)
136 from lp.codehosting.scanner.bzrsync import (
137 BzrSync, schedule_diff_updates, schedule_translation_upload
138 )
139@@ -299,7 +298,7 @@
140 schedule_translation_upload,
141 ]
142 fixture = Fixtures(
143- [cls.server, make_zope_event_fixture(*event_handlers)])
144+ [ServerFixture(cls.server), make_zope_event_fixture(*event_handlers)])
145 fixture.setUp()
146 yield
147 fixture.tearDown()
148@@ -329,9 +328,9 @@
149 """See `IBranchUpgradeJobSource`."""
150 errorlog.globalErrorUtility.configure('upgrade_branches')
151 server = get_multi_server(write_hosted=True)
152- server.setUp()
153+ server.start_server()
154 yield
155- server.tearDown()
156+ server.stop_server()
157
158 def run(self):
159 """See `IBranchUpgradeJob`."""
160
161=== modified file 'lib/lp/code/model/branchmergeproposaljob.py'
162--- lib/lp/code/model/branchmergeproposaljob.py 2010-02-01 20:49:35 +0000
163+++ lib/lp/code/model/branchmergeproposaljob.py 2010-02-04 00:33:17 +0000
164@@ -272,9 +272,9 @@
165 """See `IUpdatePreviewDiffJobSource`."""
166 errorlog.globalErrorUtility.configure('update_preview_diffs')
167 server = get_scanner_server()
168- server.setUp()
169+ server.start_server()
170 yield
171- server.tearDown()
172+ server.stop_server()
173
174 def run(self):
175 """See `IRunnableJob`"""
176@@ -339,11 +339,11 @@
177 setupInteraction(principal, email_addr)
178
179 server = get_multi_server(write_hosted=True)
180- server.setUp()
181+ server.start_server()
182 try:
183 return CodeHandler().processMergeProposal(message)
184 finally:
185- server.tearDown()
186+ server.stop_server()
187
188 def getOopsRecipients(self):
189 message = self.getMessage()
190
191=== modified file 'lib/lp/code/model/directbranchcommit.py'
192--- lib/lp/code/model/directbranchcommit.py 2009-11-18 13:26:03 +0000
193+++ lib/lp/code/model/directbranchcommit.py 2010-02-04 00:33:17 +0000
194@@ -56,12 +56,12 @@
195 allows write access to lp-hosted:/// URLs:
196
197 bzrserver = get_multi_server(write_hosted=True)
198- bzrserver.setUp()
199+ bzrserver.start_server()
200 try:
201 branchcommit = DirectBranchCommit(branch)
202 # ...
203 finally:
204- bzrserver.tearDown()
205+ bzrserver.stop_server()
206
207 Or in tests, just call `useBzrBranches` before creating a
208 `DirectBranchCommit`.
209
210=== modified file 'lib/lp/codehosting/bzrutils.py'
211--- lib/lp/codehosting/bzrutils.py 2009-12-22 23:50:27 +0000
212+++ lib/lp/codehosting/bzrutils.py 2010-02-04 00:33:17 +0000
213@@ -217,13 +217,13 @@
214 """
215 self.schemes = schemes
216
217- def setUp(self):
218+ def start_server(self):
219 """Prevent transports being created for specified schemes."""
220 for scheme in self.schemes:
221 register_transport(scheme, self._deny)
222 self._is_set_up = True
223
224- def tearDown(self):
225+ def stop_server(self):
226 """Re-enable creation of transports for specified schemes."""
227 if not self._is_set_up:
228 return
229
230=== modified file 'lib/lp/codehosting/codeimport/tests/servers.py'
231--- lib/lp/codehosting/codeimport/tests/servers.py 2009-12-14 18:11:07 +0000
232+++ lib/lp/codehosting/codeimport/tests/servers.py 2010-02-04 00:33:17 +0000
233@@ -82,8 +82,8 @@
234 else:
235 return local_path_to_url(self.repository_path)
236
237- def setUp(self):
238- super(SubversionServer, self).setUp()
239+ def start_server(self):
240+ super(SubversionServer, self).start_server()
241 self.createRepository(self.repository_path)
242 if self._use_svn_serve:
243 conf_path = os.path.join(
244@@ -109,8 +109,8 @@
245 raise AssertionError(
246 "svnserve didn't start accepting connections")
247
248- def tearDown(self):
249- super(SubversionServer, self).tearDown()
250+ def stop_server(self):
251+ super(SubversionServer, self).stop_server()
252 if self._use_svn_serve:
253 os.kill(self._svnserve.pid, signal.SIGINT)
254 self._svnserve.communicate()
255@@ -186,9 +186,9 @@
256 module=module_name, log="import", vendor="vendor",
257 release=['release'], dir='.')
258
259- def setUp(self):
260+ def start_server(self):
261 # Initialize the repository.
262- super(CVSServer, self).setUp()
263+ super(CVSServer, self).start_server()
264 self._repository = self.createRepository(self._repository_path)
265
266
267
268=== modified file 'lib/lp/codehosting/codeimport/tests/test_foreigntree.py'
269--- lib/lp/codehosting/codeimport/tests/test_foreigntree.py 2009-06-25 04:06:00 +0000
270+++ lib/lp/codehosting/codeimport/tests/test_foreigntree.py 2010-02-04 00:33:17 +0000
271@@ -40,8 +40,8 @@
272 def setUp(self):
273 TestCaseWithTransport.setUp(self)
274 svn_server = SubversionServer('repository_path')
275- svn_server.setUp()
276- self.addCleanup(svn_server.tearDown)
277+ svn_server.start_server()
278+ self.addCleanup(svn_server.stop_server)
279 self.svn_branch_url = svn_server.makeBranch(
280 'trunk', [('README', 'original')])
281
282@@ -122,11 +122,11 @@
283 def setUp(self):
284 TestCaseWithTransport.setUp(self)
285 self.cvs_server = CVSServer('repository_path')
286- self.cvs_server.setUp()
287+ self.cvs_server.start_server()
288 self.module_name = 'test_module'
289 self.cvs_server.makeModule(
290 self.module_name, [('README', 'Random content\n')])
291- self.addCleanup(self.cvs_server.tearDown)
292+ self.addCleanup(self.cvs_server.stop_server)
293
294 def test_path(self):
295 # The local path is passed to the constructor and available as
296
297=== modified file 'lib/lp/codehosting/codeimport/tests/test_worker.py'
298--- lib/lp/codehosting/codeimport/tests/test_worker.py 2010-02-01 03:55:59 +0000
299+++ lib/lp/codehosting/codeimport/tests/test_worker.py 2010-02-04 00:33:17 +0000
300@@ -773,8 +773,8 @@
301 """Make a CVS `CodeImportSourceDetails` pointing at a real CVS repo.
302 """
303 cvs_server = CVSServer(self.makeTemporaryDirectory())
304- cvs_server.setUp()
305- self.addCleanup(cvs_server.tearDown)
306+ cvs_server.start_server()
307+ self.addCleanup(cvs_server.stop_server)
308
309 cvs_server.makeModule('trunk', [('README', 'original\n')])
310
311@@ -804,8 +804,8 @@
312 """Make a SVN `CodeImportSourceDetails` pointing at a real SVN repo.
313 """
314 svn_server = SubversionServer(self.makeTemporaryDirectory())
315- svn_server.setUp()
316- self.addCleanup(svn_server.tearDown)
317+ svn_server.start_server()
318+ self.addCleanup(svn_server.stop_server)
319
320 svn_branch_url = svn_server.makeBranch(branch_name, files)
321 svn_branch_url = svn_branch_url.replace('://localhost/', ':///')
322@@ -897,8 +897,8 @@
323 """
324 repository_path = self.makeTemporaryDirectory()
325 git_server = GitServer(repository_path)
326- git_server.setUp()
327- self.addCleanup(git_server.tearDown)
328+ git_server.start_server()
329+ self.addCleanup(git_server.stop_server)
330
331 git_server.makeRepo(files)
332 self.foreign_commit_count = 1
333@@ -948,8 +948,8 @@
334 """
335 repository_path = self.makeTemporaryDirectory()
336 hg_server = MercurialServer(repository_path)
337- hg_server.setUp()
338- self.addCleanup(hg_server.tearDown)
339+ hg_server.start_server()
340+ self.addCleanup(hg_server.stop_server)
341
342 hg_server.makeRepo(files)
343 self.foreign_commit_count = 1
344
345=== modified file 'lib/lp/codehosting/codeimport/tests/test_workermonitor.py'
346--- lib/lp/codehosting/codeimport/tests/test_workermonitor.py 2010-02-01 03:49:23 +0000
347+++ lib/lp/codehosting/codeimport/tests/test_workermonitor.py 2010-02-04 00:33:17 +0000
348@@ -358,6 +358,9 @@
349 """Tests for `CodeImportWorkerMonitor.run` that don't launch a subprocess.
350 """
351
352+ # This works around a clash between the TrialTestCase and the BzrTestCase.
353+ skip = None
354+
355 class WorkerMonitor(CodeImportWorkerMonitor):
356 """See `CodeImportWorkerMonitor`.
357
358@@ -472,6 +475,9 @@
359
360 layer = TwistedLaunchpadZopelessLayer
361
362+ # This works around a clash between the TrialTestCase and the BzrTestCase.
363+ skip = None
364+
365 def setUp(self):
366 BzrTestCase.setUp(self)
367 login('no-priv@canonical.com')
368@@ -489,8 +495,8 @@
369 def makeCVSCodeImport(self):
370 """Make a `CodeImport` that points to a real CVS repository."""
371 cvs_server = CVSServer(self.repo_path)
372- cvs_server.setUp()
373- self.addCleanup(cvs_server.tearDown)
374+ cvs_server.start_server()
375+ self.addCleanup(cvs_server.stop_server)
376
377 cvs_server.makeModule('trunk', [('README', 'original\n')])
378 self.foreign_commit_count = 2
379@@ -501,8 +507,8 @@
380 def makeSVNCodeImport(self):
381 """Make a `CodeImport` that points to a real Subversion repository."""
382 self.subversion_server = SubversionServer(self.repo_path)
383- self.subversion_server.setUp()
384- self.addCleanup(self.subversion_server.tearDown)
385+ self.subversion_server.start_server()
386+ self.addCleanup(self.subversion_server.stop_server)
387 url = self.subversion_server.makeBranch(
388 'trunk', [('README', 'contents')])
389 self.foreign_commit_count = 2
390@@ -513,8 +519,8 @@
391 """Make a `CodeImport` that points to a real Subversion repository."""
392 self.subversion_server = SubversionServer(
393 self.repo_path, use_svn_serve=True)
394- self.subversion_server.setUp()
395- self.addCleanup(self.subversion_server.tearDown)
396+ self.subversion_server.start_server()
397+ self.addCleanup(self.subversion_server.stop_server)
398 url = self.subversion_server.makeBranch(
399 'trunk', [('README', 'contents')])
400 self.foreign_commit_count = 2
401@@ -526,8 +532,8 @@
402 """Make a `CodeImport` that points to a real Git repository."""
403 load_optional_plugin('git')
404 self.git_server = GitServer(self.repo_path)
405- self.git_server.setUp()
406- self.addCleanup(self.git_server.tearDown)
407+ self.git_server.start_server()
408+ self.addCleanup(self.git_server.stop_server)
409
410 self.git_server.makeRepo([('README', 'contents')])
411 self.foreign_commit_count = 1
412@@ -538,8 +544,8 @@
413 """Make a `CodeImport` that points to a real Mercurial repository."""
414 load_optional_plugin('hg')
415 self.hg_server = MercurialServer(self.repo_path)
416- self.hg_server.setUp()
417- self.addCleanup(self.hg_server.tearDown)
418+ self.hg_server.start_server()
419+ self.addCleanup(self.hg_server.stop_server)
420
421 self.hg_server.makeRepo([('README', 'contents')])
422 self.foreign_commit_count = 1
423
424=== modified file 'lib/lp/codehosting/puller/tests/test_acceptance.py'
425--- lib/lp/codehosting/puller/tests/test_acceptance.py 2009-09-17 05:07:50 +0000
426+++ lib/lp/codehosting/puller/tests/test_acceptance.py 2010-02-04 00:33:17 +0000
427@@ -140,7 +140,7 @@
428 """Serve the current directory over HTTP, returning the server URL."""
429 http_server = HttpServer()
430 http_server.port = port
431- http_server.setUp()
432+ http_server.start_server()
433 # Join cleanup added before the tearDown so the tearDown is executed
434 # first as this tells the thread to die. We then join explicitly as
435 # the HttpServer.tearDown does not join. There is a check in the
436@@ -149,7 +149,7 @@
437 # threads and let the garbage collector get them, however this causes
438 # issues with the test runner.
439 self.addCleanup(http_server._http_thread.join)
440- self.addCleanup(http_server.tearDown)
441+ self.addCleanup(http_server.stop_server)
442 return http_server.get_url().rstrip('/')
443
444 def getLPServerForUser(self, user):
445@@ -167,8 +167,8 @@
446 # in a subprocess which would have no way of knowing which directories
447 # to look in if we used freshly created temporary directories.
448 lp_server = get_lp_server(user.id)
449- lp_server.setUp()
450- self.addCleanup(lp_server.tearDown)
451+ lp_server.start_server()
452+ self.addCleanup(lp_server.stop_server)
453 return lp_server
454
455 def openBranchAsUser(self, db_branch, user):
456
457=== modified file 'lib/lp/codehosting/puller/tests/test_worker.py'
458--- lib/lp/codehosting/puller/tests/test_worker.py 2010-01-07 06:40:23 +0000
459+++ lib/lp/codehosting/puller/tests/test_worker.py 2010-02-04 00:33:17 +0000
460@@ -34,7 +34,6 @@
461 from lp.testing import TestCase
462 from lp.testing.factory import LaunchpadObjectFactory
463 from lazr.uri import URI
464-from canonical.testing import reset_logging
465
466
467 def get_netstrings(line):
468@@ -737,13 +736,12 @@
469 def tearDown(self):
470 TestCaseWithTransport.tearDown(self)
471 bzrlib.ui.ui_factory = self.saved_factory
472- reset_logging()
473
474 def getHttpServerForCwd(self):
475 """Get an `HttpServer` instance that serves from '.'."""
476 server = HttpServer()
477- server.setUp()
478- self.addCleanup(server.tearDown)
479+ server.start_server()
480+ self.addCleanup(server.stop_server)
481 # The gc.collect allows the threads behind any HTTP requests to exit.
482 self.addCleanup(gc.collect)
483 return server
484
485=== modified file 'lib/lp/codehosting/puller/tests/test_worker_formats.py'
486--- lib/lp/codehosting/puller/tests/test_worker_formats.py 2009-12-22 23:52:00 +0000
487+++ lib/lp/codehosting/puller/tests/test_worker_formats.py 2010-02-04 00:33:17 +0000
488@@ -17,7 +17,6 @@
489 from lp.codehosting.puller.tests import PullerWorkerMixin
490 from lp.codehosting.tests.helpers import LoomTestMixin
491 from lazr.uri import URI
492-from canonical.testing import reset_logging
493
494
495 class TestPullerWorkerFormats(TestCaseWithRepository, PullerWorkerMixin,
496@@ -31,10 +30,6 @@
497 self.get_url(self._source_branch_path),
498 self.get_url('dest-path'))
499
500- def tearDown(self):
501- TestCaseWithRepository.tearDown(self)
502- reset_logging()
503-
504 def _createSourceBranch(self, repository_format, bzrdir_format,
505 branch_format=None):
506 """Make a source branch with the given formats."""
507
508=== modified file 'lib/lp/codehosting/puller/worker.py'
509--- lib/lp/codehosting/puller/worker.py 2010-01-07 05:04:49 +0000
510+++ lib/lp/codehosting/puller/worker.py 2010-02-04 00:33:17 +0000
511@@ -419,12 +419,12 @@
512 from lp.codehosting.vfs import get_puller_server
513
514 server = get_puller_server()
515- server.setUp()
516+ server.start_server()
517 try:
518 source_branch = self.branch_mirrorer.open(self.source)
519 return self.branch_mirrorer.mirror(source_branch, self.dest)
520 finally:
521- server.tearDown()
522+ server.stop_server()
523
524 def mirror(self):
525 """Open source and destination branches and pull source into
526
527=== modified file 'lib/lp/codehosting/scanner/branch_scanner.py'
528--- lib/lp/codehosting/scanner/branch_scanner.py 2009-12-17 02:00:16 +0000
529+++ lib/lp/codehosting/scanner/branch_scanner.py 2010-02-04 00:33:17 +0000
530@@ -23,7 +23,7 @@
531 from lp.codehosting.scanner.bzrsync import (
532 BzrSync, schedule_diff_updates, schedule_translation_upload)
533 from lp.codehosting.scanner.fixture import (
534- Fixtures, make_zope_event_fixture, run_with_fixture)
535+ Fixtures, make_zope_event_fixture, run_with_fixture, ServerFixture)
536 from canonical.launchpad.webapp import canonical_url, errorlog
537
538
539@@ -100,7 +100,8 @@
540 schedule_translation_upload,
541 ]
542 server = get_scanner_server()
543- fixture = Fixtures([server, make_zope_event_fixture(*event_handlers)])
544+ fixture = Fixtures(
545+ [ServerFixture(server), make_zope_event_fixture(*event_handlers)])
546 self.log.info('Starting branch scanning')
547 branches = getUtility(IBranchScanner).getBranchesToScan()
548 run_with_fixture(fixture, self.scanBranches, branches)
549
550=== modified file 'lib/lp/codehosting/scanner/fixture.py'
551--- lib/lp/codehosting/scanner/fixture.py 2009-06-30 16:56:07 +0000
552+++ lib/lp/codehosting/scanner/fixture.py 2010-02-04 00:33:17 +0000
553@@ -1,4 +1,4 @@
554-# Copyright 2009 Canonical Ltd. This software is licensed under the
555+# Copyright 2009, 2010 Canonical Ltd. This software is licensed under the
556 # GNU Affero General Public License version 3 (see the file LICENSE).
557
558 # pylint: disable-msg=E0211
559@@ -16,6 +16,7 @@
560 'IFixture',
561 'make_zope_event_fixture',
562 'run_with_fixture',
563+ 'ServerFixture',
564 'with_fixture',
565 ]
566
567@@ -121,3 +122,18 @@
568
569 def make_zope_event_fixture(*handlers):
570 return Fixtures(map(ZopeEventHandlerFixture, handlers))
571+
572+
573+class ServerFixture:
574+ """Adapt a bzrlib `Server` into an `IFixture`."""
575+
576+ implements(IFixture)
577+
578+ def __init__(self, server):
579+ self.server = server
580+
581+ def setUp(self):
582+ self.server.start_server()
583+
584+ def tearDown(self):
585+ self.server.stop_server()
586
587=== modified file 'lib/lp/codehosting/scanner/tests/test_bzrsync.py'
588--- lib/lp/codehosting/scanner/tests/test_bzrsync.py 2010-01-06 09:26:56 +0000
589+++ lib/lp/codehosting/scanner/tests/test_bzrsync.py 2010-02-04 00:33:17 +0000
590@@ -73,7 +73,7 @@
591 self._url_prefix = url_prefix
592 self._chroot_server = None
593
594- def setUp(self):
595+ def start_server(self):
596 """Activate the transport URL."""
597 # The scanner tests assume that branches live on a Launchpad virtual
598 # filesystem rooted at 'lp-mirrored:///'. Rather than provide the
599@@ -81,11 +81,11 @@
600 # transport do the work.
601 register_transport(self._url_prefix, self._transportFactory)
602 self._chroot_server = ChrootServer(self._transport)
603- self._chroot_server.setUp()
604+ self._chroot_server.start_server()
605
606- def tearDown(self):
607+ def stop_server(self):
608 """Deactivate the transport URL."""
609- self._chroot_server.tearDown()
610+ self._chroot_server.stop_server()
611 unregister_transport(self._url_prefix, self._transportFactory)
612
613 def _transportFactory(self, url):
614@@ -111,8 +111,8 @@
615 # Here we set up a fake so that we can test without worrying about
616 # authservers and the like.
617 server = FakeTransportServer(self.get_transport())
618- server.setUp()
619- self.addCleanup(server.tearDown)
620+ server.start_server()
621+ self.addCleanup(server.stop_server)
622
623 def makeFixtures(self):
624 """Makes test fixtures before we switch to the scanner db user."""
625
626=== modified file 'lib/lp/codehosting/sftp.py'
627--- lib/lp/codehosting/sftp.py 2009-11-27 21:59:26 +0000
628+++ lib/lp/codehosting/sftp.py 2010-02-04 00:33:17 +0000
629@@ -251,7 +251,7 @@
630 config.codehosting.mirrored_branches_root)
631 server = LaunchpadServer(
632 avatar.branchfs_proxy, user_id, hosted_transport, mirror_transport)
633- server.setUp()
634+ server.start_server()
635 transport = AsyncLaunchpadTransport(server, server.get_url())
636 notify(accesslog.SFTPStarted(avatar))
637 return TransportSFTPServer(transport)
638
639=== modified file 'lib/lp/codehosting/sshserver/tests/test_logging.py'
640--- lib/lp/codehosting/sshserver/tests/test_logging.py 2009-06-25 04:06:00 +0000
641+++ lib/lp/codehosting/sshserver/tests/test_logging.py 2010-02-04 00:33:17 +0000
642@@ -24,7 +24,6 @@
643 from canonical.config import config
644 from canonical.launchpad.scripts import WatchedFileHandler
645 from lp.testing import TestCase
646-from canonical.testing import reset_logging
647
648
649 class TestLoggingBazaarInteraction(BzrTestCase):
650@@ -36,16 +35,6 @@
651 self._real_stderr = sys.stderr
652 sys.stderr = codecs.getwriter('utf8')(StringIO())
653
654- # We want to use Bazaar's default logging -- not its test logging --
655- # so here we disable the testing logging system (which restores
656- # default logging).
657- self._finishLogFile()
658-
659- # We don't use BaseLayer because we want to keep the amount of
660- # pre-configured logging systems to an absolute minimum, in order to
661- # make it easier to test this particular logging system.
662- self.addCleanup(reset_logging)
663-
664 def tearDown(self):
665 sys.stderr = self._real_stderr
666 BzrTestCase.tearDown(self)
667@@ -77,13 +66,6 @@
668
669 class TestLoggingManager(TestCase):
670
671- def setUp(self):
672- TestCase.setUp(self)
673- # We don't use BaseLayer because we want to keep the amount of
674- # pre-configured logging systems to an absolute minimum, in order to
675- # make it easier to test this particular logging system.
676- self.addCleanup(reset_logging)
677-
678 def test_returns_codehosting_logger(self):
679 # get_codehosting_logger returns the 'codehosting' logger.
680 self.assertIs(
681
682=== modified file 'lib/lp/codehosting/tests/servers.py'
683--- lib/lp/codehosting/tests/servers.py 2009-06-25 04:06:00 +0000
684+++ lib/lp/codehosting/tests/servers.py 2010-02-04 00:33:17 +0000
685@@ -126,10 +126,10 @@
686 transport = get_transport(self.get_url()).clone(path)
687 return transport
688
689- def setUp(self):
690+ def start_server(self):
691 self._real_home, self._fake_home = self.setUpFakeHome()
692
693- def tearDown(self):
694+ def stop_server(self):
695 os.environ['HOME'] = self._real_home
696 shutil.rmtree(self._fake_home)
697
698
699=== modified file 'lib/lp/codehosting/tests/test_acceptance.py'
700--- lib/lp/codehosting/tests/test_acceptance.py 2009-12-22 23:45:50 +0000
701+++ lib/lp/codehosting/tests/test_acceptance.py 2010-02-04 00:33:17 +0000
702@@ -89,15 +89,15 @@
703 self.disable_directory_isolation()
704 tac_handler = SSHServerLayer.getTacHandler()
705 self.server = SSHCodeHostingServer(self.scheme, tac_handler)
706- self.server.setUp()
707- self.addCleanup(self.server.tearDown)
708+ self.server.start_server()
709+ self.addCleanup(self.server.stop_server)
710
711 # Prevent creation of in-process sftp:// and bzr+ssh:// transports --
712 # such connections tend to leak threads and occasionally create
713 # uncollectable garbage.
714 ssh_denier = DenyingServer(['bzr+ssh://', 'sftp://'])
715- ssh_denier.setUp()
716- self.addCleanup(ssh_denier.tearDown)
717+ ssh_denier.start_server()
718+ self.addCleanup(ssh_denier.stop_server)
719
720 # Create a local branch with one revision
721 tree = self.make_branch_and_tree('.')
722
723=== modified file 'lib/lp/codehosting/tests/test_branchdistro.py'
724--- lib/lp/codehosting/tests/test_branchdistro.py 2009-10-26 22:37:15 +0000
725+++ lib/lp/codehosting/tests/test_branchdistro.py 2010-02-04 00:33:17 +0000
726@@ -59,8 +59,8 @@
727 # location.
728
729 chroot_server = ChrootServer(self.get_transport())
730- chroot_server.setUp()
731- self.addCleanup(chroot_server.tearDown)
732+ chroot_server.start_server()
733+ self.addCleanup(chroot_server.stop_server)
734 scheme = chroot_server.get_url().rstrip('/:')
735
736 old_branch = FakeBranch(1)
737
738=== modified file 'lib/lp/codehosting/tests/test_bzrutils.py'
739--- lib/lp/codehosting/tests/test_bzrutils.py 2009-12-22 23:52:00 +0000
740+++ lib/lp/codehosting/tests/test_bzrutils.py 2010-02-04 00:33:17 +0000
741@@ -127,9 +127,9 @@
742 branch.base.startswith('file://'),
743 "make_branch() didn't make branch with file:// URL")
744 file_denier = DenyingServer(['file://'])
745- file_denier.setUp()
746+ file_denier.start_server()
747 self.assertRaises(AssertionError, Branch.open, branch.base)
748- file_denier.tearDown()
749+ file_denier.stop_server()
750 # This is just "assertNotRaises":
751 Branch.open(branch.base)
752
753@@ -188,8 +188,8 @@
754 # RemoteBranch.
755 vfs_branch = self.make_branch('.')
756 smart_server = server.SmartTCPServer_for_testing()
757- smart_server.setUp(self.get_vfs_only_server())
758- self.addCleanup(smart_server.tearDown)
759+ smart_server.start_server(self.get_vfs_only_server())
760+ self.addCleanup(smart_server.stop_server)
761 remote_branch = Branch.open(smart_server.get_url())
762 # Check that our set up worked: remote_branch is Remote and
763 # source_branch is not.
764
765=== modified file 'lib/lp/codehosting/tests/test_sftp.py'
766--- lib/lp/codehosting/tests/test_sftp.py 2009-12-08 16:24:12 +0000
767+++ lib/lp/codehosting/tests/test_sftp.py 2010-02-04 00:33:17 +0000
768@@ -161,6 +161,9 @@
769
770 layer = TwistedLayer
771
772+ # This works around a clash between the TrialTestCase and the BzrTestCase.
773+ skip = None
774+
775 def setUp(self):
776 TrialTestCase.setUp(self)
777 TestCaseInTempDir.setUp(self)
778@@ -413,6 +416,9 @@
779
780 layer = TwistedLayer
781
782+ # This works around a clash between the TrialTestCase and the BzrTestCase.
783+ skip = None
784+
785 def setUp(self):
786 TrialTestCase.setUp(self)
787 TestCaseInTempDir.setUp(self)
788
789=== modified file 'lib/lp/codehosting/vfs/branchfs.py'
790--- lib/lp/codehosting/vfs/branchfs.py 2010-01-07 05:05:37 +0000
791+++ lib/lp/codehosting/vfs/branchfs.py 2010-02-04 00:33:17 +0000
792@@ -340,7 +340,7 @@
793 configured to use the given default stacked-on location.
794 """
795 memory_server = MemoryServer()
796- memory_server.setUp()
797+ memory_server.start_server()
798 transport = get_transport(memory_server.get_url())
799 if default_stack_on == '':
800 return transport
801@@ -378,7 +378,7 @@
802 """
803 AsyncVirtualServer.__init__(self, scheme)
804 self._authserver = BranchFileSystemClient(authserver, user_id)
805- self._is_set_up = False
806+ self._is_start_server = False
807
808 def translateVirtualPath(self, virtual_url_fragment):
809 """See `AsyncVirtualServer.translateVirtualPath`.
810@@ -429,8 +429,8 @@
811 scheme, authserver, LAUNCHPAD_SERVICES)
812 self._transport_dispatch = BranchTransportDispatch(branch_transport)
813
814- def setUp(self):
815- super(LaunchpadInternalServer, self).setUp()
816+ def start_server(self):
817+ super(LaunchpadInternalServer, self).start_server()
818 try:
819 self._transport_dispatch.base_transport.ensure_base()
820 except TransportNotPossible:
821@@ -439,7 +439,7 @@
822 def destroy(self):
823 """Delete the on-disk branches and tear down."""
824 self._transport_dispatch.base_transport.delete_tree('.')
825- self.tearDown()
826+ self.stop_server()
827
828
829 class DirectDatabaseLaunchpadServer(AsyncVirtualServer):
830@@ -448,8 +448,8 @@
831 AsyncVirtualServer.__init__(self, scheme)
832 self._transport_dispatch = BranchTransportDispatch(branch_transport)
833
834- def setUp(self):
835- super(DirectDatabaseLaunchpadServer, self).setUp()
836+ def start_server(self):
837+ super(DirectDatabaseLaunchpadServer, self).start_server()
838 try:
839 self._transport_dispatch.base_transport.ensure_base()
840 except TransportNotPossible:
841@@ -458,7 +458,7 @@
842 def destroy(self):
843 """Delete the on-disk branches and tear down."""
844 self._transport_dispatch.base_transport.delete_tree('.')
845- self.tearDown()
846+ self.stop_server()
847
848 def translateVirtualPath(self, virtual_url_fragment):
849 """See `AsyncVirtualServer.translateVirtualPath`.
850
851=== modified file 'lib/lp/codehosting/vfs/tests/test_branchfs.py'
852--- lib/lp/codehosting/vfs/tests/test_branchfs.py 2009-12-22 23:50:27 +0000
853+++ lib/lp/codehosting/vfs/tests/test_branchfs.py 2010-02-04 00:33:17 +0000
854@@ -49,7 +49,7 @@
855 def setUp(self):
856 super(TestBranchTransportDispatch, self).setUp()
857 memory_server = MemoryServer()
858- memory_server.setUp()
859+ memory_server.start_server()
860 self.base_transport = get_transport(memory_server.get_url())
861 self.factory = BranchTransportDispatch(self.base_transport)
862
863@@ -90,7 +90,7 @@
864 def setUp(self):
865 super(TestTransportDispatch, self).setUp()
866 memory_server = MemoryServer()
867- memory_server.setUp()
868+ memory_server.start_server()
869 base_transport = get_transport(memory_server.get_url())
870 base_transport.mkdir('hosted')
871 base_transport.mkdir('mirrored')
872@@ -199,16 +199,16 @@
873 def test_setUp(self):
874 # Setting up the server registers its schema with the protocol
875 # handlers.
876- self.server.setUp()
877- self.addCleanup(self.server.tearDown)
878+ self.server.start_server()
879+ self.addCleanup(self.server.stop_server)
880 self.assertTrue(
881 self.server.get_url() in _get_protocol_handlers().keys())
882
883 def test_tearDown(self):
884 # Setting up then tearing down the server removes its schema from the
885 # protocol handlers.
886- self.server.setUp()
887- self.server.tearDown()
888+ self.server.start_server()
889+ self.server.stop_server()
890 self.assertFalse(
891 self.server.get_url() in _get_protocol_handlers().keys())
892
893@@ -216,6 +216,9 @@
894 class TestLaunchpadServer(MixinBaseLaunchpadServerTests, TrialTestCase,
895 BzrTestCase):
896
897+ # This works around a clash between the TrialTestCase and the BzrTestCase.
898+ skip = None
899+
900 def setUp(self):
901 BzrTestCase.setUp(self)
902 MixinBaseLaunchpadServerTests.setUp(self)
903@@ -287,8 +290,8 @@
904 # The URL of the server is 'lp-<number>:///', where <number> is the
905 # id() of the server object. Including the id allows for multiple
906 # Launchpad servers to be running within a single process.
907- self.server.setUp()
908- self.addCleanup(self.server.tearDown)
909+ self.server.start_server()
910+ self.addCleanup(self.server.stop_server)
911 self.assertEqual('lp-%d:///' % id(self.server), self.server.get_url())
912
913
914@@ -315,8 +318,8 @@
915 return deferred.addCallback(check_branch_transport)
916
917 def test_translate_control_dir_path(self):
918- self.server.setUp()
919- self.addCleanup(self.server.tearDown)
920+ self.server.start_server()
921+ self.addCleanup(self.server.stop_server)
922 branch = self.factory.makeProductBranch()
923 branch.product.development_focus.branch = branch
924 transport = get_transport(self.server.get_url())
925@@ -327,8 +330,8 @@
926 def test_open_containing_raises_branch_not_found(self):
927 # open_containing_from_transport raises NotBranchError if there's no
928 # branch at that URL.
929- self.server.setUp()
930- self.addCleanup(self.server.tearDown)
931+ self.server.start_server()
932+ self.addCleanup(self.server.stop_server)
933 branch = self.factory.makeAnyBranch(owner=self.requester)
934 transport = get_transport(self.server.get_url())
935 transport = transport.clone(branch.unique_name)
936@@ -342,6 +345,9 @@
937 LaunchpadInternalServerTests):
938 """Tests for `LaunchpadInternalServer`, used by the puller and scanner."""
939
940+ # This works around a clash between the TrialTestCase and the BzrTestCase.
941+ skip = None
942+
943 def setUp(self):
944 BzrTestCase.setUp(self)
945 self.disable_directory_isolation()
946@@ -358,6 +364,9 @@
947
948 layer = ZopelessDatabaseLayer
949
950+ # This works around a clash between the TrialTestCase and the BzrTestCase.
951+ skip = None
952+
953 def setUp(self):
954 super(TestDirectDatabaseLaunchpadServer, self).setUp()
955 self.requester = self.factory.makePerson()
956@@ -371,6 +380,9 @@
957
958 layer = TwistedLayer
959
960+ # This works around a clash between the TrialTestCase and the BzrTestCase.
961+ skip = None
962+
963 class VirtualServer(Server):
964 """Very simple server that provides a AsyncVirtualTransport."""
965
966@@ -383,11 +395,11 @@
967 def get_url(self):
968 return self.scheme
969
970- def setUp(self):
971+ def start_server(self):
972 self.scheme = 'virtual:///'
973 register_transport(self.scheme, self._transportFactory)
974
975- def tearDown(self):
976+ def stop_server(self):
977 unregister_transport(self.scheme, self._transportFactory)
978
979 def translateVirtualPath(self, virtual_path):
980@@ -399,8 +411,8 @@
981 TestCaseInTempDir.setUp(self)
982 self.server = self.VirtualServer(
983 FatLocalTransport(local_path_to_url('.')))
984- self.server.setUp()
985- self.addCleanup(self.server.tearDown)
986+ self.server.start_server()
987+ self.addCleanup(self.server.stop_server)
988 self.transport = get_transport(self.server.get_url())
989
990 def test_writeChunk(self):
991@@ -477,8 +489,8 @@
992 self.server = self.getServer(
993 authserver, self.requester.id, self.backing_transport,
994 MemoryTransport())
995- self.server.setUp()
996- self.addCleanup(self.server.tearDown)
997+ self.server.start_server()
998+ self.addCleanup(self.server.stop_server)
999
1000 def assertFiresFailure(self, exception, function, *args, **kwargs):
1001 """Assert that calling `function` will cause `exception` to be fired.
1002@@ -770,6 +782,9 @@
1003
1004 class TestLaunchpadTransportSync(LaunchpadTransportTests, TrialTestCase):
1005
1006+ # This works around a clash between the TrialTestCase and the BzrTestCase.
1007+ skip = None
1008+
1009 def _ensureDeferred(self, function, *args, **kwargs):
1010 def call_function_and_check_not_deferred():
1011 ret = function(*args, **kwargs)
1012@@ -793,6 +808,9 @@
1013
1014 class TestLaunchpadTransportAsync(LaunchpadTransportTests, TrialTestCase):
1015
1016+ # This works around a clash between the TrialTestCase and the BzrTestCase.
1017+ skip = None
1018+
1019 def _ensureDeferred(self, function, *args, **kwargs):
1020 deferred = function(*args, **kwargs)
1021 self.assertIsInstance(deferred, defer.Deferred)
1022@@ -828,8 +846,8 @@
1023 self._server = LaunchpadServer(
1024 XMLRPCWrapper(self.authserver), self.requester.id,
1025 self.backing_transport, self.mirror_transport)
1026- self._server.setUp()
1027- self.addCleanup(self._server.tearDown)
1028+ self._server.start_server()
1029+ self.addCleanup(self._server.stop_server)
1030 return self._server
1031
1032 def test_no_mirrors_requested_if_no_branches_changed(self):
1033@@ -861,6 +879,9 @@
1034 # See comment on TestLaunchpadServer.
1035 layer = TwistedLayer
1036
1037+ # This works around a clash between the TrialTestCase and the BzrTestCase.
1038+ skip = None
1039+
1040 def setUp(self):
1041 BzrTestCase.setUp(self)
1042
1043@@ -890,8 +911,8 @@
1044
1045 def _setUpMemoryServer(self):
1046 memory_server = MemoryServer()
1047- memory_server.setUp()
1048- self.addCleanup(memory_server.tearDown)
1049+ memory_server.start_server()
1050+ self.addCleanup(memory_server.stop_server)
1051 return memory_server
1052
1053 def _setUpLaunchpadServer(self, user_id, authserver, backing_transport,
1054@@ -899,8 +920,8 @@
1055 server = LaunchpadServer(
1056 XMLRPCWrapper(authserver), user_id, backing_transport,
1057 mirror_transport)
1058- server.setUp()
1059- self.addCleanup(server.tearDown)
1060+ server.start_server()
1061+ self.addCleanup(server.stop_server)
1062 return server
1063
1064 def test_mkdir_readonly(self):
1065
1066=== modified file 'lib/lp/codehosting/vfs/tests/test_filesystem.py'
1067--- lib/lp/codehosting/vfs/tests/test_filesystem.py 2009-11-21 00:34:12 +0000
1068+++ lib/lp/codehosting/vfs/tests/test_filesystem.py 2010-02-04 00:33:17 +0000
1069@@ -34,8 +34,8 @@
1070 self.requester = self.factory.makePerson()
1071 self._server = LaunchpadServer(
1072 endpoint, self.requester.id, MemoryTransport(), MemoryTransport())
1073- self._server.setUp()
1074- self.addCleanup(self._server.tearDown)
1075+ self._server.start_server()
1076+ self.addCleanup(self._server.stop_server)
1077
1078 def getTransport(self, relpath=None):
1079 return get_transport(self._server.get_url()).clone(relpath)
1080
1081=== modified file 'lib/lp/codehosting/vfs/tests/test_transport.py'
1082--- lib/lp/codehosting/vfs/tests/test_transport.py 2009-12-22 23:52:00 +0000
1083+++ lib/lp/codehosting/vfs/tests/test_transport.py 2010-02-04 00:33:17 +0000
1084@@ -60,7 +60,7 @@
1085 self._branch_path).clone('.bzr')
1086 bzrdir_transport.ensure_base()
1087 chroot_server = chroot.ChrootServer(bzrdir_transport)
1088- chroot_server.setUp()
1089+ chroot_server.start_server()
1090 self._chroot_servers.append(chroot_server)
1091 return get_transport(chroot_server.get_url()).clone(relpath)
1092
1093@@ -71,7 +71,7 @@
1094 ChrootServer instances we've set up.
1095 """
1096 for chroot_server in self._chroot_servers:
1097- chroot_server.tearDown()
1098+ chroot_server.stop_server()
1099 LaunchpadInternalServer.tearDown(self)
1100
1101
1102
1103=== modified file 'lib/lp/codehosting/vfs/transport.py'
1104--- lib/lp/codehosting/vfs/transport.py 2009-12-22 23:50:27 +0000
1105+++ lib/lp/codehosting/vfs/transport.py 2010-02-04 00:33:17 +0000
1106@@ -57,7 +57,7 @@
1107 if mkdir:
1108 transport.create_prefix()
1109 chroot_server = chroot.ChrootServer(transport)
1110- chroot_server.setUp()
1111+ chroot_server.start_server()
1112 return get_transport(chroot_server.get_url())
1113
1114
1115@@ -74,17 +74,17 @@
1116 def __init__(self, *servers):
1117 self._servers = servers
1118
1119- def setUp(self):
1120+ def start_server(self):
1121 for server in self._servers:
1122- server.setUp()
1123+ server.start_server()
1124
1125 def destroy(self):
1126 for server in reversed(self._servers):
1127 server.destroy()
1128
1129- def tearDown(self):
1130+ def stop_server(self):
1131 for server in reversed(self._servers):
1132- server.tearDown()
1133+ server.stop_server()
1134
1135
1136 class AsyncVirtualTransport(Transport):
1137@@ -383,7 +383,7 @@
1138 # safely upcall it.
1139 # pylint: disable-msg=W0231
1140 self._scheme = scheme
1141- self._is_set_up = False
1142+ self._is_started = False
1143
1144 def _transportFactory(self, url):
1145 """Create a transport for this server pointing at `url`.
1146@@ -412,14 +412,14 @@
1147 """Return the URL of this server."""
1148 return self._scheme
1149
1150- def setUp(self):
1151- """See Server.setUp."""
1152+ def start_server(self):
1153+ """See Server.start_server."""
1154 register_transport(self.get_url(), self._transportFactory)
1155- self._is_set_up = True
1156+ self._is_started = True
1157
1158- def tearDown(self):
1159- """See Server.tearDown."""
1160- if not self._is_set_up:
1161+ def stop_server(self):
1162+ """See Server.stop_server."""
1163+ if not self._is_started:
1164 return
1165- self._is_set_up = False
1166+ self._is_started = False
1167 unregister_transport(self.get_url(), self._transportFactory)
1168
1169=== modified file 'lib/lp/testing/__init__.py'
1170--- lib/lp/testing/__init__.py 2010-02-02 11:26:31 +0000
1171+++ lib/lp/testing/__init__.py 2010-02-04 00:33:17 +0000
1172@@ -524,18 +524,39 @@
1173 server = get_multi_server(
1174 write_hosted=True, write_mirrored=True,
1175 direct_database=direct_database)
1176- server.setUp()
1177+ server.start_server()
1178 self.addCleanup(server.destroy)
1179 else:
1180 os.mkdir('lp-mirrored')
1181 mirror_server = FakeTransportServer(get_transport('lp-mirrored'))
1182- mirror_server.setUp()
1183- self.addCleanup(mirror_server.tearDown)
1184+ mirror_server.start_server()
1185+ self.addCleanup(mirror_server.stop_server)
1186 os.mkdir('lp-hosted')
1187 hosted_server = FakeTransportServer(
1188 get_transport('lp-hosted'), url_prefix='lp-hosted:///')
1189- hosted_server.setUp()
1190- self.addCleanup(hosted_server.tearDown)
1191+ hosted_server.start_server()
1192+ self.addCleanup(hosted_server.stop_server)
1193+
1194+
1195+class WindmillTestCase(TestCaseWithFactory):
1196+ """A TestCase class for Windmill tests.
1197+
1198+ It provides a WindmillTestClient (self.client) with Launchpad's front
1199+ page loaded.
1200+ """
1201+
1202+ suite_name = ''
1203+
1204+ def setUp(self):
1205+ TestCaseWithFactory.setUp(self)
1206+ self.client = WindmillTestClient(self.suite_name)
1207+ # Load the front page to make sure we don't get fooled by stale pages
1208+ # left by the previous test. (For some reason, when you create a new
1209+ # WindmillTestClient you get a new session and everything, but if you
1210+ # do anything before you open() something you'd be operating on the
1211+ # page that was last accessed by the previous test, which is the cause
1212+ # of things like https://launchpad.net/bugs/515494)
1213+ self.client.open(url=u'http://launchpad.dev:8085')
1214
1215
1216 class WindmillTestCase(TestCaseWithFactory):
1217
1218=== modified file 'lib/lp/translations/scripts/translations_to_branch.py'
1219--- lib/lp/translations/scripts/translations_to_branch.py 2010-01-10 04:29:39 +0000
1220+++ lib/lp/translations/scripts/translations_to_branch.py 2010-02-04 00:33:17 +0000
1221@@ -274,8 +274,8 @@
1222 productseries = productseries.order_by(ProductSeries.id)
1223
1224 bzrserver = get_multi_server(write_hosted=True)
1225- bzrserver.setUp()
1226+ bzrserver.start_server()
1227 try:
1228 self._exportToBranches(productseries)
1229 finally:
1230- bzrserver.tearDown()
1231+ bzrserver.stop_server()
1232
1233=== modified file 'scripts/branch-distro.py'
1234--- scripts/branch-distro.py 2009-10-23 16:15:35 +0000
1235+++ scripts/branch-distro.py 2010-02-04 00:33:17 +0000
1236@@ -26,7 +26,7 @@
1237 brancher = DistroBrancher.fromNames(self.logger, *self.args)
1238 server = get_multi_server(
1239 write_mirrored=True, write_hosted=True, direct_database=True)
1240- server.setUp()
1241+ server.start_server()
1242 try:
1243 if self.options.check:
1244 if not brancher.checkNewBranches():
1245@@ -34,7 +34,7 @@
1246 else:
1247 brancher.makeNewBranches()
1248 finally:
1249- server.tearDown()
1250+ server.stop_server()
1251
1252 if __name__ == '__main__':
1253 BranchDistroScript("branch-distro", dbuser='branch-distro').run()
1254
1255=== modified file 'scripts/update-stacked-on.py'
1256--- scripts/update-stacked-on.py 2009-10-13 14:38:07 +0000
1257+++ scripts/update-stacked-on.py 2010-02-04 00:33:17 +0000
1258@@ -94,14 +94,14 @@
1259
1260 def main(self):
1261 server = get_server(self.options.dry_run)
1262- server.setUp()
1263+ server.start_server()
1264 if self.options.dry_run:
1265 self.logger.debug('Running read-only')
1266 self.logger.debug('Beginning processing')
1267 try:
1268 self.updateBranches(self.parseFromStream(sys.stdin))
1269 finally:
1270- server.tearDown()
1271+ server.stop_server()
1272 self.logger.info('Done')
1273
1274 def updateStackedOn(self, branch_id, bzr_branch_url, stacked_on_location):
1275
1276=== modified file 'versions.cfg'
1277--- versions.cfg 2010-02-03 22:43:51 +0000
1278+++ versions.cfg 2010-02-04 00:33:17 +0000
1279@@ -5,8 +5,8 @@
1280 # Alphabetical, case-insensitive, please! :-)
1281
1282 ampoule = 0.2.0
1283-# Non-released bzr version from bzr+ssh://bazaar.launchpad.net/~mwhudson/bzr/2.1.0b4-lp2
1284-bzr = 2.1b4-lp2
1285+# From lp:~mwhudson/bzr/bzr-2.1.0rc2-lp-1 ('make dist' from r4807)
1286+bzr = 2.1.0rc2-lp-1
1287 chameleon.core = 1.0b35
1288 chameleon.zpt = 1.0b17
1289 ClientForm = 0.2.10