diff bitten/trac_ext/web_ui.py @ 228:a8c9dd7e3f71

* Cleanup and documentation for the `BuildQueue` class added in [236]. * Moved duplicate code from the master and the web UI into `collect_changes` function.
author cmlenz
date Wed, 28 Sep 2005 15:49:27 +0000
parents aef09843d367
children c7ff953ebb07
line wrap: on
line diff
--- a/bitten/trac_ext/web_ui.py
+++ b/bitten/trac_ext/web_ui.py
@@ -20,6 +20,7 @@
 from trac.wiki import wiki_to_html
 from bitten.model import BuildConfig, TargetPlatform, Build, BuildStep, \
                          BuildLog, Report
+from bitten.queue import collect_changes
 from bitten.trac_ext.api import ILogFormatter, IReportSummarizer
 
 _status_label = {Build.IN_PROGRESS: 'in progress',
@@ -325,7 +326,7 @@
         }
         req.hdf['page.mode'] = 'view_config'
 
-        platforms = TargetPlatform.select(self.env, config=config_name)
+        platforms = list(TargetPlatform.select(self.env, config=config_name))
         req.hdf['config.platforms'] = [
             {'name': platform.name, 'id': platform.id} for platform in platforms
         ]
@@ -348,52 +349,35 @@
         more = False
         req.hdf['page.number'] = page
 
+        builds_per_page = 12 * len(platforms)
         repos = self.env.get_repository(req.authname)
-        try:
-            root = repos.get_node(config.path)
-            idx = 0
-            for path, rev, chg in root.get_history():
-                # Don't follow moves/copies
-                if path != repos.normalize_path(config.path):
-                    break
-                # If the directory was empty at that revision, it isn't built
-                old_node = repos.get_node(path, rev)
-                is_empty = True
-                for entry in old_node.get_entries():
-                    is_empty = False
-                    break
-                if is_empty:
-                    continue
-
-                if idx < (page - 1) * 12:
-                    idx += 1
-                    continue
+        repos.sync()
+        idx = 0
+        for platform, rev, build in collect_changes(repos, config):
+            if idx < (page - 1) * builds_per_page:
+                idx += 1
+                continue
 
-                prefix = 'config.builds.%d' % rev
-                req.hdf[prefix + '.href'] = self.env.href.changeset(rev)
-                for build in Build.select(self.env, config=config.name, rev=rev):
-                    if build.status == Build.PENDING:
-                        continue
-                    build_hdf = _build_to_hdf(self.env, req, build)
-                    req.hdf['%s.%s' % (prefix, build.platform)] = build_hdf
+            prefix = 'config.builds.%d' % rev
+            req.hdf[prefix + '.href'] = self.env.href.changeset(rev)
+            if build and build.status != Build.PENDING:
+                build_hdf = _build_to_hdf(self.env, req, build)
+                req.hdf['%s.%s' % (prefix, platform.id)] = build_hdf
 
-                idx += 1
-                if idx >= page * 12:
-                    more = True
-                    break
+            idx += 1
+            if idx >= page * builds_per_page:
+                more = True
+                break
 
-            if page > 1:
-                if page == 2:
-                    prev_href = self.env.href.build(config.name)
-                else:
-                    prev_href = self.env.href.build(config.name, page=page - 1)
-                add_link(req, 'prev', prev_href, 'Previous Page')
-            if more:
-                next_href = self.env.href.build(config.name, page=page + 1)
-                add_link(req, 'next', next_href, 'Next Page')
-
-        except TracError:
-            self.log.error('Error accessing repository info', exc_info=True)
+        if page > 1:
+            if page == 2:
+                prev_href = self.env.href.build(config.name)
+            else:
+                prev_href = self.env.href.build(config.name, page=page - 1)
+            add_link(req, 'prev', prev_href, 'Previous Page')
+        if more:
+            next_href = self.env.href.build(config.name, page=page + 1)
+            add_link(req, 'next', next_href, 'Next Page')
 
     def _render_config_confirm(self, req, config_name):
         req.perm.assert_permission('BUILD_DELETE')
Copyright (C) 2012-2017 Edgewall Software