Merge lp:~cjwatson/launchpad/fix-git-prerequisite into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 17845
Proposed branch: lp:~cjwatson/launchpad/fix-git-prerequisite
Merge into: lp:launchpad
Diff against target: 111 lines (+35/-16)
4 files modified
lib/lp/code/browser/tests/test_branchmergeproposal.py (+24/-0)
lib/lp/code/model/diff.py (+5/-12)
lib/lp/code/model/githosting.py (+5/-3)
lib/lp/code/templates/branchmergeproposal-pagelet-summary.pt (+1/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad/fix-git-prerequisite
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+277281@code.launchpad.net

Commit message

Handle prerequisites in Git-based merge proposals.

Description of the change

Handle prerequisites in Git-based merge proposals.

The corresponding turnip change is now live on qastaging, and there's what should be an XS ticket (RT#86272) to upgrade production.

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

And I've fixed the conflicts now, whoops.

Revision history for this message
Colin Watson (cjwatson) wrote :

The corresponding turnip change has now been rolled out to production, so this should be good to go now.

Revision history for this message
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/browser/tests/test_branchmergeproposal.py'
2--- lib/lp/code/browser/tests/test_branchmergeproposal.py 2015-10-05 17:02:20 +0000
3+++ lib/lp/code/browser/tests/test_branchmergeproposal.py 2015-11-11 18:30:32 +0000
4@@ -11,6 +11,7 @@
5 timedelta,
6 )
7 from difflib import unified_diff
8+import re
9
10 from lazr.lifecycle.event import ObjectModifiedEvent
11 from lazr.restful.interfaces import IJSONRequestCache
12@@ -1484,6 +1485,29 @@
13 self.assertThat(browser.contents, HTMLContains(expected_meta))
14
15
16+class TestBranchMergeProposalBrowserView(BrowserTestCase):
17+
18+ layer = DatabaseFunctionalLayer
19+
20+ def test_prerequisite_bzr(self):
21+ # A prerequisite branch is rendered in the Bazaar case.
22+ branch = self.factory.makeProductBranch()
23+ identity = branch.identity
24+ bmp = self.factory.makeBranchMergeProposal(prerequisite_branch=branch)
25+ text = self.getMainText(bmp, '+index')
26+ self.assertTextMatchesExpressionIgnoreWhitespace(
27+ 'Prerequisite: ' + re.escape(identity), text)
28+
29+ def test_prerequisite_git(self):
30+ # A prerequisite reference is rendered in the Git case.
31+ [ref] = self.factory.makeGitRefs()
32+ identity = ref.identity
33+ bmp = self.factory.makeBranchMergeProposalForGit(prerequisite_ref=ref)
34+ text = self.getMainText(bmp, '+index')
35+ self.assertTextMatchesExpressionIgnoreWhitespace(
36+ 'Prerequisite: ' + re.escape(identity), text)
37+
38+
39 class TestBranchMergeProposalChangeStatusView(TestCaseWithFactory):
40 """Test the +edit-status view."""
41
42
43=== modified file 'lib/lp/code/model/diff.py'
44--- lib/lp/code/model/diff.py 2015-07-09 20:06:17 +0000
45+++ lib/lp/code/model/diff.py 2015-11-11 18:30:32 +0000
46@@ -450,22 +450,15 @@
47 path = "%s:%s" % (
48 target_repository.getInternalPath(),
49 source_repository.getInternalPath())
50- # XXX cjwatson 2015-04-30: Add prerequisite handling once turnip
51- # supports it.
52 response = getUtility(IGitHostingClient).getMergeDiff(
53- path, bmp.target_git_ref.commit_sha1,
54- bmp.source_git_ref.commit_sha1)
55- source_revision_id = bmp.source_git_ref.commit_sha1
56- target_revision_id = bmp.target_git_ref.commit_sha1
57- if bmp.prerequisite_git_ref is not None:
58- prerequisite_revision_id = bmp.prerequisite_git_ref.commit_sha1
59- else:
60- prerequisite_revision_id = None
61+ path, bmp.target_git_commit_sha1, bmp.source_git_commit_sha1,
62+ prerequisite=bmp.prerequisite_git_commit_sha1)
63 conflicts = u"".join(
64 u"Conflict in %s\n" % path for path in response['conflicts'])
65 preview = cls.create(
66- bmp, response['patch'].encode('utf-8'), source_revision_id,
67- target_revision_id, prerequisite_revision_id, conflicts,
68+ bmp, response['patch'].encode('utf-8'),
69+ bmp.source_git_commit_sha1, bmp.target_git_commit_sha1,
70+ bmp.prerequisite_git_commit_sha1, conflicts,
71 strip_prefix_segments=1)
72 del get_property_cache(bmp).preview_diffs
73 del get_property_cache(bmp).preview_diff
74
75=== modified file 'lib/lp/code/model/githosting.py'
76--- lib/lp/code/model/githosting.py 2015-10-05 04:57:16 +0000
77+++ lib/lp/code/model/githosting.py 2015-11-11 18:30:32 +0000
78@@ -125,15 +125,17 @@
79 "Failed to get commit details from Git repository: %s" %
80 unicode(e))
81
82- def getMergeDiff(self, path, base, head, logger=None):
83+ def getMergeDiff(self, path, base, head, prerequisite=None, logger=None):
84 """See `IGitHostingClient`."""
85 try:
86 if logger is not None:
87 logger.info(
88 "Requesting merge diff for %s from %s to %s" % (
89 path, base, head))
90- return self._get(
91- "/repo/%s/compare-merge/%s:%s" % (path, base, head))
92+ url = "/repo/%s/compare-merge/%s:%s" % (path, base, head)
93+ if prerequisite is not None:
94+ url += "?sha1_prerequisite=%s" % prerequisite
95+ return self._get(url)
96 except Exception as e:
97 raise GitRepositoryScanFault(
98 "Failed to get merge diff from Git repository: %s" %
99
100=== modified file 'lib/lp/code/templates/branchmergeproposal-pagelet-summary.pt'
101--- lib/lp/code/templates/branchmergeproposal-pagelet-summary.pt 2015-06-10 10:25:28 +0000
102+++ lib/lp/code/templates/branchmergeproposal-pagelet-summary.pt 2015-11-11 18:30:32 +0000
103@@ -110,7 +110,7 @@
104 <td tal:content="structure context/merge_target/fmt:link">lp:~foo/bar/baz</td>
105 </tr>
106 <tr id="summary-row-a-prerequisite-branch"
107- tal:condition="context/prerequisite_branch">
108+ tal:condition="context/merge_prerequisite">
109 <th>Prerequisite:</th>
110 <td tal:content="structure context/merge_prerequisite/fmt:link">lp:~foo/bar/baz</td>
111 </tr>