Merge lp:~cjwatson/launchpad/git-fix-clone-from-owner-default into lp:launchpad

Proposed by Colin Watson on 2015-04-28
Status: Merged
Merged at revision: 17459
Proposed branch: lp:~cjwatson/launchpad/git-fix-clone-from-owner-default
Merge into: lp:launchpad
Diff against target: 87 lines (+35/-18)
2 files modified
lib/lp/code/xmlrpc/git.py (+9/-6)
lib/lp/code/xmlrpc/tests/test_git.py (+26/-12)
To merge this branch: bzr merge lp:~cjwatson/launchpad/git-fix-clone-from-owner-default
Reviewer Review Type Date Requested Status
William Grant code 2015-04-28 Approve on 2015-04-28
Review via email: mp+257622@code.launchpad.net

Commit Message

Fix code to get the owner default repository if there is no target default.

Description of the Change

The code to find the owner default if there's no target default used the wrong IGitRepositorySet method. This fixes it and adds a test.

To post a comment you must log in.
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/code/xmlrpc/git.py'
2--- lib/lp/code/xmlrpc/git.py 2015-04-28 04:48:55 +0000
3+++ lib/lp/code/xmlrpc/git.py 2015-04-28 10:32:26 +0000
4@@ -200,12 +200,15 @@
5 # If repository has target_default, clone from default.
6 target_path = None
7 try:
8- target_default = self.repository_set.getDefaultRepository(
9- repository.target) or (
10- self.repository_set.getDefaultRepository(
11- repository.owner))
12- if target_default and target_default.visibleByUser(requester):
13- target_path = target_default.getInternalPath()
14+ default = self.repository_set.getDefaultRepository(
15+ repository.target)
16+ if default is not None and default.visibleByUser(requester):
17+ target_path = default.getInternalPath()
18+ else:
19+ default = self.repository_set.getDefaultRepositoryForOwner(
20+ repository.owner, repository.target)
21+ if default is not None and default.visibleByUser(requester):
22+ target_path = default.getInternalPath()
23 except GitTargetError:
24 pass # Ignore Personal repositories.
25
26
27=== modified file 'lib/lp/code/xmlrpc/tests/test_git.py'
28--- lib/lp/code/xmlrpc/tests/test_git.py 2015-04-28 04:48:55 +0000
29+++ lib/lp/code/xmlrpc/tests/test_git.py 2015-04-28 10:32:26 +0000
30@@ -217,13 +217,12 @@
31 self.git_api.hosting_client.calls[0][0:2])
32 return repository
33
34- def assertCreatesFromClone(self, requester, path, can_authenticate=False):
35- repository = self.assertCreates(requester, path, can_authenticate)
36- target_default = removeSecurityProxy(
37- self.repository_set.getDefaultRepository(repository.target))
38- self.assertIsNotNone(target_default)
39- self.assertEqual(target_default.getInternalPath(),
40- self.git_api.hosting_client.calls[0][2])
41+ def assertCreatesFromClone(self, requester, path, cloned_from,
42+ can_authenticate=False):
43+ self.assertCreates(requester, path, can_authenticate)
44+ self.assertEqual(
45+ cloned_from.getInternalPath(),
46+ self.git_api.hosting_client.calls[0][2])
47
48 def test_translatePath_private_repository(self):
49 requester = self.factory.makePerson()
50@@ -427,17 +426,32 @@
51 self.assertCreates(
52 requester, u"/~%s/%s/+git/random" % (requester.name, project.name))
53
54- def test_translatePath_create_project_with_default_target(self):
55- # translatePath creates a project repository cloned from the
56- # target default if it exists.
57+ def test_translatePath_create_project_clone_from_target_default(self):
58+ # translatePath creates a project repository cloned from the target
59+ # default if it exists.
60 target = self.factory.makeProduct()
61 repository = self.factory.makeGitRepository(
62 owner=target.owner, target=target)
63 with person_logged_in(target.owner):
64 self.repository_set.setDefaultRepository(target, repository)
65 self.assertCreatesFromClone(
66- target.owner, u"/~%s/%s/+git/random" % (target.owner.name,
67- target.name))
68+ target.owner,
69+ u"/~%s/%s/+git/random" % (target.owner.name, target.name),
70+ repository)
71+
72+ def test_translatePath_create_project_clone_from_owner_default(self):
73+ # translatePath creates a project repository cloned from the owner
74+ # default if it exists and the target default does not.
75+ target = self.factory.makeProduct()
76+ repository = self.factory.makeGitRepository(
77+ owner=target.owner, target=target)
78+ with person_logged_in(target.owner):
79+ self.repository_set.setDefaultRepositoryForOwner(
80+ target.owner, target, repository)
81+ self.assertCreatesFromClone(
82+ target.owner,
83+ u"/~%s/%s/+git/random" % (target.owner.name, target.name),
84+ repository)
85
86 def test_translatePath_create_package(self):
87 # translatePath creates a package repository that doesn't exist, if