[LNT] r235959 - Fixup how LNT handles dates and times in the UI

Chris Matthews cmatthews5 at apple.com
Mon Apr 27 18:24:11 PDT 2015


Author: cmatthews
Date: Mon Apr 27 20:24:10 2015
New Revision: 235959

URL: http://llvm.org/viewvc/llvm-project?rev=235959&view=rev
Log:
Fixup how LNT handles dates and times in the UI

LNT has always confused people by showing dates and times in UTC, but
without adding the UTC prefix on the end of the string.  In this commit,
make the server pass all dates as UTC ISO 8601 date time strings. In the
browser convert these to the user's time zone and locale. Also, in
recent results locations use relative times, with a tooltip for the full
time string.

Added:
    lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/
    lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/MIT-LICENSE.txt
    lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/jquery-dateFormat.min.js
    lnt/trunk/lnt/server/ui/static/timedate.js
Modified:
    lnt/trunk/lnt/server/ui/filters.py
    lnt/trunk/lnt/server/ui/templates/layout.html
    lnt/trunk/lnt/server/ui/templates/reporting/runs.html
    lnt/trunk/lnt/server/ui/templates/v4_machine.html
    lnt/trunk/lnt/server/ui/templates/v4_order.html
    lnt/trunk/lnt/server/ui/templates/v4_recent_activity.html
    lnt/trunk/lnt/server/ui/templates/v4_run.html

Modified: lnt/trunk/lnt/server/ui/filters.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/filters.py?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/filters.py (original)
+++ lnt/trunk/lnt/server/ui/filters.py Mon Apr 27 20:24:10 2015
@@ -10,6 +10,11 @@ def filter_asutctime(time):
     ts = datetime.datetime.utcfromtimestamp(time)
     return ts.strftime('%Y-%m-%d %H:%M:%S UTC')
 
+def filter_asisotime(time):
+    ts = datetime.datetime.utcfromtimestamp(time)
+    return ts.isoformat()
+
+
 def filter_aspctcell(value, class_=None, style=None, attributes=None, *args, **kwargs):
     cell = util.PctCell(value, *args, **kwargs)
     return cell.render(class_, style, attributes)

Added: lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/MIT-LICENSE.txt
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/MIT-LICENSE.txt?rev=235959&view=auto
==============================================================================
--- lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/MIT-LICENSE.txt (added)
+++ lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/MIT-LICENSE.txt Mon Apr 27 20:24:10 2015
@@ -0,0 +1,20 @@
+Copyright (c) 2009 Pablo Cantero, http://pablocantero.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Added: lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/jquery-dateFormat.min.js
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/jquery-dateFormat.min.js?rev=235959&view=auto
==============================================================================
--- lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/jquery-dateFormat.min.js (added)
+++ lnt/trunk/lnt/server/ui/static/jquery/jquery.dateFormat/jquery-dateFormat.min.js Mon Apr 27 20:24:10 2015
@@ -0,0 +1,2 @@
+/*! jquery-dateFormat 05-10-2014 */
+var DateFormat={};!function(a){var b=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],c=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],d=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],f={Jan:"01",Feb:"02",Mar:"03",Apr:"04",May:"05",Jun:"06",Jul:"07",Aug:"08",Sep:"09",Oct:"10",Nov:"11",Dec:"12"},g=/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d{0,3}[Z\-+]?(\d{2}:?\d{2})?/;a.format=function(){function a(a){return b[parseInt(a,10)]||a}function h(a){return c[parseInt(a,10)]||a}function i(a){var b=parseInt(a,10)-1;return d[b]||a}function j(a){var b=parseInt(a,10)-1;return e[b]||a}function k(a){return f[a]||a}function l(a){var b,c,d,e,f,g=a,h="";return-1!==g.indexOf(".")&&(e=g.split("."),g=e[0],h=e[1]),f=g.split(":"),3===f.length?(b=f[0],c=f[1],d=f[2].replace(/\s.+/,"").replace(/[a-z]/gi,""),g=g.replace(/\s.+/,"").replace(/[a-z]/gi,"")
 ,{time:g,hour:b,minute:c,second:d,millis:h}):{time:"",hour:"",minute:"",second:"",millis:""}}function m(a,b){for(var c=b-String(a).length,d=0;c>d;d++)a="0"+a;return a}return{parseDate:function(a){var b={date:null,year:null,month:null,dayOfMonth:null,dayOfWeek:null,time:null};if("number"==typeof a)return this.parseDate(new Date(a));if("function"==typeof a.getFullYear)b.year=String(a.getFullYear()),b.month=String(a.getMonth()+1),b.dayOfMonth=String(a.getDate()),b.time=l(a.toTimeString()+"."+a.getMilliseconds());else if(-1!=a.search(g))values=a.split(/[T\+-]/),b.year=values[0],b.month=values[1],b.dayOfMonth=values[2],b.time=l(values[3].split(".")[0]);else switch(values=a.split(" "),6===values.length&&isNaN(values[5])&&(values[values.length]="()"),values.length){case 6:b.year=values[5],b.month=k(values[1]),b.dayOfMonth=values[2],b.time=l(values[3]);break;case 2:subValues=values[0].split("-"),b.year=subValues[0],b.month=subValues[1],b.dayOfMonth=subValues[2],b.time=l(values[1]);break;cas
 e 7:case 9:case 10:b.year=values[3],b.month=k(values[1]),b.dayOfMonth=values[2],b.time=l(values[4]);break;case 1:subValues=values[0].split(""),b.year=subValues[0]+subValues[1]+subValues[2]+subValues[3],b.month=subValues[5]+subValues[6],b.dayOfMonth=subValues[8]+subValues[9],b.time=l(subValues[13]+subValues[14]+subValues[15]+subValues[16]+subValues[17]+subValues[18]+subValues[19]+subValues[20]);break;default:return null}return b.date=new Date(b.year,b.month-1,b.dayOfMonth),b.dayOfWeek=String(b.date.getDay()),b},date:function(b,c){try{var d=this.parseDate(b);if(null===d)return b;for(var e=(d.date,d.year),f=d.month,g=d.dayOfMonth,k=d.dayOfWeek,l=d.time,n="",o="",p="",q=!1,r=0;r<c.length;r++){var s=c.charAt(r),t=c.charAt(r+1);if(q)"'"==s?(o+=""===n?"'":n,n="",q=!1):n+=s;else switch(n+=s,p="",n){case"ddd":o+=a(k),n="";break;case"dd":if("d"===t)break;o+=m(g,2),n="";break;case"d":if("d"===t)break;o+=parseInt(g,10),n="";break;case"D":g=1==g||21==g||31==g?parseInt(g,10)+"st":2==g||22==g?pars
 eInt(g,10)+"nd":3==g||23==g?parseInt(g,10)+"rd":parseInt(g,10)+"th",o+=g,n="";break;case"MMMM":o+=j(f),n="";break;case"MMM":if("M"===t)break;o+=i(f),n="";break;case"MM":if("M"===t)break;o+=m(f,2),n="";break;case"M":if("M"===t)break;o+=parseInt(f,10),n="";break;case"y":case"yyy":if("y"===t)break;o+=n,n="";break;case"yy":if("y"===t)break;o+=String(e).slice(-2),n="";break;case"yyyy":o+=e,n="";break;case"HH":o+=m(l.hour,2),n="";break;case"H":if("H"===t)break;o+=parseInt(l.hour,10),n="";break;case"hh":hour=0===parseInt(l.hour,10)?12:l.hour<13?l.hour:l.hour-12,o+=m(hour,2),n="";break;case"h":if("h"===t)break;hour=0===parseInt(l.hour,10)?12:l.hour<13?l.hour:l.hour-12,o+=parseInt(hour,10),n="";break;case"mm":o+=m(l.minute,2),n="";break;case"m":if("m"===t)break;o+=l.minute,n="";break;case"ss":o+=m(l.second.substring(0,2),2),n="";break;case"s":if("s"===t)break;o+=l.second,n="";break;case"S":case"SS":if("S"===t)break;o+=n,n="";break;case"SSS":o+=l.millis.substring(0,3),n="";break;case"a":o+=l.
 hour>=12?"PM":"AM",n="";break;case"p":o+=l.hour>=12?"p.m.":"a.m.",n="";break;case"E":o+=h(k),n="";break;case"'":n="",q=!0;break;default:o+=s,n=""}}return o+=p}catch(u){return console&&console.log&&console.log(u),b}},prettyDate:function(a){var b,c,d;return("string"==typeof a||"number"==typeof a)&&(b=new Date(a)),"object"==typeof a&&(b=new Date(a.toString())),c=((new Date).getTime()-b.getTime())/1e3,d=Math.floor(c/86400),isNaN(d)||0>d?void 0:60>c?"just now":120>c?"1 minute ago":3600>c?Math.floor(c/60)+" minutes ago":7200>c?"1 hour ago":86400>c?Math.floor(c/3600)+" hours ago":1===d?"Yesterday":7>d?d+" days ago":31>d?Math.ceil(d/7)+" weeks ago":d>=31?"more than 5 weeks ago":void 0},toBrowserTimeZone:function(a,b){return this.date(new Date(a),b||"MM/dd/yyyy HH:mm:ss")}}}()}(DateFormat),function(a){a.format=DateFormat.format}(jQuery);
\ No newline at end of file

Added: lnt/trunk/lnt/server/ui/static/timedate.js
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/static/timedate.js?rev=235959&view=auto
==============================================================================
--- lnt/trunk/lnt/server/ui/static/timedate.js (added)
+++ lnt/trunk/lnt/server/ui/static/timedate.js Mon Apr 27 20:24:10 2015
@@ -0,0 +1,25 @@
+/** Provide date conversions to the utctime and reltime classes.
+
+
+Use JQuery to update the iso times rendered in the templates to browswer local
+time.
+*/
+
+jQuery(function() {
+    jQuery(".utctime").each(function (idx, elem) {
+        jQuery(elem).text(jQuery.format.toBrowserTimeZone(jQuery(elem).text()));
+    });
+
+    jQuery(".reltime").each(function (idx, elem) {
+        var time_text = jQuery(elem).text();
+        jQuery(elem).tooltip({'title': jQuery.format.toBrowserTimeZone(time_text),
+                            'delay': { show: 500, hide: 1000 }
+                                });
+    });
+
+    jQuery(".reltime").each(function (idx, elem) {
+        jQuery(elem).text(jQuery.format.prettyDate(jQuery(elem).text()));
+
+    });
+
+});

Modified: lnt/trunk/lnt/server/ui/templates/layout.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/layout.html?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/layout.html (original)
+++ lnt/trunk/lnt/server/ui/templates/layout.html Mon Apr 27 20:24:10 2015
@@ -11,8 +11,14 @@
               }}" rel="stylesheet" media='screen and (min-width: 750px)'>
   <script src="{{ url_for('.static', filename='jquery/1.7.2/jquery-1.7.2.min.js')
                }}"> </script>
+  <script src="{{ url_for('.static', filename='jquery/jquery.dateFormat/jquery-dateFormat.min.js')
+               }}"> </script>
+
   <script src="{{ url_for('.static', filename='bootstrap/js/bootstrap.min.js')
                }}"></script>
+   <script src="{{ url_for('.static', filename='timedate.js')
+                        }}"></script>
+
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 
@@ -175,8 +181,8 @@
       <table class="table">
         <tr>
           <td>LNT Version: {{ app.version }}</td>
-          <td>Server Started: {{ app.start_time|asutctime }}</td>
-          <td>Generated: {{ request.request_time|asutctime }}</td>
+          <td>Server Started: <span class="utctime">{{ app.start_time|asisotime }}</span></td>
+          <td>Generated: <span class="utctime">{{ request.request_time|asisotime }}</span></td>
           <td>Render Time: {{ "%.2fs" % request.elapsed_time() }}</td>
         </tr>
       </table>

Modified: lnt/trunk/lnt/server/ui/templates/reporting/runs.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/reporting/runs.html?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/reporting/runs.html (original)
+++ lnt/trunk/lnt/server/ui/templates/reporting/runs.html Mon Apr 27 20:24:10 2015
@@ -26,11 +26,11 @@
          <th style="{{ styles['th'] }}">Current</th>
          <th style="{{ styles['th'] }}">σ {{ primary_field_suffix }}</th>
          {% if secondary_info %}
-         <th style="{{ styles['th'] }}">Δ {{ secondary_field_suffix }}</th>           
+         <th style="{{ styles['th'] }}">Δ {{ secondary_field_suffix }}</th>
          <th style="{{ styles['th'] }}">σ {{ secondary_field_suffix }}</th>
          {% endif %}
          </tr>
-         
+
          {% for name, cr, test_id in bucket %}
          <tr>
            <td style="{{ styles['td'] }}">
@@ -79,7 +79,7 @@
     <tr>
       <td style="{{ styles['td'] }}"><a href="{{ ts_url }}/{{ r.id }}">{{ title }}</a></td>
       <td style="{{ styles['td'] }}"><a href="{{ ts_url }}/order/{{ r.order.id }}">{{ r.order.llvm_project_revision }}</a></td>
-      <td style="{{ styles['td'] }}">{{ r.start_time }}</td>
+      <td style="{{ styles['td'] }}"><span class="utctime">{{ r.start_time.isoformat() }}</span></td>
       <td style="{{ styles['td'] }}">{{ r.end_time - r.start_time }}</td>
     </tr>
     {% else %}
@@ -111,7 +111,7 @@
       {% endif %}
     </tr>
   </thead>
-  
+
   {% for i, name, num_items, num_items_vs_baseline in num_item_buckets %}
     {% if num_items or num_items_vs_baseline %}
       <tr>
@@ -121,9 +121,9 @@
         <td style="{{ styles['td'] }}" align="right">{{ num_items_vs_baseline }}</td>
         {% endif %}
       </tr>
-    {% endif %}                
+    {% endif %}
   {% endfor %}
-  
+
   <tfoot>
     <tr>
       <td style="{{ styles['td'] }}"><b>Total Tests</b></td>
@@ -167,4 +167,3 @@
 </body>
 </html>
 {% endif %}
-

Modified: lnt/trunk/lnt/server/ui/templates/v4_machine.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_machine.html?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_machine.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_machine.html Mon Apr 27 20:24:10 2015
@@ -13,7 +13,7 @@
     <li><a href="#parameters"><i class="icon-chevron-right"></i> Parameters</a></li>
     <li><a href="#submissions"><i class="icon-chevron-right"></i> Submissions</a></li>
   </ul>
-  
+
   <h4>Relatives</h4>
   <ul class="nav nav-list bs-docs-sidenav">
     {# List all machines with this name. #}
@@ -75,7 +75,7 @@
       {% if loop.first %}
       <td rowspan="{{ runs|length }}" align=right>{{ order.as_ordered_string() }}</td>
       {% endif %}
-      <td>{{ run.start_time }}</td>
+      <td><span class="utctime">{{ run.start_time.isoformat() }}</span></td>
       <td>{{ run.end_time - run.start_time }}s</td>
       <td>{{ utils.render_result(run) }}</td>
     </tr>

Modified: lnt/trunk/lnt/server/ui/templates/v4_order.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_order.html?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_order.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_order.html Mon Apr 27 20:24:10 2015
@@ -73,11 +73,11 @@
         <th>Results</th>
       </tr>
     </thead>
-    <tbody>  
+    <tbody>
       {# Show the active submissions. #}
       {% for r in ts.query(ts.Run).filter_by(order_id = order.id) %}
       <tr>
-        <td>{{r.start_time}}</td>
+        <td><span class="utctime">{{ r.start_time.isoformat() }}</span></td>
         <td>{{r.end_time - r.start_time}}</td>
         <td>{{ utils.render_machine(r.machine) }}</td>
         <td>{{ utils.render_result(r) }}</td>

Modified: lnt/trunk/lnt/server/ui/templates/v4_recent_activity.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_recent_activity.html?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_recent_activity.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_recent_activity.html Mon Apr 27 20:24:10 2015
@@ -5,6 +5,8 @@
 {% set components = [(testsuite_name, v4_url_for("v4_recent_activity"))] %}
 {% block title %}Recent Activity{% endblock %}
 
+
+
 {% block sidebar %}
   <ul class="nav nav-list bs-docs-sidenav">
       <li><a href="#machines"><i class="icon-chevron-right"></i> Active Machines</a></li>
@@ -29,31 +31,31 @@
       {% for machine_name,r in active_machines|dictsort %}
       <tr>
         <td>{{ utils.render_machine(r.machine) }}</td>
-        <td>{{ r.start_time }}</td>
+        <td><span class="reltime">{{r.start_time.isoformat()}}</span></td>
         <td>{{ utils.render_result(r) }}</td>
       </tr>
       {% endfor %}
     </tbody>
   </table>
-  
+
   <section id="submissions" />
   <h3>Recent Submissions</h3>
   <table class="table table-striped table-hover table-condensed">
     <thead>
     <tr>
       <th>Run Order</th>
-      <th>Start Time</th>
+      <th>Started</th>
       <th>Duration</th>
       <th>Machine</th>
       <th>Results</th>
     </tr>
     </thead>
-    <tbody> 
+    <tbody>
       {# Show the active submissions. #}
       {% for r,run_order in active_submissions %}
       <tr>
         <td><a href="{{v4_url_for('v4_order', id=r.order.id)}}">{{run_order}}</a></td></td>
-        <td>{{ r.start_time }}</td>
+        <td><span class="reltime" data-toggle="tooltip" title="{{r.start_time}}">{{ r.start_time.isoformat() }}</span></td>
         <td>{{ r.end_time - r.start_time }}</td>
         <td>{{ utils.render_machine(r.machine) }}</td>
         <td>{{ utils.render_result(r) }}</td>

Modified: lnt/trunk/lnt/server/ui/templates/v4_run.html
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/templates/v4_run.html?rev=235959&r1=235958&r2=235959&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/templates/v4_run.html (original)
+++ lnt/trunk/lnt/server/ui/templates/v4_run.html Mon Apr 27 20:24:10 2015
@@ -29,12 +29,12 @@
   {% set test_status = cr.get_test_status() %}
   {% set value_status = cr.get_value_status(ignore_small=not options.show_small_diff) %}
   {% set run_cell_value = "-" if cr.current is none else "%.4f" % cr.current %}
-  
+
   {% if options.show_previous %}
     {% set prev_cell_value = "-" if cr.previous is none else "%.4f" % cr.previous %}
     <td>{{prev_cell_value}}</td>
   {% endif %}
-  
+
   {% set cell_color = none %}
   {% if test_status == analysis.REGRESSED %}
     {% set cell_color = (233,128,128) %}
@@ -43,13 +43,13 @@
   {% elif test_status == analysis.UNCHANGED_FAIL %}
     {% set cell_color = (255,195,67) %}
   {% endif %}
-  
+
   {% if cell_color %}
     <td style="background-color:{{ '#%02x%02x%02x' % cell_color }}">{{ run_cell_value }}</td>
   {% else %}
     <td>{{run_cell_value}}</td>
   {% endif %}
-  
+
   {% if (options.show_all or
          value_status == analysis.REGRESSED or
          value_status == analysis.IMPROVED) %}
@@ -57,7 +57,7 @@
   {% else %}
     <td>-</td>
   {% endif %}
-  
+
   {% if options.show_delta %}
     <td>{{ "-" if cr.delta is none else "%.4f" % cr.delta }}</td>
   {% endif %}
@@ -77,7 +77,7 @@
       ]
     </td>
   {% endif %}
-  
+
   {% if options.show_sample_counts %}
     <td>{{cr.get_samples()|length}}</td>
   {% endif %}
@@ -101,7 +101,7 @@
   {% for r in neighboring_runs %}
     <li>
       {{ "<b>"|safe if r.id == run.id else "" }}
-      <a href="{{v4_url_for('v4_run', id=r.id)}}">{{ r.start_time }}</a>
+      <a href="{{v4_url_for('v4_run', id=r.id)}}"><span class="utctime">{{ r.start_time.isoformat() }}</span></a>
       {{ "</b>"|safe if r.id == run.id else "" }}
   {% endfor %}
   </ul>
@@ -112,7 +112,7 @@
     {% for r in comparison_neighboring_runs %}
       <li>
         {{ "<b>"|safe if compare_to and r.id == compare_to.id else "" }}
-        <a href="{{v4_url_for('v4_run', id=run.id, compare_to=r.id)}}">{{ r.start_time}}</a>
+        <a href="{{v4_url_for('v4_run', id=run.id, compare_to=r.id)}}"><span class="utctime">{{ run.start_time.isoformat() }}</span></a>
         {{ "</b>"|safe if compare_to and r.id == compare_to.id else "" }}
     {% endfor %}
     </ul>
@@ -274,7 +274,7 @@
         {% if baseline %}
           <input type="hidden" name="baseline" value="{{baseline.id}}">
         {% endif %}
-        
+
         <input type="submit" name="submit" value="Update">
       </td>
     </tr>
@@ -290,7 +290,7 @@
 
   {% set graph_base=v4_url_for('v4_graph', highlight_run=run.id) %}
   <form method="GET" action="{{ graph_base }}">
-  
+
     {# Report one table for each primary field. #}
     {% for field in primary_fields %}
       <section id="{{ field.name }}" />
@@ -310,7 +310,7 @@
             {% if options.show_sample_counts %}<th>N</th>{% endif %}
           </tr>
         </thead>
-        <tbody>  
+        <tbody>
           {% set tests = [] %}
           {% set (runs, compare_runs) = request_info.sri.get_sliding_runs(run, compare_to, request_info.num_comparison_runs) %}
           {% for test_name,test_id in test_info %}
@@ -342,7 +342,7 @@
     {% endfor %}
     <p><input type="submit" value="Graph">
   </form>
-  
+
   {% if options.show_data_table %}
     <h3>Test Data</h3>
     <table class="table table-striped table-condensed table-hover">
@@ -375,5 +375,5 @@
       </tbody>
     </table>
   {% endif %}
-  
+
 {% endblock %}





More information about the llvm-commits mailing list