Merge lp:~cjwatson/launchpad/git-repository-getRule into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18805
Proposed branch: lp:~cjwatson/launchpad/git-repository-getRule
Merge into: lp:launchpad
Diff against target: 72 lines (+26/-3)
4 files modified
lib/lp/code/interfaces/gitrepository.py (+7/-0)
lib/lp/code/model/gitref.py (+1/-3)
lib/lp/code/model/gitrepository.py (+4/-0)
lib/lp/code/model/tests/test_gitrepository.py (+14/-0)
To merge this branch: bzr merge lp:~cjwatson/launchpad/git-repository-getRule
Reviewer Review Type Date Requested Status
Tom Wardill (community) Approve
Launchpad code reviewers Pending
Review via email: mp+357625@code.launchpad.net

Commit message

Add IGitRepository.getRule.

Description of the change

This may be handy for the UI (GitRef:+permissions will want to distinguish a rule that matches the ref path exactly), but it also seems like a reasonable thing to have in general.

To post a comment you must log in.
Revision history for this message
Tom Wardill (twom) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/code/interfaces/gitrepository.py'
--- lib/lp/code/interfaces/gitrepository.py 2018-10-22 10:37:03 +0000
+++ lib/lp/code/interfaces/gitrepository.py 2018-10-22 12:52:35 +0000
@@ -622,6 +622,13 @@
622 :return: The diff as a binary string.622 :return: The diff as a binary string.
623 """623 """
624624
625 def getRule(ref_pattern):
626 """Get the access rule for this repository with a given pattern.
627
628 :param ref_pattern: The reference pattern that the rule should have.
629 :return: An `IGitRule`, or None.
630 """
631
625 def getActivity(changed_after=None):632 def getActivity(changed_after=None):
626 """Get activity log entries for this repository.633 """Get activity log entries for this repository.
627634
628635
=== modified file 'lib/lp/code/model/gitref.py'
--- lib/lp/code/model/gitref.py 2018-10-16 15:29:37 +0000
+++ lib/lp/code/model/gitref.py 2018-10-22 12:52:35 +0000
@@ -434,9 +434,7 @@
434434
435 def setGrants(self, grants, user):435 def setGrants(self, grants, user):
436 """See `IGitRef`."""436 """See `IGitRef`."""
437 rule = Store.of(self).find(437 rule = self.repository.getRule(self.path)
438 GitRule, GitRule.repository_id == self.repository_id,
439 GitRule.ref_pattern == self.path).one()
440 if rule is None:438 if rule is None:
441 # We don't need to worry about position, since this is an439 # We don't need to worry about position, since this is an
442 # exact-match rule and therefore has a canonical position.440 # exact-match rule and therefore has a canonical position.
443441
=== modified file 'lib/lp/code/model/gitrepository.py'
--- lib/lp/code/model/gitrepository.py 2018-10-22 10:37:03 +0000
+++ lib/lp/code/model/gitrepository.py 2018-10-22 12:52:35 +0000
@@ -1156,6 +1156,10 @@
1156 if rule.position != position:1156 if rule.position != position:
1157 removeSecurityProxy(rule).position = position1157 removeSecurityProxy(rule).position = position
11581158
1159 def getRule(self, ref_pattern):
1160 """See `IGitRepository`."""
1161 return self.rules.find(GitRule.ref_pattern == ref_pattern).one()
1162
1159 def addRule(self, ref_pattern, creator, position=None):1163 def addRule(self, ref_pattern, creator, position=None):
1160 """See `IGitRepository`."""1164 """See `IGitRepository`."""
1161 rules = list(self.rules)1165 rules = list(self.rules)
11621166
=== modified file 'lib/lp/code/model/tests/test_gitrepository.py'
--- lib/lp/code/model/tests/test_gitrepository.py 2018-10-22 10:37:03 +0000
+++ lib/lp/code/model/tests/test_gitrepository.py 2018-10-22 12:52:35 +0000
@@ -2375,6 +2375,20 @@
2375 ref_pattern="refs/heads/stable/*"),2375 ref_pattern="refs/heads/stable/*"),
2376 ]))2376 ]))
23772377
2378 def test_getRule(self):
2379 repository = self.factory.makeGitRepository()
2380 self.factory.makeGitRefs(
2381 repository=repository, paths=["refs/heads/master"])
2382 other_repository = self.factory.makeGitRepository()
2383 master_rule = self.factory.makeGitRule(
2384 repository=repository, ref_pattern="refs/heads/master")
2385 self.factory.makeGitRule(
2386 repository=repository, ref_pattern="refs/heads/*")
2387 self.factory.makeGitRule(
2388 repository=other_repository, ref_pattern="refs/heads/master")
2389 self.assertEqual(master_rule, repository.getRule("refs/heads/master"))
2390 self.assertIsNone(repository.getRule("refs/heads/other"))
2391
2378 def test_addRule_append(self):2392 def test_addRule_append(self):
2379 repository = self.factory.makeGitRepository()2393 repository = self.factory.makeGitRepository()
2380 initial_rule = self.factory.makeGitRule(2394 initial_rule = self.factory.makeGitRule(