Using twitter bootstrap for more consistent looks for Hydra

[?]
Apr 12, 2012, 6:12 PM
OEPUOUNBNTHTFZVDXREGBQCKFRCWMVP2MDVK4OA47VK2DBKEWVYAC

Dependencies

  • [2] VRDK2P3X
  • [3] 23QNCJF2 * Use a table.
  • [4] 2RGAZCKY * in topbar, use 'Projects' in stead of 'Overview'
  • [5] JLICHVE6 * hydra: do not show build history if there are no previous builds
  • [6] PUIJ66FV add some stats to jobsets in project view
  • [7] 6VPKJTKN * hdyra: remove debug thing
  • [8] JLVKTWLT hydra: newer version of jquery ui
  • [9] SMTMFEKE hydra: add missing templates
  • [10] BIZEPF2T ignore this
  • [11] 3JBUMW3E forgot to commit a file
  • [12] LL36GPHA added help, removed nix closure from 'failed build with output' productlist
  • [13] ULNQG7OX Remove the gray container around the main page div
  • [14] 7G5RWHB7 Remove the "all" channel
  • [15] IZWCANCV I'm stupid
  • [16] 63A26BM2 Unpack jQuery etc. in the build tree for easier testing
  • [17] L7NUCXKS Show new and removed jobs
  • [18] XZJFZSCJ User color instead of a big animated GIF to indicate whether a build is running
  • [19] L2E6EVE2 * Merged the Build and Job tables.
  • [20] H7CNGK4O * Log evaluation errors etc. in the DB.
  • [21] JFZNAYJX * Showing releases.
  • [22] XHK7IGYI * hdyra: show last succeeded build and changes since on build status summary if build has failed
  • [23] SZZ3PFYF
  • [24] HJLYC753 * Adding input value alternatives.
  • [25] QB3LWT7N * Ouch.
  • [26] LQNBKF3D
  • [27] JD27RBKM
  • [28] GPHLV42M * Allow the description of a release member to be edited, and to
  • [29] T2232OBS * Add some DB indices to make the /releases page much faster.
  • [30] 7YBYT2LQ
  • [31] WHAFVCEI
  • [32] RAKTHYAI * In the job status and error pages, show when the status of a job
  • [33] WRIU3S5E * UI for cloning builds (not functional yet).
  • [34] ZI535LI6 * hydra: 'new' UI for project/jobset/job/build
  • [35] IGNQFFV7 * Put the release sets in the navbar.
  • [36] ZDF42B24 revert change to dbix::class generated code
  • [37] CLJQCY2X * Store info about all the build actions and allow them to be
  • [38] QU5I5GCL
  • [39] W6DC6K4I * Happy Javascript hacking.
  • [40] PPJN6SDP * paging for releases page
  • [41] CEARA7OH * hydra: show running buildsteps on build page
  • [42] 6QRHXIM3 * Speed up the jobset index page. Especially the query to get the
  • [43] FKK2ZSTL * Split the CSS.
  • [44] L7LFU6IQ * Make build steps clickable as well.
  • [45] BD3GRK4B * Get rid of "positive failures" and separate log phases.
  • [46] G5YSUSNZ In build tables, hide the project, jobset and/or job name if they're constant
  • [47] TQKGQ5R3
  • [48] TCXFZZFN * hydra: make chart zoomable and clickable
  • [49] D5QIOJGP * Move everything up one directory.
  • [50] FGQPXZIX hydra: make nr of build to keep configurable per jobset
  • [51] YJUOVXMD Remove the global Job status and Errors links
  • [52] LQNG45RT hydra: description at changes section
  • [53] UVMFS73T * Some jQuery / CSS hackery.
  • [54] FV2M6MOT hydra: use autoconf/-make
  • [55] B72GLND4
  • [56] 2B63JW6F * hydra: changes in list in stead of table, also showing changes of changed 'build output' inputs
  • [57] PRNGXWJ3 * hydra: more minor css tweaks
  • [58] WWZWUPFI if no previous successful build, do not show changes section
  • [59] HK32XC42
  • [60] US27ZTX5 * HydraFrontend -> Hydra.
  • [61] SGNXIOI4 Hydra/32: Add option to force evaluation of a certain jobset via web interface (for admins only)
  • [62] 75XUS62Y * Added a page to quickly see all failed builds and failed evaluations
  • [63] EFWN7JBV * Added a status page that shows all the currently executing build steps.
  • [64] KJOGCBGZ hydra: current build -> this build
  • [65] SMCOU72F hydra: add some admin for adding/enabling/etc build machines
  • [66] TH674WKJ add log diff to compare logs to previous builds
  • [67] DE2DNCOI Allow comparing an evaluation with an arbitrary other evaluation
  • [68] PHX2HIVG * Store info about the build inputs in the build record.
  • [69] BHZXGT2H * Channels: provide an index page that lists all the packages in the
  • [70] 2R7GHSA4 * hydra: added initial version of build graph
  • [71] NUIKDEHL * A quick hack to list the contents of various types of files (RPM,
  • [72] I35CIZI7
  • [73] KR7QIG6Z
  • [74] ELABMHJI * hydra: layout changes
  • [75] TW5ZQX5Z * Move up the build products in the builds page, since they're more
  • [76] 2GK5DOU7 * Downloading closures.
  • [77] TJPIS3UP hydra: minor improvements in hydra ui
  • [78] AKAXJDMW * Disable the statistics on the project, jobset and job pages for now
  • [79] S5PV6IIM * Represent jobs explicitly in the DB.
  • [80] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [81] QL55ECJ6 - adapted ui for hydra, more in line with nixos.org website
  • [82] HUH62VDL show current builds on job page
  • [83] ZWCTAZGL added newsitems, added some admin options to clear various caches.
  • [84] QTFVCDIF added hide feature for project/jobset
  • [85] FX2DV5AP hydra: remove old clear eval cache option
  • [86] HRAFVVOE make logo configurable via HYDRA_LOGO env var
  • [87] QZLMDKMU * Queue runner: don't start scheduled builds builds if they belong to
  • [88] 4S4ZMFJK * Links on trs.
  • [89] 777XFGVY Hydra/22: on job page, 'finished builds' shows nothing for old (non-current) jobs
  • [90] JK2QWPH6
  • [91] J5UVLXOK * Start of a basic Catalyst web interface.
  • [92] DVNWJXWW * Generic declaration of build products.
  • [93] 67P45PY4
  • [94] Z6MDQIGO * A quick (non-Web 2.0) interface to manually add builds to a release.
  • [95] ZEEZRG2E clean up build page for build that failed with result
  • [96] A52HEFHQ * Allow builds to be restarted (if they failed with a transient error,
  • [97] NDL67SQT * XHTML validity.
  • [98] ZNFDFJHG * Provide a redirect to the latest successful release in a release set
  • [99] MMDLWWZ2 automatic reload of tail log when build is running
  • [100] 7Z3YOKCV * PROCESS -> INCLUDE in most cases. INCLUDE does proper scoping of
  • [101] YJAHR4FU * jQuery 1.8.4.
  • [102] JLDUSNUO * Unify rendering of finished and scheduled builds.
  • [103] 2M7J26V4 inital version of links to diff in scm
  • [104] X5OIC5FF * hydra: ui bug
  • [105] DGVPFNCU * Grabbed a logo. TODO: check copyright status.
  • [106] 3BNEHVKO used wrong builds collection for determining if we need to show current build section in job page
  • [107] S66BOMVU * Added authentication.
  • [108] TMP2FRIW
  • [109] KSVD6RAP * hydra: queue stats (nr running builds / nr queued builds)
  • [110] RBNQKATL * Adding persistant releases. A release is a named set of builds.
  • [111] QT4FO2HP refactored admin controller, using chains, to avoid using requireadmin on each endpoint
  • [112] F2YSY4BK update jquery versions in templates
  • [113] MOCEUXZA * Support serving products that are directories (such as manuals or
  • [114] 22JB5HNE make changes section more compact/readable
  • [115] HPEG2RHV Merge the BuildResultInfo table into the Builds table
  • [116] BA46C5LN * Pretty-print the logs.
  • [117] YZUQKPNJ * hydra: remove excess layout
  • [118] ZXJSQF6B point log link for running build step to the automatically reloading log page in stead of the 'useless' pretty log page
  • [119] SIIXRVUE Tweak CSS for img/logo.
  • [120] FN6V3C7M always show latest 10 builds on job page
  • [121] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [122] 5QE3TIHP hydra: add status icon per jobset on project page
  • [123] JRU2LRPZ
  • [124] FZVIDIEP
  • [125] LQ5QEDVV
  • [126] VCOSLZRP
  • [127] YTSIRIMK * Separate job status and all builds pages.
  • [128] 2AUODJBT
  • [129] G6HJY2V4
  • [130] GPRYAAFP hydra: change icon for positive failures
  • [131] JBUTIGW7 hydra: description at changes section
  • [132] U4TD3AIQ Add support for viewing jobset evaluations
  • [133] UWVMQIAC * Refactoring.
  • [134] TNZXSORJ remove reference to non-existing nix-common.css
  • [135] IK53RV4V
  • [136] XJFHFZCA * Provide some redirects to build products by type so that we can for
  • [137] GN3JXNQS
  • [138] GCHNNFZP
  • [139] YTZOC7C5 * Editing of jobset inputs.
  • [140] KAZWI5G4 * hydra: buildpage, show changes since last build/successful build
  • [141] PILMG2JS * hydra: layout changes, forgot something
  • [142] WIISNKXD remove link to overall channel
  • [143] AX5EQJO3 hydra: show machine in buildsteps
  • [144] SZYDW2DG hydra: added some user admin
  • [145] PC6UOHH7 add some stats to jobsets in project view
  • [146] 4JPNFWRB * Use jquery for the logfile manipulation.
  • [147] HI6VU2PN Add links missing from the admin page.
  • [148] LP66DSH2 * hydra: updated jquery version, needed for tabs (to be added later)
  • [149] 67NFGL7D add links in admin page to clear queue (all non-running builds, and all non-running old (non-current) builds)
  • [150] 3SQCOHZN * minor performance tweaks
  • [151] P5X4P6VK * Renaming "release sets" to "views" (not finished yet). Having
  • [152] K5BEBWKM
  • [153] RSEGBU6C Hydra/20: Jobset clone feature
  • [154] OOQ2D3KC * Refactoring: move fetchInput out of hydra_scheduler into a separate
  • [*] OZ5UBJEK

Change contents

  • edit in src/root/Makefile.am at line 9
    [19.18732]
    [19.18732]
    BOOTSTRAP = bootstrap.zip
  • replacement in src/root/Makefile.am at line 11
    [19.18733][19.18733:18773]()
    ZIPS = $(FLOT) $(TABLESORTER) $(JQUERY)
    [19.18733]
    [19.18773]
    ZIPS = $(FLOT) $(TABLESORTER) $(JQUERY) $(BOOTSTRAP)
  • edit in src/root/Makefile.am at line 21
    [16.86]
    [16.86]
    unzip -u -d $(srcdir)/static $(BOOTSTRAP)
  • edit in src/root/Makefile.am at line 29
    [16.272]
    mkdir -p $(hydradir)/static/bootstrap
    cp -prvd $(srcdir)/static/bootstrap/* $(hydradir)/static/bootstrap
  • edit in src/root/admin.tt at line 5
    [19.8427][19.8427:8563](),[19.8563][19.0:240](),[19.240][19.477:984](),[19.241][19.8563:8816](),[19.984][19.8563:8816](),[19.8563][19.8563:8816](),[19.9032][19.9032:9263](),[19.9385][19.9385:9391]()
    <ul>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Project').action_for('create')) content = "Create project" %]</li>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('users')) content = "Manage users" %]</li>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('news')) content = "Manage news" %]</li>
    <li>Queue
    <ul>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('clear_queue')) content = "Clear all non-running builds from queue." confirmmsg = "Are you sure you want to clear the queue?" %]</li>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('clear_queue_non_current')) content = "Clear all non-running old builds from queue." confirmmsg = "Are you sure you want to clear the queue?" %]</li>
    </ul>
    </li>
    <li>Caching
    <ul>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('clearfailedcache')) content = "Clear failed builds cache" confirmmsg = "Are you sure you want to clear the failed builds cache?" %]</li>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('clearvcscache')) content = "Clear VCS caches" confirmmsg = "Are you sure you want to clear the VCS caches?" %]</li>
    </ul>
    </li>
    </ul>
  • replacement in src/root/build.tt at line 14
    [19.49][19.2029:2058](),[19.98][19.2029:2058](),[19.2029][19.2029:2058]()
    <table class="tablesorter">
    [19.49]
    [19.2058]
    <table class="tablesorter table table-striped table-condensed">
  • replacement in src/root/build.tt at line 85
    [19.7461][19.3892:4080](),[19.4080][19.513:604](),[19.604][19.4080:4168](),[19.4080][19.4080:4168](),[19.4168][19.695:788](),[19.788][5.0:81]()
    <div id="generic-tabs">
    <ul>
    <li><a href="#tabs-summary">Summary</a></li>
    <li><a href="#tabs-information">Information</a></li>
    <li><a href="#tabs-buildinputs">Build Inputs</a></li>
    [% IF relatedbuilds %]<li><a href="#tabs-relatedbuilds">Related builds</a></li>[% END %]
    [% IF build.buildsteps %]<li><a href="#tabs-buildsteps">Build Steps</a></li>[% END %]
    [% IF build.dependents %]<li><a href="#tabs-usedby">Used by</a></li>[% END%]
    [% IF prevBuilds %]<li><a href="#tabs-history">History chart</a></li>[% END %]
    [19.7439]
    [19.4253]
    <ul id="tab" class="nav nav-tabs">
    <li><a href="#tabs-summary" data-toggle="tab">Summary</a></li>
    <li><a href="#tabs-information" data-toggle="tab">Information</a></li>
    <li><a href="#tabs-buildinputs" data-toggle="tab">Build Inputs</a></li>
    [% IF relatedbuilds %]<li><a href="#tabs-relatedbuilds" data-toggle="tab">Related builds</a></li>[% END %]
    [% IF build.buildsteps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build Steps</a></li>[% END %]
    [% IF build.dependents %]<li><a href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%]
    [% IF prevBuilds %]<li><a href="#tabs-history" data-toggle="tab">History chart</a></li>[% END %]
  • replacement in src/root/build.tt at line 94
    [19.4260][19.4260:4285]()
    <div id="tabs-summary">
    [19.4260]
    [19.842]
    <div id="generic-tabs" class="tab-content">
    <div id="tabs-summary" class="tab-pane active">
  • replacement in src/root/build.tt at line 191
    [19.56][19.29:49](),[19.61][19.29:49](),[10.79][19.29:49](),[19.29][19.29:49]()
    <table>
    [10.79]
    [19.49]
    <table class="table table-striped table-condensed">
  • replacement in src/root/build.tt at line 204
    [19.353][19.353:920]()
    <td valign="center">[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild %]</td>
    [% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td valign="center">[% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderFullBuildLink build=firstBrokenBuild %]</td>[% END %]
    <td>[% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderFullBuildLink build=build %]</td>
    [19.353]
    [19.920]
    <td valign="center">[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild, hideProjectName=1, hideJobsetName=1 %]</td>
    [% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td valign="center">[% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderFullBuildLink build=firstBrokenBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% END %]
    <td>[% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderFullBuildLink build=build, hideProjectName=1, hideJobsetName=1 %]</td>
  • replacement in src/root/build.tt at line 229
    [19.7268][19.7268:7297]()
    <div id="tabs-information">
    [19.7268]
    [19.151]
    <div id="tabs-information" class="tab-pane">
  • replacement in src/root/build.tt at line 399
    [19.12719][19.12719:12748]()
    <div id="tabs-buildinputs">
    [19.12719]
    [19.12748]
    <div id="tabs-buildinputs" class="tab-pane">
  • replacement in src/root/build.tt at line 403
    [19.12778][19.12778:12808]()
    <table class="tablesorter">
    [19.12778]
    [19.12808]
    <table class="tablesorter table table-striped table-condensed">
  • replacement in src/root/build.tt at line 431
    [19.1175][19.592:694]()
    <h3>Changes since previous build : [% INCLUDE renderFullBuildLink build=prevBuild %]</h3>
    [19.1175]
    [19.1277]
    <h3>Changes since previous build : [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]</h3>
  • replacement in src/root/build.tt at line 438
    [19.1974][19.1974:2005]()
    <div id="tabs-relatedbuilds">
    [19.1974]
    [19.2008]
    <div id="tabs-relatedbuilds" class="tab-pane">
  • replacement in src/root/build.tt at line 446
    [19.3976][19.13667:13695]()
    <div id="tabs-buildsteps">
    [19.3976]
    [19.339]
    <div id="tabs-buildsteps" class="tab-pane">
  • replacement in src/root/build.tt at line 453
    [19.4210][19.13753:13780]()
    <div id="tabs-usedby">
    [19.4210]
    [19.145]
    <div id="tabs-usedby" class="tab-pane">
  • replacement in src/root/build.tt at line 459
    [19.13870][19.13870:13900]()
    <table class="tablesorter">
    [19.13870]
    [19.13900]
    <table class="tablesorter table table-condensed table-striped">
  • replacement in src/root/build.tt at line 477
    [5.102][19.845:873](),[19.845][19.845:873]()
    <div id="tabs-history">
    [5.102]
    [19.54]
    <div id="tabs-history" class="tab-pane">
  • replacement in src/root/build.tt at line 632
    [19.14437][19.14437:14465]()
    $("#generic-tabs").tabs();
    [19.14437]
    [19.14465]
    $('#tab').tab('show');
  • replacement in src/root/channel-contents.tt at line 37
    [19.3688][19.3688:3716]()
    <table class="tablesorter">
    [19.3688]
    [19.3716]
    <table class="tablesorter table table-condensed table-striped">
  • replacement in src/root/clone-build.tt at line 24
    [19.1454][19.1454:1484]()
    <table class="tablesorter">
    [19.1454]
    [19.1484]
    <table class="tablesorter table table-condensed table-striped">
  • replacement in src/root/common.tt at line 64
    [19.4110][19.4110:4223]()
    <table class="buildList [% IF !unsortable %]tablesorter[% END %] [% IF !showSchedulingInfo %] clean[% END %]">
    [19.4110]
    [19.767]
    <table class="buildList table table-striped table-condensed [% IF !unsortable %]tablesorter[% END %] [% IF !showSchedulingInfo %] clean[% END %]">
  • edit in src/root/common.tt at line 189
    [19.7079]
    [19.7079]
    [% BLOCK maybeButton -%]
    [% IF uri %]<a class="btn btn-mini" [% HTML.attributes(href => uri) %][% IF confirmmsg %]onclick="javascript:return confirm('[% confirmmsg %]')"[% END %]>[% content %]</a>[% ELSE; content; END -%]
    [% END -%]
  • replacement in src/root/common.tt at line 327
    [19.2099][19.0:34]()
    <table class="tablesorter clean">
    [19.2099]
    [19.34]
    <table class="table table-striped table-condensed">
  • replacement in src/root/common.tt at line 372
    [19.10973][19.10973:11001]()
    <table class="tablesorter">
    [19.10973]
    [19.11001]
    <table class="tablesorter table table-striped table-condensed">
  • edit in src/root/common.tt at line 394
    [19.4504]
    [19.4504]
    <ul class="pagination">
    <li><a href="[% "$baseUri?page=1" %]">First</a></li>
    <li [% IF page == 1 %]class="disabled"[% END %]><a href="[% "$baseUri?page="; (page - 1) %]">Previous</a></li>
    <li [% IF page * resultsPerPage < total %]class="disabled"[% END %]><a href="[% "$baseUri?page="; (page + 1) %]">Next</a></li>
    <li><a href="[% "$baseUri?page="; (total - 1) div resultsPerPage + 1 %]">Last</a></li>
    </ul>
    <!--
  • replacement in src/root/common.tt at line 403
    [19.4508][19.4508:4554]()
    [<a href="[% "$baseUri?page=1" %]">First</a>]
    [19.4508]
    [19.4554]
    []
  • edit in src/root/common.tt at line 412
    [19.4832]
    [19.4832]
    -->
  • replacement in src/root/edit-view.tt at line 37
    [19.860][19.860:890]()
    <table class="tablesorter">
    [19.860]
    [19.890]
    <table class="tablesorter table table-condensed table-striped">
  • replacement in src/root/errors.tt at line 18
    [19.1816][19.1816:1854]()
    <table class="buildList tablesorter">
    [19.1816]
    [19.1854]
    <table class="buildList tablesorter table table-condensed table-striped">
  • replacement in src/root/errors.tt at line 44
    [19.2342][19.2342:2380]()
    <table class="buildList tablesorter">
    [19.2342]
    [19.2380]
    <table class="buildList tablesorter table table-condensed table-striped">
  • replacement in src/root/job.tt at line 5
    [19.7780][19.7780:7781](),[19.7781][19.1328:1647](),[19.1647][19.330:332](),[19.332][19.17971:18153](),[19.18153][19.183:245]()
    <h1>Job <tt>[% INCLUDE renderLink
    uri = c.uri_for(c.controller('Project').action_for('view'), [project.name])
    title = project.name %]:[% INCLUDE renderLink
    uri = c.uri_for(c.controller('Jobset').action_for('index'), [project.name, jobset.name])
    title = jobset.name %]:[% job.name %]</tt></h1>
    <div id="generic-tabs">
    <ul>
    <li><a href="#tabs-status">Status</a></li>
    <li><a href="#tabs-channels">Channels</a></li>
    <li><a href="#tabs-latestbuilds">Latest builds</a></li>
    <!-- <li><a href="#tabs-statistics">Statistics</a></li> -->
    [19.7780]
    [19.18206]
    <ul id="tab" class="nav nav-tabs">
    <li><a href="#tabs-status" data-toggle="tab">Status</a></li>
    <li><a href="#tabs-channels" data-toggle="tab">Channels</a></li>
    <li><a href="#tabs-latestbuilds" data-toggle="tab">Latest builds</a></li>
  • replacement in src/root/job.tt at line 10
    [19.18213][19.18213:18237]()
    <div id="tabs-status">
    [19.18213]
    [19.645]
    <div id="generic-tabs" class="tab-content">
    <div id="tabs-status" class="tab-pane active">
  • replacement in src/root/job.tt at line 25
    [19.18487][19.18487:18513]()
    <div id="tabs-channels">
    [19.18487]
    [14.197]
    <div id="tabs-channels" class="tab-pane">
  • replacement in src/root/job.tt at line 36
    [19.18985][19.18985:19015]()
    <div id="tabs-latestbuilds">
    [19.18985]
    [19.19015]
    <div id="tabs-latestbuilds" class="tab-pane">
  • edit in src/root/job.tt at line 47
    [19.19395][19.246:258](),[19.258][19.19395:19423](),[19.19395][19.19395:19423](),[19.19423][19.259:317]()
    [%#
    <div id="tabs-statistics">
    [% INCLUDE showBuildStats % ]
    </div>
    %]
  • replacement in src/root/job.tt at line 49
    [19.19504][19.19504:19532]()
    $("#generic-tabs").tabs();
    [19.19504]
    [19.19532]
    jQuery(document).ready(function ($) {
    $('#tab').tab('show');
    });
  • replacement in src/root/jobset-evals.tt at line 15
    [19.6793][19.6793:6821]()
    <table class="tablesorter">
    [19.6793]
    [19.6821]
    <table class="tablesorter table table-condensed table-striped">
  • replacement in src/root/jobset-evals.tt at line 29
    [19.7283][19.7283:7365]()
    [% eval.get_column('nrSucceeded') %] / [% eval.get_column('nrBuilds') %]
    [19.7283]
    [19.7365]
    <span class="label label-success">[% eval.get_column('nrSucceeded') %]</span>
    <span class="label label-important">[% eval.get_column('nrBuilds') - eval.get_column('nrSucceeded') - eval.get_column('nrScheduled') %]</span>
  • replacement in src/root/jobset-evals.tt at line 32
    [19.7411][19.7411:7466]()
    <br />[% eval.get_column('nrScheduled') %] scheduled
    [19.7411]
    [19.7466]
    <span class="label">[% eval.get_column('nrScheduled') %]</span>
  • replacement in src/root/jobset-evals.tt at line 38
    [19.7614][19.7614:7675]()
    <span class='green'><strong>+[% diff %]</strong></span>
    [19.7614]
    [19.7675]
    <span class='label label-success'><strong>+[% diff %]</strong></span>
  • replacement in src/root/jobset-evals.tt at line 40
    [19.7737][19.7737:7795]()
    <span class='red'><strong>[% diff %]</strong></span>
    [19.7737]
    [19.7795]
    <span class='label label-important'><strong>[% diff %]</strong></span>
  • edit in src/root/jobset.tt at line 11
    [19.8919][19.8919:8930](),[19.8930][19.1648:1828]()
    [% ELSE %]
    <h1>Jobset <tt>[% INCLUDE renderLink
    uri = c.uri_for(c.controller('Project').action_for('view'), [project.name])
    title = project.name %]:[% jobset.name %]</tt></h1>
  • replacement in src/root/jobset.tt at line 55
    [19.19589][19.19589:19619]()
    <table class="tablesorter">
    [19.19589]
    [19.19619]
    <table class="tablesorter table table-striped table-condensed">
  • replacement in src/root/jobset.tt at line 74
    [19.11583][19.20070:20100]()
    <div id="generic-tabs">
    <ul>
    [19.11583]
    [19.20100]
    <ul id="tab" class="nav nav-tabs">
  • replacement in src/root/jobset.tt at line 76
    [19.20118][19.20118:20170](),[19.20170][19.401:498](),[19.498][19.20256:20322](),[19.20256][19.20256:20322]()
    <li><a href="#tabs-information">Jobset</a></li>
    [% IF jobset.errormsg -%]<li><a href="#tabs-errors">Evaluation errors</a></li>[% END %]
    <li><a href="#tabs-jobs">Jobs ([% activeJobs.size %])</a></li>
    [19.20118]
    [19.20322]
    <li><a href="#tabs-information" data-toggle="tab">Jobset</a></li>
    [% IF jobset.errormsg -%]<li><a href="#tabs-errors" data-toggle="tab">Evaluation errors</a></li>[% END %]
    <li><a href="#tabs-jobs" data-toggle="tab">Jobs ([% activeJobs.size %])</a></li>
  • replacement in src/root/jobset.tt at line 80
    [19.20334][19.20334:20377]()
    <li><a href="#tabs-setup">Setup</a></li>
    [19.20334]
    [19.20377]
    <li><a href="#tabs-setup" data-toggle="tab">Setup</a></li>
  • replacement in src/root/jobset.tt at line 82
    [19.20395][19.20395:20445](),[19.20445][19.318:381]()
    <li><a href="#tabs-channels">Channels</a></li>
    <!-- <li><a href="#tabs-statistics">Statistics</a></li> -->
    [19.20395]
    [19.20499]
    <li><a href="#tabs-channels" data-toggle="tab">Channels</a></li>
  • replacement in src/root/jobset.tt at line 85
    [19.20518][19.20518:20547]()
    <div id="tabs-information">
    [19.20518]
    [19.499]
    <div id="generic-tabs" class="tab-content">
    <div id="tabs-information" class="tab-pane active">
  • replacement in src/root/jobset.tt at line 104
    [19.20737][19.347:361]()
    <table>
    [19.20737]
    [19.20776]
    <table class="table table-striped table-condensed">
  • replacement in src/root/jobset.tt at line 138
    [19.22007][19.22007:22032]()
    <div id="tabs-errors">
    [19.22007]
    [19.382]
    <div id="tabs-errors" class="tab-pane">
  • replacement in src/root/jobset.tt at line 144
    [19.22171][19.22171:22195]()
    <div id="tabs-setup">
    [19.22171]
    [19.2081]
    <div id="tabs-setup" class="tab-pane [% IF edit %]active[% END %]">
  • edit in src/root/jobset.tt at line 147
    [19.2109][19.2109:2366](),[19.2366][19.22340:22344](),[19.22340][19.22340:22344]()
    [% IF !edit && c.user_exists %]
    <p>
    [ <a href="[% c.uri_for('/jobset' project.name jobset.name 'edit') %]">Edit</a> | <a href="[% c.uri_for('/jobset' project.name jobset.name 'clone') %]">Clone</a> ]
    </p>
    [% END %]
  • replacement in src/root/jobset.tt at line 209
    [19.24037][19.24037:24064]()
    <div id="tabs-channels">
    [19.24037]
    [19.24064]
    <div id="tabs-channels" class="tab-pane">
  • replacement in src/root/jobset.tt at line 225
    [19.24626][19.24626:24649]()
    <div id="tabs-jobs">
    [19.24626]
    [19.24649]
    <div id="tabs-jobs" class="tab-pane">
  • edit in src/root/jobset.tt at line 247
    [19.25352][19.414:434](),[19.434][19.25352:25411](),[19.25352][19.25352:25411](),[19.25411][19.435:468](),[19.468][19.25443:25452](),[19.25443][19.25443:25452](),[19.25452][19.469:488]()
    [%#
    <div id="tabs-statistics">
    <h2>Statistics</h2>
    [% INCLUDE showBuildStats % ]
    </div>
    %]
  • replacement in src/root/jobset.tt at line 252
    [19.25504][19.25504:25532]()
    $("#generic-tabs").tabs();
    [19.25504]
    [19.25532]
    jQuery(document).ready(function ($) {
    $('#tab').tab('show');
    });
  • replacement in src/root/layout.tt at line 13
    [19.2185][8.0:113](),[8.113][19.232:307](),[19.113][19.232:307](),[19.113][19.232:307](),[19.258][19.232:307](),[19.2185][19.232:307](),[19.25656][19.232:307](),[19.11498][19.232:307](),[19.156][19.1829:1909](),[19.156][19.307:384](),[19.1909][19.307:384](),[19.307][19.307:384](),[19.384][19.423:617](),[19.217][19.1805:1901](),[19.310][19.1805:1901](),[19.362][19.1805:1901](),[19.558][19.1805:1901](),[19.577][19.1805:1901](),[19.617][19.1805:1901](),[19.12001][19.1805:1901](),[19.1805][19.1805:1901]()
    <link type="text/css" href="/static/js/jquery/css/smoothness/jquery-ui-1.8.5.custom.css" rel="Stylesheet" />
    <link rel="stylesheet" href="/static/css/hydra.css" type="text/css" />
    <link rel="stylesheet" href="/static/css/nixos-site.css" type="text/css" />
    <link rel="stylesheet" href="/static/css/logfile.css" type="text/css" />
    <script type="text/javascript" src="/static/js/jquery/js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="/static/js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
    <script type="text/javascript" src="/static/js/tablesorter/jquery.tablesorter.js"></script>
    [19.2185]
    [19.618]
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" type="text/css" />
    <style>
    body {
    padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
    padding-bottom: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
    }
    </style>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap-responsive.css" type="text/css" />
  • edit in src/root/layout.tt at line 23
    [19.619]
    [19.1901]
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
    <script type="text/javascript" src="/static/bootstrap/js/bootstrap-dropdown.js"></script>
    <script type="text/javascript" src="/static/bootstrap/js/bootstrap-tab.js"></script>
    <script type="text/javascript" src="/static/bootstrap/js/bootstrap-alert.js"></script>
    <!--
    <script type="text/javascript" src="/static/js/tablesorter/jquery.tablesorter.js"></script>
    -->
  • edit in src/root/layout.tt at line 35
    [19.38][19.620:621](),[19.49][19.6:54](),[19.621][19.6:54](),[19.1555][19.6:54]()
    $("table.tablesorter").tablesorter();
  • edit in src/root/layout.tt at line 83
    [19.11584][19.628:648]()
    <div id="page">
  • replacement in src/root/layout.tt at line 84
    [19.649][19.649:811](),[19.811][19.2119:2157](),[19.2119][19.2119:2157]()
    <div id="header">
    <div id="logo"><a class="no-hover" href="/"><img src="[% logo %]" alt="Hydra Logo" /></a></div>
    [% PROCESS topbar.tt %]
    [% PROCESS contextbar.tt %]
    [19.649]
    [19.4730]
    <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
    <div class="container">
    <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    </a>
    <a class="brand" href="[% c.uri_for(c.controller('Root').action_for('index')) %]">Hydra</a>
    <div class="nav-collapse">
    [% PROCESS topbar.tt %]
    </div><!--/.nav-collapse -->
    </div>
  • replacement in src/root/layout.tt at line 98
    [19.4743][19.812:866]()
    <div id="main">
    [% PROCESS navbar.tt %]
    [19.4743]
    [19.4743]
    </div>
  • replacement in src/root/layout.tt at line 100
    [19.4744][19.2222:2273](),[19.615][19.4876:4891](),[19.2273][19.4876:4891](),[19.4824][19.4876:4891](),[19.4876][19.4876:4891]()
    <div id="content">
    [% content %]
    </div>
    [19.4744]
    [19.2274]
    <div class="container">
    [% content %]
    </div>
  • replacement in src/root/layout.tt at line 106
    [19.2275][19.4891:4904](),[19.4891][19.4891:4904](),[19.4904][19.2276:2300]()
    </div>
    <div id="footer">
    [19.2275]
    [19.2300]
    <div class="navbar navbar-fixed-bottom">
    <div id="footer" style="text-align: center;">
  • edit in src/root/layout.tt at line 117
    [19.11729]
    [19.11729]
  • replacement in src/root/machines.tt at line 6
    [9.2565][9.2565:2573]()
    <table>
    [9.2565]
    [9.2573]
    <table class="table table-condensed table-striped">
  • edit in src/root/navbar.tt at line 1
    [19.15137][19.15138:15302](),[19.15302][19.2604:2750](),[19.2750][19.15302:15465](),[19.15302][19.15302:15465](),[19.15465][19.2751:2814](),[19.2814][19.15700:15720](),[19.15700][19.15700:15720](),[19.15720][19.2815:2823](),[19.2823][19.15738:15749](),[19.15738][19.15738:15749](),[19.15749][19.12002:12028](),[19.2841][19.16330:16331](),[19.12028][19.16330:16331](),[19.16330][19.16330:16331](),[19.16331][19.2842:2864](),[19.2864][19.16331:16424](),[19.16331][19.16331:16424](),[19.16424][19.2865:3497](),[19.3334][19.16853:17139](),[19.3497][19.16853:17139](),[19.16853][19.16853:17139](),[19.17139][19.7944:8100](),[19.8100][19.17139:17266](),[19.17139][19.17139:17266](),[19.17266][15.0:311](),[15.311][19.17425:17538](),[19.3487][19.17425:17538](),[19.17425][19.17425:17538](),[19.17538][2.0:107](),[2.107][19.17642:17998](),[19.17642][19.17642:17998](),[19.17998][19.3488:3647](),[19.3647][19.17998:18024](),[19.17998][19.17998:18024](),[19.18024][19.12029:12341](),[19.12341][19.4439:4559](),[19.4559][19.12341:12367](),[19.12341][19.12341:12367](),[19.12367][19.18024:18027](),[19.18024][19.18024:18027](),[19.18027][19.3498:3515]()
    [% BLOCK makeLinkWrapped %]
    <li [% IF curUri == uri %]class="active"[% END %]>
    <div class="title"><a href="[% uri %]">[% title %]</a></div>
    [% content %]
    </li>
    [% END %]
    [% BLOCK menuItem %]
    <li [% IF "${root}${curUri}" == uri %]class="active"[% END %]>
    <a href="[% uri %]">[% title %]</a>
    </li>
    [% END %]
    [% BLOCK makeLink -%]
    [% INCLUDE makeLinkWrapped content="" -%]
    [% END %]
    [% BLOCK makeSubMenu %]
    [% extra = collapsed ? "collapsed" : "" %]
    <div id="left-title">[% title %]</div>
    <ul id="left-menu">
    [% content %]
    </ul>
    [% END %]
    [% IF project || admin %]
    <div id="left-bar">
    [% IF project %]
    [% WRAPPER makeSubMenu title="Project" collapsed=(jobset || job) %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('view'), [project.name]) title = "Overview" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('releases'), [project.name]) title = "Releases" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('all'), [project.name]) title = "All builds" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('jobstatus'), [project.name]) title = "Job status" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('errors'), [project.name]) title = "Errors" %]
    [% END %]
    [% END %]
    [% IF jobset %]
    [% WRAPPER makeSubMenu title="Jobset" collapsed=job %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('index'), [project.name, jobset.name])
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('evals'), [project.name, jobset.name])
    title = "Evaluations" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('all'), [project.name, jobset.name])
    title = "All builds" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('jobstatus'), [project.name, jobset.name])
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('errors'), [project.name, jobset.name])
    title = "Errors" %]
    [% END %]
    [% END %]
    [% IF job %]
    [% WRAPPER makeSubMenu title="Job" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('overview'), [project.name, jobset.name, job.name])
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('all'), [project.name, jobset.name, job.name])
    title = "All builds" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('jobstatus'), [project.name, jobset.name, job.name])
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('errors'), [project.name, jobset.name, job.name])
    title = "Errors" %]
    [% END %]
    [% END %]
    [% IF admin %]
    [% WRAPPER makeSubMenu title="Admin" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('machines'))
    title = "Machines" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('managenews'))
    title = "News" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('users'))
    title = "Users" %]
    [% END %]
    [% END %]
    </div>
    [% END %]
  • edit in src/root/navbar.tt at line 2
    [19.18549][19.18549:18550]()
  • replacement in src/root/news.tt at line 10
    [19.9930][19.9930:9942]()
    <table>
    [19.9930]
    [19.9942]
    <table class="table table-striped table-condensed">
  • replacement in src/root/overview.tt at line 5
    [19.10861][19.10861:10887]()
    <div class="newsbar">
    [19.10861]
    [19.10887]
    <div class="alert alert-info">
    <a class="close" data-dismiss="alert">×</a>
  • replacement in src/root/overview.tt at line 9
    [19.10976][19.10976:11131]()
    <p><b>[% INCLUDE renderDateTime timestamp=i.createtime %]</b> <tt>by [% i.author.fullname %]</tt> <br/>[% contents.replace('\n','<br />\n') %]
    [19.10976]
    [19.11131]
    <h4 class="alert-heading">[% INCLUDE renderDateTime timestamp=i.createtime %] by [% i.author.fullname %]</h4>
    [% contents.replace('\n','<br />\n') %]
  • replacement in src/root/overview.tt at line 19
    [19.19493][19.19493:19521]()
    <table class="tablesorter">
    [19.19493]
    [19.19521]
    <table class="tablesorter table table-condensed table-striped">
  • edit in src/root/overview.tt at line 49
    [19.20058][19.3516:3698]()
    [% IF c.user_exists %]
    <p>
    [ [% INCLUDE maybeLink
    uri = c.uri_for(c.controller('Project').action_for('create'))
    content = "Create project" %] ]
    </p>
    [% END %]
  • replacement in src/root/product-list.tt at line 32
    [12.209][12.209:255]()
    <div class="help productDetails">
    [12.209]
    [12.255]
    <div class="well hide productDetails">
  • replacement in src/root/product-list.tt at line 54
    [19.827][19.827:873]()
    <div class="help productDetails">
    [19.827]
    [19.873]
    <div class="well hide productDetails">
  • replacement in src/root/product-list.tt at line 86
    [12.1165][12.1165:1211]()
    <div class="help productDetails">
    [12.1165]
    [12.1211]
    <div class="well hide productDetails">
  • replacement in src/root/product-list.tt at line 136
    [19.2031][19.5166:5203](),[19.5166][19.5166:5203]()
    <div class="productDetails">
    [19.2031]
    [19.5203]
    <div class="well hide productDetails">
  • edit in src/root/product-list.tt at line 233
    [19.7203][19.7203:7204]()
  • replacement in src/root/project.tt at line 3
    [19.3055][19.3055:3105](),[19.3105][19.2681:2728](),[19.2728][19.3155:3166](),[19.3155][19.3155:3166](),[19.3166][19.25657:25687]()
    [% IF create %]
    <h1>New Project</h1>
    [% ELSE %]
    <h1>Project <tt>[% project.name %]</tt></h1>
    [% END %]
    <div id="generic-tabs">
    <ul>
    [19.3207]
    [19.25687]
    <ul id="tab" class="nav nav-tabs">
  • replacement in src/root/project.tt at line 5
    [19.25704][19.25704:25752]()
    <li><a href="#tabs-project">Project</a></li>
    [19.25704]
    [19.25752]
    <li><a href="#tabs-project" data-toggle="tab">Project</a></li>
  • replacement in src/root/project.tt at line 7
    [19.25764][19.25764:25813]()
    <li><a href="#tabs-settings">Settings</a></li>
    [19.25764]
    [19.25813]
    <li><a href="#tabs-settings" data-toggle="tab">Settings</a></li>
  • replacement in src/root/project.tt at line 9
    [19.25830][19.25830:25924](),[19.25924][19.489:552]()
    <li><a href="#tabs-views">Views</a></li>
    <li><a href="#tabs-channels">Channels</a></li>
    <!-- <li><a href="#tabs-statistics">Statistics</a></li> -->
    [19.25830]
    [19.25978]
    <li><a href="#tabs-views" data-toggle="tab">Views</a></li>
    <li><a href="#tabs-channels" data-toggle="tab">Channels</a></li>
  • edit in src/root/project.tt at line 14
    [19.3167]
    [19.25998]
    <div class="tab-content">
  • replacement in src/root/project.tt at line 17
    [19.26014][19.26014:26040]()
    <div id="tabs-project">
    [19.26014]
    [19.26040]
    <div id="tabs-project" class="tab-pane active">
  • replacement in src/root/project.tt at line 24
    [19.26159][19.26159:26190]()
    <table class="tablesorter">
    [19.26159]
    [19.26190]
    <table class="tablesorter table table-striped table-condensed">
  • replacement in src/root/project.tt at line 57
    [19.468][19.468:507]()
    [% class = '' %]
    [19.468]
    [19.507]
    [% class = 'label' %]
  • replacement in src/root/project.tt at line 59
    [19.556][19.556:598]()
    [% class = 'red' %]
    [19.556]
    [19.598]
    [% class = 'label label-important' %]
  • replacement in src/root/project.tt at line 61
    [19.647][19.647:692]()
    [% class = 'orange' %]
    [19.647]
    [7.0]
    [% class = 'label label-warning' %]
  • replacement in src/root/project.tt at line 63
    [7.51][19.748:792](),[19.748][19.748:792]()
    [% class = 'green' %]
    [7.51]
    [19.792]
    [% class = 'label label-success' %]
  • replacement in src/root/project.tt at line 66
    [19.850][6.0:37](),[6.37][19.873:965](),[19.873][19.873:965]()
    <td align="right">
    <div class="[% class %]">[% successrate FILTER format('%d') %]%</div>
    [19.850]
    [19.965]
    <td>
    <span class="[% class %]">[% successrate FILTER format('%d') %]%</span>
    </td>
    <td>
    [% IF j.get_column('nrsucceeded') > 0 %]
    <span class="label label-success">[% j.get_column('nrsucceeded') %]</span>
    [% END %]
    [% IF j.get_column('nrfailed') > 0 %]
    <span class="label label-important">[% j.get_column('nrfailed') %]</span>
    [% END %]
  • replacement in src/root/project.tt at line 77
    [19.1028][19.1028:1109]()
    [% j.get_column('nrscheduled') %] builds still running
    [19.1028]
    [19.1109]
    <span class="label label">[% j.get_column('nrscheduled') %]</span>
  • edit in src/root/project.tt at line 80
    [19.1165][19.1165:1343]()
    <td align="right">
    <div class="[% class %]">[% j.get_column('nrsucceeded') %]/[% j.get_column('nrtotal') %]</div>
    </td>
  • replacement in src/root/project.tt at line 81
    [19.910][19.3238:3674]()
    <td>[ [% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('force_eval'), project.name, j.name) content = "Evaluate" confirmmsg = ("Are you sure you want to force evaluation of jobset " _ project.name _ ":" _ j.name _ "?") %]
    | [% IF j.hidden %]
    [% INCLUDE maybeLink uri = c.uri_for('/jobset' project.name j.name 'unhide') content = "Unhide" %]
    [19.910]
    [19.3674]
    <td>[% INCLUDE maybeButton uri = c.uri_for(c.controller('Admin').action_for('force_eval'), project.name, j.name) content = "Evaluate" confirmmsg = ("Are you sure you want to force evaluation of jobset " _ project.name _ ":" _ j.name _ "?") %]
    [% IF j.hidden %]
    [% INCLUDE maybeButton uri = c.uri_for('/jobset' project.name j.name 'unhide') content = "Unhide" %]
  • replacement in src/root/project.tt at line 85
    [19.3712][19.3712:3837]()
    [% INCLUDE maybeLink uri = c.uri_for('/jobset' project.name j.name 'hide') content = "Hide" %]
    [19.3712]
    [19.3837]
    [% INCLUDE maybeButton uri = c.uri_for('/jobset' project.name j.name 'hide') content = "Hide" %]
  • edit in src/root/project.tt at line 87
    [19.3873][19.3873:3896]()
    ]
  • edit in src/root/project.tt at line 100
    [19.26897][19.26897:27028]()
    <p><a href="[% c.uri_for(c.controller('Project').action_for('create_jobset'), [project.name]) %]">[Create a new jobset]</a></p>
  • replacement in src/root/project.tt at line 103
    [19.27050][19.27050:27076]()
    <div id="tabs-settings">
    [19.27050]
    [19.27076]
    <div id="tabs-settings" class="tab-pane [% IF edit %]active[% END %]">
  • replacement in src/root/project.tt at line 109
    [19.27269][19.27269:27402]()
    <h2>Information[% IF !edit %] <a class="smallLink" href="[% c.uri_for('/project' project.name 'edit') %]">[Edit]</a>[% END %]</h2>
    [19.27269]
    [19.27402]
    <h2>Information</h2>
  • replacement in src/root/project.tt at line 177
    [19.29380][19.29380:29405]()
    <div id="tabs-views">
    [19.29380]
    [19.29405]
    <div id="tabs-views" class="tab-pane">
  • replacement in src/root/project.tt at line 203
    [19.30023][19.30023:30051]()
    <div id="tabs-channels">
    [19.30023]
    [19.30051]
    <div id="tabs-channels" class="tab-pane">
  • edit in src/root/project.tt at line 217
    [19.30585][19.553:602](),[19.602][19.30615:30638](),[19.30615][19.30615:30638](),[19.30638][19.603:636](),[19.636][19.30678:30687](),[19.30678][19.30678:30687](),[19.30687][19.637:656]()
    [%#
    <div id="tabs-statistics">
    <h2>Statistics</h2>
    [% INCLUDE showBuildStats % ]
    </div>
    %]
  • replacement in src/root/project.tt at line 221
    [19.30738][19.30738:30766]()
    $("#generic-tabs").tabs();
    [19.30738]
    [19.30766]
    jQuery(document).ready(function ($) {
    $('#tab').tab('show');
    });
  • replacement in src/root/releases.tt at line 15
    [19.1942][3.0:28]()
    <table class="tablesorter">
    [19.1942]
    [3.28]
    <table class="tablesorter table table-condensed table-striped">
  • replacement in src/root/static/css/hydra.css at line 1
    [19.8691][19.873:961](),[19.961][19.30870:30872](),[19.30870][19.30870:30872](),[19.30912][19.30912:30913](),[19.30913][19.157:169](),[19.8691][19.157:169](),[19.169][13.0:17](),[19.14][19.8897:8900](),[13.17][19.8897:8900](),[19.186][19.8897:8900](),[19.427][19.8897:8900](),[19.975][19.8897:8900](),[19.1923][19.8897:8900](),[19.3715][19.8897:8900](),[19.8897][19.8897:8900](),[19.8900][19.976:982](),[19.982][19.30949:30976](),[19.30949][19.30949:30976](),[19.30976][19.983:1256](),[19.1256][19.494:497](),[19.308][19.494:497](),[19.497][19.1257:1289](),[19.1289][17.1480:1511](),[19.1314][19.30977:30999](),[17.1511][19.30977:30999](),[19.4976][19.30977:30999](),[19.30999][19.8702:8705](),[19.2599][19.8702:8705](),[19.8705][19.1315:1355](),[19.1355][19.1099:1124](),[19.1124][19.31000:31003](),[19.1355][19.31000:31003](),[19.8787][19.31000:31003](),[19.31003][19.1356:1361](),[19.1361][19.8101:8251](),[19.1391][19.31086:31089](),[19.8251][19.31086:31089](),[19.31086][19.31086:31089](),[19.31089][19.84:135](),[19.135][19.1431:1462](),[19.1431][19.1431:1462](),[19.1462][19.9167:9170](),[19.31140][19.9167:9170](),[19.9167][19.9167:9170](),[19.9170][19.136:186](),[19.186][19.1163:1197](),[19.1163][19.1163:1197](),[19.1197][19.1463:1538](),[19.9170][19.1463:1538](),[19.1538][19.1109:1110](),[19.1110][19.1538:1576](),[19.1538][19.1538:1576](),[19.1576][19.10386:10389](),[19.23436][19.10386:10389](),[19.10386][19.10386:10389](),[19.10389][19.1111:1147](),[19.1147][19.1577:1578](),[19.10389][19.1577:1578](),[19.1578][19.1148:1149](),[19.1149][19.1578:1637](),[19.1578][19.1578:1637](),[19.1637][19.1104:1107](),[19.27][19.1104:1107](),[19.1107][19.1638:1839](),[19.27][19.10609:10612](),[19.1139][19.10609:10612](),[19.1839][19.10609:10612](),[19.2622][19.10609:10612](),[19.10609][19.10609:10612](),[19.10612][19.1840:1954](),[19.1954][19.3474:3477](),[19.3474][19.3474:3477](),[19.3477][19.1955:2072](),[19.325][19.247:250](),[19.2072][19.247:250](),[19.10676][19.247:250](),[19.250][19.2073:2191](),[19.2191][19.606:609](),[19.606][19.606:609](),[19.609][19.2192:2414](),[19.2414][19.5731:5734](),[19.5731][19.5731:5734](),[19.609][19.1971:2033](),[19.5734][19.1971:2033](),[19.250][19.1971:2033](),[19.2033][19.3561:3605](),[19.3605][19.2033:2035](),[19.2033][19.2033:2035](),[19.2035][19.250:251](),[19.250][19.250:251](),[19.2037][19.3606:3711](),[19.3711][19.449:452](),[19.452][18.0:156](),[18.156][19.2022:2024](),[19.816][19.2022:2024](),[19.2451][19.2022:2024](),[19.2022][19.2022:2024](),[19.2024][19.3714:3715](),[19.1607][19.3714:3715](),[19.3715][19.2452:2469](),[19.2469][18.157:199](),[18.199][19.2396:2398](),[19.2489][19.2396:2398](),[19.2396][19.2396:2398](),[19.2398][19.2025:2026](),[19.3715][19.2025:2026](),[19.2026][19.2490:2546](),[19.2546][19.2459:2462](),[19.2459][19.2459:2462](),[19.2462][19.2547:2595](),[19.2595][19.317:319](),[19.317][19.317:319](),[19.319][19.1174:1175](),[19.1175][19.2596:2651](),[19.2651][19.520:523](),[19.520][19.520:523](),[19.523][19.2652:2667](),[19.2667][11.423:516](),[11.516][19.740:772](),[19.2667][19.740:772](),[19.772][19.2696:2743](),[19.2696][19.2696:2743](),[19.2743][19.773:820](),[19.820][19.637:640](),[19.2743][19.637:640](),[19.637][19.637:640](),[19.640][19.2744:2808](),[19.2808][19.757:760](),[19.757][19.757:760](),[19.760][19.2809:2887](),[19.2887][19.878:880](),[19.878][19.878:880](),[19.880][19.728:729](),[19.729][19.2888:2919](),[19.2919][19.1974:1977](),[19.787][19.1974:1977](),[19.1977][19.2920:3009](),[19.3009][19.1977:1978](),[19.1977][19.1977:1978](),[19.1978][19.3010:3072](),[19.3072][19.8852:8918](),[19.8852][19.8852:8918](),[19.2096][19.2096:2099](),[19.2640][19.2640:2736](),[19.2736][19.0:17](),[19.17][19.2753:2755](),[19.3079][19.2753:2755](),[19.2753][19.2753:2755](),[19.2755][19.3711:3732](),[19.3732][19.3080:3096](),[19.3096][19.1104:1126](),[19.1126][19.11171:11188]()
    body {
    font-family: sans-serif;
    background: white;
    margin: 2em 1em 2em 1em;
    }
    #logo img {
    height: 6em;
    }
    img {
    border-style: none;
    }
    a { text-decoration: none;}
    a:link { color: #0048b3; }
    a:visited { color: #002a6a; }
    a.no-hover:hover { background: none; }
    a:hover, a:visited:hover { text-decoration: underline;}
    a.smallLink {
    font-size: 60%;
    vertical-align: top;
    }
    a#error-link {
    color: red;
    }
    table {
    empty-cells: show;
    border-collapse: collapse;
    text-align: left;
    }
    th, td {
    border: 1px solid #dddddd;
    vertical-align: top;
    }
    th {
    background-color: #E6EEEE;
    }
    th.subheader {
    background-color: #f0f0f8;
    font-size: 120%;
    text-align: center;
    font-weight: normal;
    }
    table.tablesorter:not(.clean) tr:nth-child(even) {
    background-color: #efefef;
    }
    table.tablesorter:not(.clean) tr:nth-child(odd) {
    background-color: #ffffff;
    }
    tr.clickable:hover {
    background-color: #E6EEFF;
    cursor: pointer;
    }
    td.centered {
    text-align: center;
    }
    td.right {
    text-align: right;
    }
    .layoutTable td, .layoutTable th {
    border-style: none;
    }
    table.tablesorter thead tr .header {
    background-image: url(/static/js/tablesorter/themes/blue/bg.gif);
    background-repeat: no-repeat;
    background-position: center right;
    cursor: pointer;
    }
    table.tablesorter thead tr .headerSortUp {
    background-image: url(/static/js/tablesorter/themes/blue/asc.gif);
    }
    table.tablesorter thead tr .headerSortDown {
    background-image: url(/static/js/tablesorter/themes/blue/desc.gif);
    }
    table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
    background-color: #D6DDDD;
    }
    table.tablesorter thead tr th {
    padding-right: 1.5em;
    }
    #generic-tabs li {
    height : 30px;
    font-size : 90%;
    }
    #generic-tabs div {
    font-size : 90%;
    }
    h1, h2, h3 {
    font-weight: bold;
    color: #002a70;
    }
    ul.productList {
    list-style: none;
    padding-left: 1em;
    }
    ul.productList li {
    margin-top: 1em;
    }
    .productDetails {
    display: none;
    margin-top: 1em;
    margin-bottom: 1em;
    margin-left: 3em;
    }
    tr:nth-child(even).runningBuild {
    background-color: #d8ffd8 !important;
    }
    tr:nth-child(odd).runningBuild {
    background-color: #e8ffe8 !important;
    }
    .disabledBuild {
    background-color: #ffc0c0 !important;
    }
    .error-msg {
    color: red;
    white-space: pre-wrap;
    }
    .error {
    color: red;
    font-weight: bold;
    }
    pre {
    margin-left: 1.5em;
    margin-right: 1.5em;
    }
    pre.buildlog {
    border: 1px solid black;
    padding: 0.3em;
    white-space: pre-wrap;
    }
    pre.taillog {
    border: 3px solid darkblue;
    padding: 0.3em;
    white-space: pre-wrap;
    background: black;
    color: #ffffff;
    }
    div.buildlog {
    border: 1px solid black;
    padding: 0.3em;
    }
    .multiLineMsg {
    padding: 0em;
    margin: 0em;
    white-space: pre-wrap;
    }
    .template {
    display: none;
    }
    div.help {
    border: solid black 1px;
    padding-left: 1em;
    padding-right: 1em;
    }
    div.help pre {
    padding-left: 1.5em;
    color: #400000;
    }
    th.releaseSetJobName {
    font-size: 60%;
    padding: 0 0 0 0;
    }
    input.string {
    font-family: sans-serif;
    font-size: 100%;
    background-color: #fffff0;
    width: 20em;
    }
    input.shortString {
    width: 7em;
    }
    input.longString {
    width: 40em;
    [19.8691]
    [19.11188]
    .logTreeToggle {
    text-decoration: none;
    font-family: monospace;
    font-size: larger;
  • edit in src/root/static/css/hydra.css at line 7
    [19.11191][19.11191:11213](),[19.11213][19.1126:1143](),[19.1126][19.1126:1143](),[19.1143][19.3096:3098](),[19.3096][19.3096:3098]()
    textarea.longString {
    width: 40em;
    }
  • edit in src/root/static/css/hydra.css at line 8
    [19.3099][19.3099:3139](),[19.3139][19.3749:3751](),[19.3749][19.3749:3751](),[19.3751][19.3140:3181](),[19.3181][19.1971:2011](),[19.2011][19.3716:3717](),[19.3717][19.1344:1423](),[19.1423][19.11214:11411]()
    select {
    background-color: #fffff0;
    }
    button {
    background-color: #f0f0e0;
    }
    form.inline {
    display: inline;
    }
    .red {
    color: red;
    }
    .orange {
    color: orange;
    }
    .green {
    color: green;
    }
    .newsbar {
    background-color:#D9E3EA;
    border:1px solid #999999;
    float:right;
    font-size:x-small;
    margin:0 0 0.5em 0.5em;
    overflow:hidden;
    padding:0.5em;
    width:30em;
    }
  • replacement in src/root/topbar.tt at line 1
    [19.6671][19.6672:6753]()
    [% BLOCK makeLinkWrapped %]
    <li [% IF curUri == uri %]class="active"[% END %]>
    [19.6671]
    [19.6753]
    [% BLOCK menuItem %]
    <li class="[% IF "${root}${curUri}" == uri %]active[% END %]">
  • edit in src/root/topbar.tt at line 5
    [19.6793][19.6793:6811]()
    [% content %]
  • replacement in src/root/topbar.tt at line 13
    [19.6929][19.6929:7001]()
    <ul class="short-menu" id="top-menu">
    [% content %]
    </ul>
    [19.6929]
    [19.7001]
    <li class="dropdown">
    <a class="dropdown-toggle" href="#" data-toggle="dropdown">[% title %]<b class="caret"></b></a>
    <ul id="left-menu" class="dropdown-menu">
    [% content %]
    </ul>
  • replacement in src/root/topbar.tt at line 22
    [19.7021][19.7021:7155](),[19.7155][4.0:30]()
    [% WRAPPER makeSubMenu title="Hydra" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Root').action_for('index'))
    title = "Projects" %]
    [19.7021]
    [19.7185]
    [% BLOCK makeLinkWrapped %]
    <li [% IF curUri == uri %]class="active"[% END %]>
    <a href="[% uri %]">[% title %]</a>
    [% content %]
    </li>
    [% END %]
    [% BLOCK makeLink -%]
    [% INCLUDE makeLinkWrapped content="" -%]
    [% END %]
    <ul class="nav" id="top-menu">
  • replacement in src/root/topbar.tt at line 37
    [19.7277][19.197:269]()
    title = "Queue" %] ([% nrRunningBuilds %]/[% nrQueuedBuilds %])
    [19.7277]
    [19.7304]
    title = "Queue ("_ nrRunningBuilds _"/"_ nrQueuedBuilds _")" %]
  • edit in src/root/topbar.tt at line 40
    [19.7394]
    [19.7394]
    title = "All builds" %]
    [% IF project || admin %]
    [% IF project %]
    [% WRAPPER makeSubMenu title=("Project: " _ project.name) collapsed=(jobset || job) %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('view'), [project.name]) title = "Overview" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('releases'), [project.name]) title = "Releases" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('all'), [project.name]) title = "All builds" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('jobstatus'), [project.name]) title = "Job status" %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('errors'), [project.name]) title = "Errors" %]
    [% IF c.check_user_roles('admin') %]
    <li class="divider"></li>
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('create_jobset'), [project.name]) title = "Create new jobset" %]
    [% INCLUDE menuItem uri = c.uri_for('/project' project.name 'edit') title="Edit project" %]
    [% END %]
    [% END %]
    [% END %]
    [% IF jobset %]
    [% WRAPPER makeSubMenu title=("Jobset: " _ jobset.name) collapsed=job %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('index'), [project.name, jobset.name])
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('evals'), [project.name, jobset.name])
    title = "Evaluations" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('all'), [project.name, jobset.name])
    title = "All builds" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('jobstatus'), [project.name, jobset.name])
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Jobset').action_for('errors'), [project.name, jobset.name])
    title = "Errors" %]
    [% IF c.check_user_roles('admin') %]
    <li class="divider"></li>
    [% INCLUDE menuItem uri = c.uri_for('/jobset' project.name jobset.name 'edit') title="Edit jobset" %]
    [% INCLUDE menuItem uri = c.uri_for('/jobset' project.name jobset.name 'clone') title="Clone jobset" %]
    [% END %]
    [% END %]
    [% END %]
    [% IF job %]
    [% WRAPPER makeSubMenu title=("Job: " _ job.name) %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('overview'), [project.name, jobset.name, job.name])
    title = "Overview" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('all'), [project.name, jobset.name, job.name])
  • edit in src/root/topbar.tt at line 94
    [19.7426]
    [19.7675]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('jobstatus'), [project.name, jobset.name, job.name])
    title = "Job status" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Job').action_for('errors'), [project.name, jobset.name, job.name])
    title = "Errors" %]
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('users')) content = "Manage users" %]</li>
    <li>[% INCLUDE maybeLink uri = c.uri_for(c.controller('Admin').action_for('news')) content = "Manage news" %]</li>
    [% END %]
    [% END %]
    [% END %]
    [% IF c.user_exists %]
    [% IF c.check_user_roles('admin') %]
    [% WRAPPER makeSubMenu title="Admin" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('index'))
    title = "Machine status" %]
    <li class="divider"></li>
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('machines'))
    title = "Manage machines" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('managenews'))
    title = "Manage news" %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('users'))
    title = "Manage users" %]
    <li class="divider"></li>
    [% INCLUDE maybeLink
    uri = c.uri_for(c.controller('Admin').action_for('clearfailedcache'))
    content = "Clear failed builds cache"
    confirmmsg = "Are you sure you want to clear the failed builds cache?" %]
    [% INCLUDE maybeLink
    uri = c.uri_for(c.controller('Admin').action_for('clear_queue_non_current'))
    content = "Clear all non-running old builds from queue."
    confirmmsg = "Are you sure you want to clear the queue?"
    %]
    <li class="divider"></li>
    [% IF c.check_user_roles('admin') %]
    [% INCLUDE menuItem uri = c.uri_for(c.controller('Project').action_for('create')) title = "Create new project" %]
    [% END %]
    [% END %]
    [% END %]
    [% END %]
  • edit in src/root/topbar.tt at line 145
    [19.7704][19.11412:11489](),[19.11489][19.557:630](),[19.630][19.11562:11613](),[19.11562][19.11562:11613]()
    [% IF c.check_user_roles('admin') %]
    [% INCLUDE makeLink
    uri = c.uri_for(c.controller('Admin').action_for('index'))
    title = "Admin" %]
    [% END %]
  • edit in src/root/topbar.tt at line 153
    [19.7993][19.7993:8006]()
    [% END %]
  • edit in src/root/topbar.tt at line 154
    [19.8007]
    </ul>
  • replacement in src/root/users.tt at line 6
    [19.6830][19.6830:6838]()
    <table>
    [19.6830]
    [19.6838]
    <table class="table table-striped table-condensed">
  • replacement in src/root/view.tt at line 14
    [19.8595][19.8595:8623]()
    <table class="tablesorter">
    [19.8595]
    [19.8623]
    <table class="tablesorter table table-condensed table-striped">
  • edit in src/root/view.tt at line 67
    [19.3147]
    [156.131]
    <ul class="pager">
    <li class="previous"><a href="[% "$baseUri?page="; (page - 1) %]">Prev</a></li>
    <li class="next"><a href="[% "$baseUri?page="; (page + 1) %]">Next</a></li>
    </ul>
    <!--
  • edit in src/root/view.tt at line 83
    [156.141]
    [19.10051]
    -->