コード例 #1
0
 def test_sourcepackage_context_distro_task(self):
     bug = self.factory.makeBug()
     sp = self.factory.makeSourcePackage()
     task = self.factory.makeBugTask(bug=bug, target=sp.distribution)
     tasks = list(bug.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(sp, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(filtered, Equals([task]))
コード例 #2
0
 def test_distro_context(self):
     bug = self.factory.makeBug()
     mint = self.factory.makeDistribution()
     task = self.factory.makeBugTask(bug=bug, target=mint)
     tasks = list(bug.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(mint, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(filtered, Equals([task]))
コード例 #3
0
 def test_productseries_context_with_only_product_task(self):
     bug = self.factory.makeBug()
     widget = self.factory.makeProduct()
     task = self.factory.makeBugTask(bug=bug, target=widget)
     series = widget.development_focus
     tasks = list(bug.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(series, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(filtered, Equals([task]))
コード例 #4
0
 def test_two_product_tasks_case(self):
     widget = self.factory.makeProduct()
     bug = self.factory.makeBug(target=widget)
     cogs = self.factory.makeProduct()
     task = self.factory.makeBugTask(bug=bug, target=cogs)
     tasks = list(bug.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(cogs, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(filtered, Equals([task]))
コード例 #5
0
 def test_multiple_bugs(self):
     bug1 = self.factory.makeBug()
     bug2 = self.factory.makeBug()
     bug3 = self.factory.makeBug()
     tasks = list(bug1.bugtasks)
     tasks.extend(bug2.bugtasks)
     tasks.extend(bug3.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(None, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(len(filtered), Equals(3))
     self.assertThat(filtered, Equals(tasks))
コード例 #6
0
 def test_multiple_bugs(self):
     bug1 = self.factory.makeBug()
     bug2 = self.factory.makeBug()
     bug3 = self.factory.makeBug()
     tasks = list(bug1.bugtasks)
     tasks.extend(bug2.bugtasks)
     tasks.extend(bug3.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(None, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(len(filtered), Equals(3))
     self.assertThat(filtered, Equals(tasks))
コード例 #7
0
 def getLinkedBugTasks(self, user):
     """See `ISpecification`."""
     params = BugTaskSearchParams(user=user, linked_blueprints=self.id)
     tasks = getUtility(IBugTaskSet).search(params)
     if self.distroseries is not None:
         context = self.distroseries
     elif self.distribution is not None:
         context = self.distribution
     elif self.productseries is not None:
         context = self.productseries
     else:
         context = self.product
     return filter_bugtasks_by_context(context, tasks)
コード例 #8
0
 def getLinkedBugTasks(self, user):
     """See `ISpecification`."""
     params = BugTaskSearchParams(user=user, linked_blueprints=self.id)
     tasks = getUtility(IBugTaskSet).search(params)
     if self.distroseries is not None:
         context = self.distroseries
     elif self.distribution is not None:
         context = self.distribution
     elif self.productseries is not None:
         context = self.productseries
     else:
         context = self.product
     return filter_bugtasks_by_context(context, tasks)
コード例 #9
0
 def assertFilterBugtasksByContextNoQueries(self, bug, target, task):
     tasks = list(bug.bugtasks)
     with StormStatementRecorder() as recorder:
         filtered = filter_bugtasks_by_context(target, tasks)
     self.assertThat(recorder, HasQueryCount(Equals(0)))
     self.assertThat(filtered, Equals([task]))
コード例 #10
0
 def test_simple_case(self):
     bug = self.factory.makeBug()
     tasks = list(bug.bugtasks)
     self.assertThat(filter_bugtasks_by_context(None, tasks), Equals(tasks))
コード例 #11
0
 def test_simple_case(self):
     bug = self.factory.makeBug()
     tasks = list(bug.bugtasks)
     self.assertThat(
         filter_bugtasks_by_context(None, tasks),
         Equals(tasks))
コード例 #12
0
    def getExtendedRevisionDetails(self, user, revisions):
        """See `IBranchCollection`."""

        if not revisions:
            return []
        branch = revisions[0].branch

        def make_rev_info(branch_revision, merge_proposal_revs,
                          linked_bugtasks):
            rev_info = {
                'revision': branch_revision,
                'linked_bugtasks': None,
                'merge_proposal': None,
            }
            merge_proposal = merge_proposal_revs.get(branch_revision.sequence)
            rev_info['merge_proposal'] = merge_proposal
            if merge_proposal is not None:
                rev_info['linked_bugtasks'] = linked_bugtasks.get(
                    merge_proposal.source_branch.id)
            return rev_info

        rev_nos = [revision.sequence for revision in revisions]
        merge_proposals = self.getMergeProposals(
            target_branch=branch,
            merged_revnos=rev_nos,
            statuses=[BranchMergeProposalStatus.MERGED])
        merge_proposal_revs = dict([(mp.merged_revno, mp)
                                    for mp in merge_proposals])
        source_branch_ids = [mp.source_branch.id for mp in merge_proposals]
        linked_bugtasks = defaultdict(list)

        if source_branch_ids:
            # We get the bugtasks for our merge proposal branches

            # First, the bug ids
            params = BugTaskSearchParams(
                user=user,
                status=None,
                linked_branches=any(*source_branch_ids))
            bug_ids = getUtility(IBugTaskSet).searchBugIds(params)

            # Then the bug tasks and branches
            store = IStore(BugBranch)
            rs = store.using(
                BugBranch,
                Join(BugTask, BugTask.bugID == BugBranch.bugID),
            ).find((BugTask, BugBranch), BugBranch.bugID.is_in(bug_ids),
                   BugBranch.branchID.is_in(source_branch_ids))

            # Build up a collection of bugtasks for each branch
            bugtasks_for_branch = defaultdict(list)
            for bugtask, bugbranch in rs:
                bugtasks_for_branch[bugbranch.branch].append(bugtask)

            # Now filter those down to one bugtask per branch
            for branch, tasks in bugtasks_for_branch.iteritems():
                linked_bugtasks[branch.id].extend(
                    filter_bugtasks_by_context(branch.target.context, tasks))

        return [
            make_rev_info(rev, merge_proposal_revs, linked_bugtasks)
            for rev in revisions
        ]
コード例 #13
0
    def getExtendedRevisionDetails(self, user, revisions):
        """See `IBranchCollection`."""

        if not revisions:
            return []
        branch = revisions[0].branch

        def make_rev_info(
                branch_revision, merge_proposal_revs, linked_bugtasks):
            rev_info = {
                'revision': branch_revision,
                'linked_bugtasks': None,
                'merge_proposal': None,
                }
            merge_proposal = merge_proposal_revs.get(branch_revision.sequence)
            rev_info['merge_proposal'] = merge_proposal
            if merge_proposal is not None:
                rev_info['linked_bugtasks'] = linked_bugtasks.get(
                    merge_proposal.source_branch.id)
            return rev_info

        rev_nos = [revision.sequence for revision in revisions]
        merge_proposals = self.getMergeProposals(
                target_branch=branch, merged_revnos=rev_nos,
                statuses=[BranchMergeProposalStatus.MERGED])
        merge_proposal_revs = dict(
                [(mp.merged_revno, mp) for mp in merge_proposals])
        source_branch_ids = [mp.source_branch.id for mp in merge_proposals]
        linked_bugtasks = defaultdict(list)

        if source_branch_ids:
            # We get the bugtasks for our merge proposal branches

            # First, the bug ids
            params = BugTaskSearchParams(
                user=user, status=None,
                linked_branches=any(*source_branch_ids))
            bug_ids = getUtility(IBugTaskSet).searchBugIds(params)

            # Then the bug tasks and branches
            store = IStore(BugBranch)
            rs = store.using(
                BugBranch,
                Join(BugTask, BugTask.bugID == BugBranch.bugID),
            ).find(
                (BugTask, BugBranch),
                BugBranch.bugID.is_in(bug_ids),
                BugBranch.branchID.is_in(source_branch_ids)
            )

            # Build up a collection of bugtasks for each branch
            bugtasks_for_branch = defaultdict(list)
            for bugtask, bugbranch in rs:
                bugtasks_for_branch[bugbranch.branch].append(bugtask)

            # Now filter those down to one bugtask per branch
            for branch, tasks in bugtasks_for_branch.iteritems():
                linked_bugtasks[branch.id].extend(
                    filter_bugtasks_by_context(branch.target.context, tasks))

        return [make_rev_info(rev, merge_proposal_revs, linked_bugtasks)
                for rev in revisions]