changeset 834:70aebfc3a45f

Use `display_rev` strategy instead of just `rev` as that displays much nicer for DVCS sytems with long hash revisions numbers using Trac 0.12. No visual differences for Trac 0.11 users. Thanks to Felix Schwarz and trbs for patches and testing. Closes #610.
author osimons
date Sun, 10 Oct 2010 19:54:37 +0000
parents 7c80375d4817
children 59acaa8b52c0
files bitten/templates/bitten_build.html bitten/templates/bitten_config.html bitten/tests/web_ui.py bitten/web_ui.py
diffstat 4 files changed, 18 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/templates/bitten_build.html
+++ b/bitten/templates/bitten_build.html
@@ -30,7 +30,7 @@
         </dd>
         <dt class="trigger">Triggered by:</dt>
         <dd class="trigger">
-          Changeset <a href="$build.chgset_href">[$build.rev]</a> by 
+          Changeset <a href="$build.chgset_href">[$build.display_rev]</a> by 
           ${format_author(build.chgset_author)}
         </dd>
         <dt class="slave">Built by:</dt>
--- a/bitten/templates/bitten_config.html
+++ b/bitten/templates/bitten_config.html
@@ -87,7 +87,7 @@
       <h3 class="builds"><a href="$config.href">Latest builds</a></h3>
       <table class="builds"><tbody><tr>
         <th py:with="youngest_rev = config.youngest_rev">
-          <a href="$youngest_rev.href">[$youngest_rev.id]</a>
+          <a href="$youngest_rev.href">[$youngest_rev.display_rev]</a>
           by ${format_author(youngest_rev.author)}<p class="date">$youngest_rev.date</p>
           <p class="message">$youngest_rev.message</p>
         </th>
@@ -179,7 +179,7 @@
           <tr py:for="rev_num in config.revisions"
               py:with="rev = config.builds[rev_num]">
             <th class="chgset" scope="row">
-              <a href="$rev.href" title="View Changeset">[$rev_num]</a>
+              <a href="$rev.href" title="View Changeset">[$rev.display_rev]</a>
             </th><py:for each="platform in config.platforms"><py:choose>
             <td py:when="platform.id in rev" py:with="build = rev[platform.id]"
                 class="$build.cls">
--- a/bitten/tests/web_ui.py
+++ b/bitten/tests/web_ui.py
@@ -48,6 +48,7 @@
             get_node=lambda path, rev=None: Mock(get_history=lambda: [],
                                                  isdir=True),
             normalize_path=lambda path: path,
+            normalize_rev=lambda rev: rev,
             sync=lambda: None,
         )
         self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
@@ -87,7 +88,8 @@
                     get_history=lambda: [('trunk', rev, 'edit') for rev in
                                           range(123, 111, -1)])
         self.repos = Mock(get_node=lambda path, rev=None: root,
-                          sync=lambda: None, normalize_path=lambda path: path)
+                          sync=lambda: None, normalize_path=lambda path: path,
+                          normalize_rev=lambda rev: rev)
         self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
 
         module = BuildConfigController(self.env)
@@ -125,7 +127,8 @@
         revision_list = [('trunk', revision, 'edit') for revision in revision_ids]
         root = Mock(get_entries=lambda: ['foo'], get_history=lambda: revision_list)
         self.repos = Mock(get_node=lambda path, rev=None: root,
-                          sync=lambda: None, normalize_path=lambda path: path)
+                          sync=lambda: None, normalize_path=lambda path: path,
+                          normalize_rev=lambda rev: rev)
         self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
 
         module = BuildConfigController(self.env)
@@ -151,7 +154,8 @@
                     get_history=lambda: [('trunk', rev, 'edit') for rev in
                                           range(123, 110, -1)])
         self.repos = Mock(get_node=lambda path, rev=None: root,
-                          sync=lambda: None, normalize_path=lambda path: path)
+                          sync=lambda: None, normalize_path=lambda path: path,
+                          normalize_rev=lambda rev: rev)
         self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
 
         module = BuildConfigController(self.env)
@@ -203,6 +207,7 @@
         self.repos = Mock(get_node=lambda path, rev=None: root,
                           sync=lambda: None,
                           normalize_path=lambda path: path,
+                          normalize_rev=lambda rev: rev,
                           get_changeset=lambda rev: Mock(author='joe'))
         self.repos.authz = Mock(has_permission=lambda path: True, assert_permission=lambda path: None)
 
--- a/bitten/web_ui.py
+++ b/bitten/web_ui.py
@@ -32,6 +32,7 @@
 from trac.web.chrome import INavigationContributor, ITemplateProvider, \
                             add_link, add_stylesheet, add_ctxtnav, \
                             prevnext_nav, add_script
+from trac.versioncontrol import NoSuchChangeset
 from trac.wiki import wiki_to_html, wiki_to_oneliner
 from bitten.api import ILogFormatter, IReportChartGenerator, IReportSummarizer
 from bitten.master import BuildMaster
@@ -261,6 +262,7 @@
                         chgset = repos.get_changeset(rev)
                         config_data['youngest_rev'] = {
                             'id': rev, 'href': req.href.changeset(rev),
+                            'display_rev': repos.normalize_rev(rev),
                             'author': chgset.author or 'anonymous',
                             'date': format_datetime(chgset.date),
                             'message': wiki_to_oneliner(
@@ -458,6 +460,7 @@
                     revisions.append(rev)
                 builds.setdefault(rev, {})
                 builds[rev].setdefault('href', req.href.changeset(rev))
+                builds[rev].setdefault('display_rev', repos.normalize_rev(rev))
                 if build and build.status != Build.PENDING:
                     build_data = _get_build_data(self.env, req, build)
                     build_data['steps'] = []
@@ -603,6 +606,7 @@
         _has_permission(repos, config.path, req.perm, True)
         chgset = repos.get_changeset(build.rev)
         data['build']['chgset_author'] = chgset.author
+        data['build']['display_rev'] = repos.normalize_rev(build.rev)
 
         add_script(req, 'common/js/folding.js')
         add_script(req, 'bitten/tabset.js')
@@ -657,9 +661,10 @@
                                              db=db):
                     errors += [(step.name, error) for error
                                in step.errors]
-
+            display_rev = repos.normalize_rev(rev)
             yield (event_kinds[status], to_datetime(stopped, utc), None,
-                        (id_, config, label, rev, platform, status, errors))
+                        (id_, config, label, display_rev, platform, status,
+                         errors))
 
     def render_timeline_event(self, context, field, event):
         id_, config, label, rev, platform, status, errors = event[3]
Copyright (C) 2012-2017 Edgewall Software