Tom Wardill has proposed merging lp:~twom/launchpad/pending-but-not-merged into 
lp:launchpad.

Commit message:
Don't show merged or otherwise inactive landing targets on the gitrepository 
page

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~twom/launchpad/pending-but-not-merged/+merge/354108
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~twom/launchpad/pending-but-not-merged into lp:launchpad.
=== modified file 'lib/lp/code/browser/gitrepository.py'
--- lib/lp/code/browser/gitrepository.py	2018-08-30 14:54:37 +0000
+++ lib/lp/code/browser/gitrepository.py	2018-08-31 11:44:12 +0000
@@ -397,6 +397,12 @@
         targets = self.context.getPrecachedLandingTargets(self.user)
         return latest_proposals_for_each_branch(targets)
 
+    @cachedproperty
+    def active_landing_targets(self):
+        targets = self.context.getPrecachedLandingTargets(
+            self.user, ignore_merged=True)
+        return latest_proposals_for_each_branch(targets)
+
 
 class GitRepositoryEditFormView(LaunchpadEditFormView):
     """Base class for forms that edit a Git repository."""

=== modified file 'lib/lp/code/browser/tests/test_gitrepository.py'
--- lib/lp/code/browser/tests/test_gitrepository.py	2018-08-31 06:29:29 +0000
+++ lib/lp/code/browser/tests/test_gitrepository.py	2018-08-31 11:44:12 +0000
@@ -296,6 +296,27 @@
                 self.assertIsNotNone(
                     find_tag_by_id(browser.contents, 'landing-targets'))
 
+    def test_view_with_inactive_landing_targets(self):
+        product = self.factory.makeProduct(name="foo", vcs=VCSType.GIT)
+        target_repository = self.factory.makeGitRepository(target=product)
+        source_repository = self.factory.makeGitRepository(target=product)
+        target_git_refs = self.factory.makeGitRefs(
+            target_repository,
+            paths=["refs/heads/master", "refs/heads/1.0", "refs/tags/1.1"])
+        source_git_refs = self.factory.makeGitRefs(
+            source_repository,
+            paths=["refs/heads/master"])
+        self.factory.makeBranchMergeProposalForGit(
+            target_ref=target_git_refs[0],
+            source_ref=source_git_refs[0],
+            set_state=BranchMergeProposalStatus.MERGED)
+        with FeatureFixture({"code.git.show_repository_mps": "on"}):
+            with person_logged_in(target_repository.owner):
+                browser = self.getViewBrowser(
+                    source_repository, user=source_repository.owner)
+                self.assertIsNone(
+                    find_tag_by_id(browser.contents, 'landing-targets'))
+
 
 class TestGitRepositoryViewPrivateArtifacts(BrowserTestCase):
     """Tests that Git repositories with private team artifacts can be viewed.

=== modified file 'lib/lp/code/model/gitrepository.py'
--- lib/lp/code/model/gitrepository.py	2018-08-29 17:11:57 +0000
+++ lib/lp/code/model/gitrepository.py	2018-08-31 11:44:12 +0000
@@ -887,10 +887,15 @@
             BranchMergeProposal,
             BranchMergeProposal.source_git_repository == self)
 
-    def getPrecachedLandingTargets(self, user):
+    def getPrecachedLandingTargets(self, user, ignore_merged=False):
         """See `IGitRepository`."""
+        results = self.landing_targets
+        if ignore_merged:
+            results = self.landing_targets.find(
+                Not(BranchMergeProposal.queue_status.is_in(
+                    BRANCH_MERGE_PROPOSAL_FINAL_STATES)))
         loader = partial(BranchMergeProposal.preloadDataForBMPs, user=user)
-        return DecoratedResultSet(self.landing_targets, pre_iter_hook=loader)
+        return DecoratedResultSet(results, pre_iter_hook=loader)
 
     @property
     def _api_landing_targets(self):

=== modified file 'lib/lp/code/templates/gitrepository-pending-merges.pt'
--- lib/lp/code/templates/gitrepository-pending-merges.pt	2018-08-29 17:11:57 +0000
+++ lib/lp/code/templates/gitrepository-pending-merges.pt	2018-08-31 11:44:12 +0000
@@ -22,8 +22,8 @@
 
       </div>
 
-      <div id="landing-targets" tal:condition="view/landing_targets">
-        <tal:landing-candidates repeat="mergeproposal view/landing_targets">
+      <div id="landing-targets" tal:condition="view/active_landing_targets">
+        <tal:landing-candidates repeat="mergeproposal view/active_landing_targets">
           <tal:merge-fragment
               tal:replace="structure mergeproposal/@@+summary-fragment"/>
         </tal:landing-candidates>

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : launchpad-reviewers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to