Merge lp:~wgrant/launchpad/bug-1524316 into lp:launchpad

Proposed by William Grant
Status: Merged
Merged at revision: 17868
Proposed branch: lp:~wgrant/launchpad/bug-1524316
Merge into: lp:launchpad
Diff against target: 136 lines (+83/-17)
2 files modified
lib/lp/code/model/gitrepository.py (+12/-11)
lib/lp/code/model/tests/test_gitrepository.py (+71/-6)
To merge this branch: bzr merge lp:~wgrant/launchpad/bug-1524316
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+280096@code.launchpad.net

Commit message

Fix setDefaultRepository(ForOwner) to cope with replacing an existing default.

Description of the change

Fix setDefaultRepository(ForOwner) to cope with replacing an existing default.

The owner variant also didn't handle no-ops, though this would never have been hit on production.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/code/model/gitrepository.py'
--- lib/lp/code/model/gitrepository.py 2015-10-09 16:56:45 +0000
+++ lib/lp/code/model/gitrepository.py 2015-12-10 00:33:48 +0000
@@ -1241,16 +1241,16 @@
1241 raise GitTargetError(1241 raise GitTargetError(
1242 "Cannot set a default Git repository for a person, only "1242 "Cannot set a default Git repository for a person, only "
1243 "for a project or a package.")1243 "for a project or a package.")
1244 if repository is not None:1244 if repository is not None and repository.target != target:
1245 if repository.target != target:1245 raise GitTargetError(
1246 raise GitTargetError(1246 "Cannot set default Git repository to one attached to "
1247 "Cannot set default Git repository to one attached to "1247 "another target.")
1248 "another target.")1248 previous = self.getDefaultRepository(target)
1249 repository.setTargetDefault(True)1249 if previous != repository:
1250 else:
1251 previous = self.getDefaultRepository(target)
1252 if previous is not None:1250 if previous is not None:
1253 previous.setTargetDefault(False)1251 previous.setTargetDefault(False)
1252 if repository is not None:
1253 repository.setTargetDefault(True)
12541254
1255 def setDefaultRepositoryForOwner(self, owner, target, repository, user):1255 def setDefaultRepositoryForOwner(self, owner, target, repository, user):
1256 """See `IGitRepositorySet`."""1256 """See `IGitRepositorySet`."""
@@ -1276,11 +1276,12 @@
1276 raise GitTargetError(1276 raise GitTargetError(
1277 "Cannot set a person's default Git repository to one "1277 "Cannot set a person's default Git repository to one "
1278 "owned by somebody else.")1278 "owned by somebody else.")
1279 repository.setOwnerDefault(True)1279 previous = self.getDefaultRepositoryForOwner(owner, target)
1280 else:1280 if previous != repository:
1281 previous = self.getDefaultRepositoryForOwner(owner, target)
1282 if previous is not None:1281 if previous is not None:
1283 previous.setOwnerDefault(False)1282 previous.setOwnerDefault(False)
1283 if repository is not None:
1284 repository.setOwnerDefault(True)
12841285
1285 def empty_list(self):1286 def empty_list(self):
1286 """See `IGitRepositorySet`."""1287 """See `IGitRepositorySet`."""
12871288
=== modified file 'lib/lp/code/model/tests/test_gitrepository.py'
--- lib/lp/code/model/tests/test_gitrepository.py 2015-11-02 15:31:39 +0000
+++ lib/lp/code/model/tests/test_gitrepository.py 2015-12-10 00:33:48 +0000
@@ -2074,16 +2074,81 @@
2074 self.repository_set.setDefaultRepositoryForOwner,2074 self.repository_set.setDefaultRepositoryForOwner,
2075 person, person, repository, user)2075 person, person, repository, user)
20762076
2077 def test_setDefaultRepository_for_same_targetdefault_noops(self):2077 def test_setDefaultRepositoryForOwner_noop(self):
2078 # If a repository is already the target default,2078 # If a repository is already the target owner default, setting
2079 # setting the defaultRepository again should no-op.2079 # the default again should no-op.
2080 owner = self.factory.makePerson()
2081 target = self.factory.makeProduct()
2082 repo = self.factory.makeGitRepository(owner=owner, target=target)
2083 with person_logged_in(owner):
2084 self.repository_set.setDefaultRepositoryForOwner(
2085 owner, target, repo, owner)
2086 self.assertEqual(
2087 repo,
2088 self.repository_set.getDefaultRepositoryForOwner(
2089 owner, target))
2090 self.repository_set.setDefaultRepositoryForOwner(
2091 owner, target, repo, owner)
2092 self.assertEqual(
2093 repo,
2094 self.repository_set.getDefaultRepositoryForOwner(
2095 owner, target))
2096
2097 def test_setDefaultRepositoryForOwner_replaces_old(self):
2098 # If another repository is already the target owner default,
2099 # setting it overwrites.
2100 owner = self.factory.makePerson()
2101 target = self.factory.makeProduct()
2102 repo1 = self.factory.makeGitRepository(owner=owner, target=target)
2103 repo2 = self.factory.makeGitRepository(owner=owner, target=target)
2104 with person_logged_in(owner):
2105 self.repository_set.setDefaultRepositoryForOwner(
2106 owner, target, repo1, owner)
2107 self.assertEqual(
2108 repo1,
2109 self.repository_set.getDefaultRepositoryForOwner(
2110 owner, target))
2111 self.assertTrue(repo1.owner_default)
2112 self.assertFalse(repo2.owner_default)
2113 self.repository_set.setDefaultRepositoryForOwner(
2114 owner, target, repo2, owner)
2115 self.assertEqual(
2116 repo2,
2117 self.repository_set.getDefaultRepositoryForOwner(
2118 owner, target))
2119 self.assertFalse(repo1.owner_default)
2120 self.assertTrue(repo2.owner_default)
2121
2122 def test_setDefaultRepository_noop(self):
2123 # If a repository is already the target default, setting the
2124 # default again should no-op.
2080 project = self.factory.makeProduct()2125 project = self.factory.makeProduct()
2081 repository = self.factory.makeGitRepository(target=project)2126 repository = self.factory.makeGitRepository(target=project)
2082 with person_logged_in(project.owner):2127 with person_logged_in(project.owner):
2083 self.repository_set.setDefaultRepository(project, repository)2128 self.repository_set.setDefaultRepository(project, repository)
2084 result = self.repository_set.setDefaultRepository(2129 self.assertEqual(
2085 project, repository)2130 repository, self.repository_set.getDefaultRepository(project))
2086 self.assertEqual(None, result)2131 self.repository_set.setDefaultRepository(project, repository)
2132 self.assertEqual(
2133 repository, self.repository_set.getDefaultRepository(project))
2134
2135 def test_setDefaultRepository_replaces_old(self):
2136 # If another repository is already the target default, setting
2137 # it overwrites.
2138 project = self.factory.makeProduct()
2139 repo1 = self.factory.makeGitRepository(target=project)
2140 repo2 = self.factory.makeGitRepository(target=project)
2141 with person_logged_in(project.owner):
2142 self.repository_set.setDefaultRepository(project, repo1)
2143 self.assertEqual(
2144 repo1, self.repository_set.getDefaultRepository(project))
2145 self.assertTrue(repo1.target_default)
2146 self.assertFalse(repo2.target_default)
2147 self.repository_set.setDefaultRepository(project, repo2)
2148 self.assertEqual(
2149 repo2, self.repository_set.getDefaultRepository(project))
2150 self.assertFalse(repo1.target_default)
2151 self.assertTrue(repo2.target_default)
20872152
20882153
2089class TestGitRepositorySetDefaultsMixin:2154class TestGitRepositorySetDefaultsMixin: