~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/soyuz/model/binarypackagebuild.py

Merged rocketfuel into trivial.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
    EmptyResultSet,
30
30
    Store,
31
31
    )
 
32
from storm.zope import IResultSet
32
33
from zope.component import getUtility
33
34
from zope.interface import implements
34
 
from zope.security.proxy import removeSecurityProxy
35
35
 
36
36
from canonical.config import config
37
37
from canonical.database.sqlbase import (
1014
1014
 
1015
1015
        # Ordering according status
1016
1016
        # * NEEDSBUILD, BUILDING & UPLOADING by -lastscore
1017
 
        # * SUPERSEDED & All by -datecreated
 
1017
        # * SUPERSEDED & All by -PackageBuild.build_farm_job
 
1018
        #   (nearly equivalent to -datecreated, but much more
 
1019
        #   efficient.)
1018
1020
        # * FULLYBUILT & FAILURES by -datebuilt
1019
1021
        # It should present the builds in a more natural order.
1020
1022
        if status in [
1021
1023
            BuildStatus.NEEDSBUILD,
1022
1024
            BuildStatus.BUILDING,
1023
1025
            BuildStatus.UPLOADING]:
1024
 
            orderBy = ["-BuildQueue.lastscore", "BinaryPackageBuild.id"]
 
1026
            order_by = [Desc(BuildQueue.lastscore), BinaryPackageBuild.id]
 
1027
            order_by_table = BuildQueue
1025
1028
            clauseTables.append('BuildQueue')
1026
1029
            clauseTables.append('BuildPackageJob')
1027
1030
            condition_clauses.append(
1028
1031
                'BuildPackageJob.build = BinaryPackageBuild.id')
1029
1032
            condition_clauses.append('BuildPackageJob.job = BuildQueue.job')
1030
1033
        elif status == BuildStatus.SUPERSEDED or status is None:
1031
 
            orderBy = ["-BuildFarmJob.date_created"]
 
1034
            order_by = [Desc(PackageBuild.build_farm_job_id)]
 
1035
            order_by_table = PackageBuild
1032
1036
        else:
1033
 
            orderBy = ["-BuildFarmJob.date_finished"]
 
1037
            order_by = [Desc(BuildFarmJob.date_finished),
 
1038
                        BinaryPackageBuild.id]
 
1039
            order_by_table = BuildFarmJob
1034
1040
 
1035
1041
        # End of duplication (see XXX cprov 2006-09-25 above).
1036
1042
 
1043
1049
            "PackageBuild.archive IN %s" %
1044
1050
            sqlvalues(list(distribution.all_distro_archive_ids)))
1045
1051
 
 
1052
        store = Store.of(distribution)
 
1053
        clauseTables = [BinaryPackageBuild] + clauseTables
 
1054
        result_set = store.using(*clauseTables).find(
 
1055
            (BinaryPackageBuild, order_by_table), *condition_clauses)
 
1056
        result_set.order_by(*order_by)
 
1057
 
 
1058
        def get_bpp(result_row):
 
1059
            return result_row[0]
 
1060
 
1046
1061
        return self._decorate_with_prejoins(
1047
 
            BinaryPackageBuild.select(' AND '.join(condition_clauses),
1048
 
            clauseTables=clauseTables, orderBy=orderBy))
 
1062
            DecoratedResultSet(result_set, result_decorator=get_bpp))
1049
1063
 
1050
1064
    def _decorate_with_prejoins(self, result_set):
1051
1065
        """Decorate build records with related data prefetch functionality."""
1052
1066
        # Grab the native storm result set.
1053
 
        result_set = removeSecurityProxy(result_set)._result_set
 
1067
        result_set = IResultSet(result_set)
1054
1068
        decorated_results = DecoratedResultSet(
1055
1069
            result_set, pre_iter_hook=self._prefetchBuildData)
1056
1070
        return decorated_results