Merge lp:~thumper/launchpad/bzr-format-matching-refactoring into lp:launchpad

Proposed by Tim Penhey
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: no longer in the source branch.
Merged at revision: 11242
Proposed branch: lp:~thumper/launchpad/bzr-format-matching-refactoring
Merge into: lp:launchpad
Prerequisite: lp:~thumper/launchpad/stop-factory-mirroring
Diff against target: 238 lines (+103/-37)
5 files modified
lib/lp/code/bzr.py (+30/-3)
lib/lp/code/enums.py (+0/-9)
lib/lp/code/model/branchjob.py (+3/-17)
lib/lp/code/tests/test_bzr.py (+66/-0)
lib/lp/code/xmlrpc/codehosting.py (+4/-8)
To merge this branch: bzr merge lp:~thumper/launchpad/bzr-format-matching-refactoring
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle Approve
Review via email: mp+31014@code.launchpad.net

Commit message

Refactored the way to get enumerated values for the bazaar formats.

Description of the change

Simplify the say to get the enumerated values for bzr formats.

This will be used in the merge directive handling in the code mail handler, but can be reviewed independently.

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

As discussed on IRC, 'default' means something different for branch formats already, so please change the tests to talk about 'unrecognized' format strings. Otherwise, thanks! Something like this change was overdue :-)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/code/bzr.py'
--- lib/lp/code/bzr.py 2010-02-17 01:37:22 +0000
+++ lib/lp/code/bzr.py 2010-07-27 05:12:51 +0000
@@ -9,6 +9,7 @@
9 'ControlFormat',9 'ControlFormat',
10 'CURRENT_BRANCH_FORMATS',10 'CURRENT_BRANCH_FORMATS',
11 'CURRENT_REPOSITORY_FORMATS',11 'CURRENT_REPOSITORY_FORMATS',
12 'get_branch_formats',
12 'RepositoryFormat',13 'RepositoryFormat',
13 ]14 ]
1415
@@ -45,7 +46,20 @@
45 return DBItem(num, format_string, description)46 return DBItem(num, format_string, description)
4647
4748
48class BranchFormat(DBEnumeratedType):49class BazaarFormatEnum(DBEnumeratedType):
50 """Base class for the format enums."""
51
52 @classmethod
53 def get_enum(klass, format_name):
54 """Find the matching enum value for the format name specified."""
55 for value in klass.items:
56 if value.title == format_name:
57 return value
58 else:
59 return klass.UNRECOGNIZED
60
61
62class BranchFormat(BazaarFormatEnum):
49 """Branch on-disk format.63 """Branch on-disk format.
5064
51 This indicates which (Bazaar) format is used on-disk. The list must be65 This indicates which (Bazaar) format is used on-disk. The list must be
@@ -81,7 +95,7 @@
81 107, "Bazaar-NG Loom branch format 7\n", "Loom branch format 7")95 107, "Bazaar-NG Loom branch format 7\n", "Loom branch format 7")
8296
8397
84class RepositoryFormat(DBEnumeratedType):98class RepositoryFormat(BazaarFormatEnum):
85 """Repository on-disk format.99 """Repository on-disk format.
86100
87 This indicates which (Bazaar) format is used on-disk. The list must be101 This indicates which (Bazaar) format is used on-disk. The list must be
@@ -194,7 +208,7 @@
194 BZR_CHK_2A = _format_enum(415, RepositoryFormat2a)208 BZR_CHK_2A = _format_enum(415, RepositoryFormat2a)
195209
196210
197class ControlFormat(DBEnumeratedType):211class ControlFormat(BazaarFormatEnum):
198 """Control directory (BzrDir) format.212 """Control directory (BzrDir) format.
199213
200 This indicates what control directory format is on disk. Must be updated214 This indicates what control directory format is on disk. Must be updated
@@ -236,3 +250,16 @@
236 RepositoryFormat.BZR_CHK1,250 RepositoryFormat.BZR_CHK1,
237 RepositoryFormat.BZR_CHK2,251 RepositoryFormat.BZR_CHK2,
238 RepositoryFormat.BZR_CHK_2A)252 RepositoryFormat.BZR_CHK_2A)
253
254
255def get_branch_formats(bzr_branch):
256 """Return a tuple of format enumerations for the bazaar branch.
257
258 :returns: tuple of (ControlFormat, BranchFormat, RepositoryFormat)
259 """
260 control_string = bzr_branch.bzrdir._format.get_format_string()
261 branch_string = bzr_branch._format.get_format_string()
262 repository_string = bzr_branch.repository._format.get_format_string()
263 return (ControlFormat.get_enum(control_string),
264 BranchFormat.get_enum(branch_string),
265 RepositoryFormat.get_enum(repository_string))
239266
=== modified file 'lib/lp/code/enums.py'
--- lib/lp/code/enums.py 2010-06-11 03:52:02 +0000
+++ lib/lp/code/enums.py 2010-07-27 05:12:51 +0000
@@ -22,7 +22,6 @@
22 'CodeImportReviewStatus',22 'CodeImportReviewStatus',
23 'CodeReviewNotificationLevel',23 'CodeReviewNotificationLevel',
24 'CodeReviewVote',24 'CodeReviewVote',
25 'match_enum_title',
26 'RevisionControlSystems',25 'RevisionControlSystems',
27 'TeamBranchVisibilityRule',26 'TeamBranchVisibilityRule',
28 'UICreatableBranchType',27 'UICreatableBranchType',
@@ -32,14 +31,6 @@
32 DBEnumeratedType, DBItem, EnumeratedType, Item, use_template)31 DBEnumeratedType, DBItem, EnumeratedType, Item, use_template)
3332
3433
35def match_enum_title(enum, title, default):
36 for value in enum.items:
37 if value.title == title:
38 return value
39 else:
40 return default
41
42
43class BranchLifecycleStatus(DBEnumeratedType):34class BranchLifecycleStatus(DBEnumeratedType):
44 """Branch Lifecycle Status35 """Branch Lifecycle Status
4536
4637
=== modified file 'lib/lp/code/model/branchjob.py'
--- lib/lp/code/model/branchjob.py 2010-06-11 03:52:02 +0000
+++ lib/lp/code/model/branchjob.py 2010-07-27 05:12:51 +0000
@@ -46,8 +46,7 @@
46from canonical.database.enumcol import EnumCol46from canonical.database.enumcol import EnumCol
47from canonical.database.sqlbase import SQLBase47from canonical.database.sqlbase import SQLBase
48from canonical.launchpad.webapp import canonical_url, errorlog48from canonical.launchpad.webapp import canonical_url, errorlog
49from lp.code.bzr import BranchFormat, ControlFormat, RepositoryFormat49from lp.code.bzr import get_branch_formats
50from lp.code.enums import match_enum_title
51from lp.code.model.branch import Branch50from lp.code.model.branch import Branch
52from lp.code.model.branchmergeproposal import BranchMergeProposal51from lp.code.model.branchmergeproposal import BranchMergeProposal
53from lp.code.model.diff import StaticDiff52from lp.code.model.diff import StaticDiff
@@ -369,25 +368,12 @@
369 source_branch = BzrBranch.open_from_transport(368 source_branch = BzrBranch.open_from_transport(
370 source_branch_transport)369 source_branch_transport)
371370
372 control_format = match_enum_title(371 formats = get_branch_formats(source_branch)
373 ControlFormat,
374 source_branch.bzrdir._format.get_format_string(),
375 ControlFormat.UNRECOGNIZED)
376 branch_format = match_enum_title(
377 BranchFormat,
378 source_branch._format.get_format_string(),
379 BranchFormat.UNRECOGNIZED)
380 repository_format = match_enum_title(
381 RepositoryFormat,
382 source_branch.repository._format.get_format_string(),
383 RepositoryFormat.UNRECOGNIZED)
384372
385 self.branch.branchChanged(373 self.branch.branchChanged(
386 self.branch.stacked_on,374 self.branch.stacked_on,
387 self.branch.last_scanned_id,375 self.branch.last_scanned_id,
388 control_format,376 *formats)
389 branch_format,
390 repository_format)
391 finally:377 finally:
392 shutil.rmtree(upgrade_branch_path)378 shutil.rmtree(upgrade_branch_path)
393379
394380
=== added file 'lib/lp/code/tests/test_bzr.py'
--- lib/lp/code/tests/test_bzr.py 1970-01-01 00:00:00 +0000
+++ lib/lp/code/tests/test_bzr.py 2010-07-27 05:12:51 +0000
@@ -0,0 +1,66 @@
1# Copyright 2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4"""Tests for lp.code.bzr."""
5
6__metaclass__ = type
7
8from lp.code.bzr import (
9 BranchFormat, ControlFormat, get_branch_formats, RepositoryFormat)
10from lp.testing import TestCase
11from bzrlib.tests import TestCaseInTempDir
12
13
14class TestBazaarFormatEnum(TestCase):
15 """Tests for the bazaar formats."""
16
17 def test_branch_format_unrecognized(self):
18 # Unknown branch formats are unrecognized.
19 format = BranchFormat.get_enum('no-idea')
20 self.assertEqual(BranchFormat.UNRECOGNIZED, format)
21
22 def test_control_format_unrecognized(self):
23 # Unknown control formats are unrecognized.
24 format = ControlFormat.get_enum('no-idea')
25 self.assertEqual(ControlFormat.UNRECOGNIZED, format)
26
27 def test_repository_format_unrecognized(self):
28 # Unknown repository formats are unrecognized.
29 format = RepositoryFormat.get_enum('no-idea')
30 self.assertEqual(RepositoryFormat.UNRECOGNIZED, format)
31
32
33class TestGetBranchFormats(TestCaseInTempDir):
34 """Tests for lp.code.bzr.get_branch_formats."""
35
36 def test_get_branch_format_2a(self):
37 # Test the 2a branch format.
38 branch = self.make_branch('test', '2a')
39 formats = get_branch_formats(branch)
40 self.assertEqual(ControlFormat.BZR_METADIR_1, formats[0])
41 self.assertEqual(BranchFormat.BZR_BRANCH_7, formats[1])
42 self.assertEqual(RepositoryFormat.BZR_CHK_2A, formats[2])
43
44 def test_get_branch_format_1_9(self):
45 # Test the 1.9 branch format.
46 branch = self.make_branch('test', '1.9')
47 formats = get_branch_formats(branch)
48 self.assertEqual(ControlFormat.BZR_METADIR_1, formats[0])
49 self.assertEqual(BranchFormat.BZR_BRANCH_7, formats[1])
50 self.assertEqual(RepositoryFormat.BZR_KNITPACK_6, formats[2])
51
52 def test_get_branch_format_packs(self):
53 # Test the packs branch format.
54 branch = self.make_branch('test', 'pack-0.92')
55 formats = get_branch_formats(branch)
56 self.assertEqual(ControlFormat.BZR_METADIR_1, formats[0])
57 self.assertEqual(BranchFormat.BZR_BRANCH_6, formats[1])
58 self.assertEqual(RepositoryFormat.BZR_KNITPACK_1, formats[2])
59
60 def test_get_branch_format_knits(self):
61 # Test the knits branch format.
62 branch = self.make_branch('test', 'knit')
63 formats = get_branch_formats(branch)
64 self.assertEqual(ControlFormat.BZR_METADIR_1, formats[0])
65 self.assertEqual(BranchFormat.BZR_BRANCH_5, formats[1])
66 self.assertEqual(RepositoryFormat.BZR_KNIT_1, formats[2])
067
=== modified file 'lib/lp/code/xmlrpc/codehosting.py'
--- lib/lp/code/xmlrpc/codehosting.py 2010-06-11 03:52:02 +0000
+++ lib/lp/code/xmlrpc/codehosting.py 2010-07-27 05:12:51 +0000
@@ -33,7 +33,7 @@
3333
34from lp.code.errors import UnknownBranchTypeError34from lp.code.errors import UnknownBranchTypeError
35from lp.code.bzr import BranchFormat, ControlFormat, RepositoryFormat35from lp.code.bzr import BranchFormat, ControlFormat, RepositoryFormat
36from lp.code.enums import BranchType, match_enum_title36from lp.code.enums import BranchType
37from lp.code.interfaces.branch import BranchCreationException37from lp.code.interfaces.branch import BranchCreationException
38from lp.code.interfaces.branchlookup import IBranchLookup38from lp.code.interfaces.branchlookup import IBranchLookup
39from lp.code.interfaces.branchnamespace import (39from lp.code.interfaces.branchnamespace import (
@@ -206,13 +206,9 @@
206 if branch is None:206 if branch is None:
207 return faults.NoBranchWithID(branch_id)207 return faults.NoBranchWithID(branch_id)
208208
209 control_format = match_enum_title(209 control_format = ControlFormat.get_enum(control_string)
210 ControlFormat, control_string, ControlFormat.UNRECOGNIZED)210 branch_format = BranchFormat.get_enum(branch_string)
211 branch_format = match_enum_title(211 repository_format = RepositoryFormat.get_enum(repository_string)
212 BranchFormat, branch_string, BranchFormat.UNRECOGNIZED)
213 repository_format = match_enum_title(
214 RepositoryFormat, repository_string,
215 RepositoryFormat.UNRECOGNIZED)
216212
217 if requester == LAUNCHPAD_SERVICES:213 if requester == LAUNCHPAD_SERVICES:
218 branch = removeSecurityProxy(branch)214 branch = removeSecurityProxy(branch)