damagecontrol 0.5.0 → 0.5.0.1391

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. data/README +67 -11
  2. data/Rakefile +15 -6
  3. data/app/controllers/admin_controller.rb +0 -3
  4. data/app/controllers/application.rb +42 -163
  5. data/app/controllers/build_controller.rb +33 -0
  6. data/app/controllers/files_controller.rb +1 -1
  7. data/app/controllers/project_controller.rb +23 -65
  8. data/app/controllers/rails_ext.rb +247 -0
  9. data/app/controllers/rscm_ext.rb +52 -0
  10. data/app/helpers/build_helper.rb +2 -0
  11. data/app/views/build/email.rhtml +18 -0
  12. data/app/views/build/status.rhtml +20 -0
  13. data/app/views/build/tests.rhtml +2 -0
  14. data/app/views/layouts/{rscm.rhtml → default.rhtml} +10 -4
  15. data/app/views/project/_changesets_list.rhtml +2 -2
  16. data/app/views/project/_cvs.rhtml +4 -5
  17. data/app/views/project/_project.rhtml +9 -9
  18. data/app/views/project/_select_pane.rhtml +26 -0
  19. data/app/views/project/_tab_pane.rhtml +23 -0
  20. data/app/views/project/changeset.rhtml +35 -0
  21. data/app/views/project/view.rhtml +18 -32
  22. data/app/views/setup/welcome.rhtml +118 -0
  23. data/config/database.yml +20 -20
  24. data/config/environment.rb +66 -60
  25. data/config/environments/development.rb +3 -2
  26. data/config/environments/production.rb +3 -2
  27. data/config/environments/test.rb +3 -2
  28. data/config/routes.rb +15 -0
  29. data/lib/damagecontrol/app.rb +11 -40
  30. data/lib/damagecontrol/build.rb +50 -8
  31. data/lib/damagecontrol/directories.rb +7 -6
  32. data/lib/damagecontrol/poller.rb +11 -20
  33. data/lib/damagecontrol/project.rb +83 -16
  34. data/lib/damagecontrol/publisher/ambient_orb.rb +16 -0
  35. data/lib/damagecontrol/publisher/archive.rb +16 -0
  36. data/lib/damagecontrol/publisher/base.rb +25 -0
  37. data/lib/damagecontrol/publisher/build_duration.rb +16 -0
  38. data/lib/damagecontrol/publisher/email.rb +59 -0
  39. data/lib/damagecontrol/publisher/execute.rb +49 -0
  40. data/lib/damagecontrol/publisher/ftp.rb +16 -0
  41. data/lib/damagecontrol/publisher/growl.rb +44 -0
  42. data/lib/damagecontrol/publisher/irc.rb +31 -0
  43. data/lib/damagecontrol/publisher/jabber.rb +68 -0
  44. data/lib/damagecontrol/publisher/scp.rb +16 -0
  45. data/lib/damagecontrol/publisher/x10cm11a.rb +17 -0
  46. data/lib/damagecontrol/publisher/x10cm17a.rb +17 -0
  47. data/lib/damagecontrol/publisher/yahoo.rb +16 -0
  48. data/lib/damagecontrol/standard_persister.rb +2 -2
  49. data/lib/damagecontrol/tracker.rb +48 -6
  50. data/lib/damagecontrol/visitor/rss_writer.rb +1 -1
  51. data/lib/damagecontrol/visitor/yaml_persister.rb +10 -1
  52. data/public/404.html +5 -5
  53. data/public/500.html +5 -5
  54. data/public/dispatch.cgi +2 -2
  55. data/public/dispatch.fcgi +1 -1
  56. data/public/dispatch.rb +2 -2
  57. data/public/images/growlicon.png +0 -0
  58. data/public/images/megaphone.png +0 -0
  59. data/public/images/monotone-logo.png +0 -0
  60. data/public/images/publisher/ambient_orb.png +0 -0
  61. data/public/images/publisher/build_duration.png +0 -0
  62. data/public/images/publisher/email.png +0 -0
  63. data/public/images/publisher/execute.png +0 -0
  64. data/public/images/publisher/growl.png +0 -0
  65. data/public/images/publisher/irc.png +0 -0
  66. data/public/images/publisher/jabber.png +0 -0
  67. data/public/images/publisher/x10cm11a.png +0 -0
  68. data/public/images/publisher/x10cm17a.png +0 -0
  69. data/public/images/publisher/yahoo.png +0 -0
  70. data/public/index.html +70 -1
  71. data/public/javascripts/dateFormat.js +283 -0
  72. data/public/javascripts/jscalendar/ChangeLog +500 -0
  73. data/public/javascripts/jscalendar/README +33 -0
  74. data/public/javascripts/jscalendar/bugtest-hidden-selects.html +108 -0
  75. data/public/javascripts/jscalendar/calendar-blue.css +231 -0
  76. data/public/javascripts/jscalendar/calendar-blue2.css +235 -0
  77. data/public/javascripts/jscalendar/calendar-brown.css +224 -0
  78. data/public/javascripts/jscalendar/calendar-green.css +228 -0
  79. data/public/javascripts/jscalendar/calendar-setup.js +181 -0
  80. data/public/javascripts/jscalendar/calendar-setup_stripped.js +21 -0
  81. data/public/javascripts/jscalendar/calendar-system.css +250 -0
  82. data/public/javascripts/jscalendar/calendar-tas.css +238 -0
  83. data/public/javascripts/jscalendar/calendar-win2k-1.css +270 -0
  84. data/public/javascripts/jscalendar/calendar-win2k-2.css +270 -0
  85. data/public/javascripts/jscalendar/calendar-win2k-cold-1.css +264 -0
  86. data/public/javascripts/jscalendar/calendar-win2k-cold-2.css +270 -0
  87. data/public/javascripts/jscalendar/calendar.js +1715 -0
  88. data/public/javascripts/jscalendar/calendar.php +119 -0
  89. data/public/javascripts/jscalendar/calendar_stripped.js +12 -0
  90. data/public/javascripts/jscalendar/doc/html/reference-Z-S.css +0 -0
  91. data/public/javascripts/jscalendar/doc/html/reference.css +34 -0
  92. data/public/javascripts/jscalendar/doc/html/reference.html +1316 -0
  93. data/public/javascripts/jscalendar/doc/reference.pdf +0 -0
  94. data/public/javascripts/jscalendar/img.gif +0 -0
  95. data/public/javascripts/jscalendar/index.html +333 -0
  96. data/public/javascripts/jscalendar/lang/calendar-af.js +39 -0
  97. data/public/javascripts/jscalendar/lang/calendar-br.js +45 -0
  98. data/public/javascripts/jscalendar/lang/calendar-ca.js +45 -0
  99. data/public/javascripts/jscalendar/lang/calendar-cs-win.js +34 -0
  100. data/public/javascripts/jscalendar/lang/calendar-da.js +63 -0
  101. data/public/javascripts/jscalendar/lang/calendar-de.js +100 -0
  102. data/public/javascripts/jscalendar/lang/calendar-du.js +45 -0
  103. data/public/javascripts/jscalendar/lang/calendar-el.js +89 -0
  104. data/public/javascripts/jscalendar/lang/calendar-en.js +123 -0
  105. data/public/javascripts/jscalendar/lang/calendar-es.js +114 -0
  106. data/public/javascripts/jscalendar/lang/calendar-fi.js +98 -0
  107. data/public/javascripts/jscalendar/lang/calendar-fr.js +86 -0
  108. data/public/javascripts/jscalendar/lang/calendar-hr-utf8.js +49 -0
  109. data/public/javascripts/jscalendar/lang/calendar-hr.js +0 -0
  110. data/public/javascripts/jscalendar/lang/calendar-hu.js +45 -0
  111. data/public/javascripts/jscalendar/lang/calendar-it.js +79 -0
  112. data/public/javascripts/jscalendar/lang/calendar-jp.js +45 -0
  113. data/public/javascripts/jscalendar/lang/calendar-ko-utf8.js +120 -0
  114. data/public/javascripts/jscalendar/lang/calendar-ko.js +120 -0
  115. data/public/javascripts/jscalendar/lang/calendar-lt-utf8.js +114 -0
  116. data/public/javascripts/jscalendar/lang/calendar-lt.js +114 -0
  117. data/public/javascripts/jscalendar/lang/calendar-nl.js +45 -0
  118. data/public/javascripts/jscalendar/lang/calendar-no.js +45 -0
  119. data/public/javascripts/jscalendar/lang/calendar-pl-utf8.js +93 -0
  120. data/public/javascripts/jscalendar/lang/calendar-pl.js +56 -0
  121. data/public/javascripts/jscalendar/lang/calendar-pt.js +45 -0
  122. data/public/javascripts/jscalendar/lang/calendar-ro.js +66 -0
  123. data/public/javascripts/jscalendar/lang/calendar-ru.js +45 -0
  124. data/public/javascripts/jscalendar/lang/calendar-si.js +94 -0
  125. data/public/javascripts/jscalendar/lang/calendar-sk.js +99 -0
  126. data/public/javascripts/jscalendar/lang/calendar-sp.js +63 -0
  127. data/public/javascripts/jscalendar/lang/calendar-sv.js +93 -0
  128. data/public/javascripts/jscalendar/lang/calendar-tr.js +58 -0
  129. data/public/javascripts/jscalendar/lang/calendar-zh.js +45 -0
  130. data/public/javascripts/jscalendar/menuarrow.gif +0 -0
  131. data/public/javascripts/jscalendar/menuarrow2.gif +0 -0
  132. data/public/javascripts/jscalendar/release-notes.html +334 -0
  133. data/public/javascripts/jscalendar/simple-1.html +244 -0
  134. data/public/javascripts/jscalendar/simple-2.html +108 -0
  135. data/public/javascripts/jscalendar/simple-3.html +130 -0
  136. data/public/javascripts/jscalendar/test-position.html +40 -0
  137. data/public/javascripts/jscalendar/test.php +116 -0
  138. data/public/javascripts/toggle_div.js +18 -0
  139. data/public/stylesheets/niceones.txt +1 -0
  140. data/public/stylesheets/style.css +8 -1
  141. data/script/breakpointer +4 -5
  142. data/script/console +19 -27
  143. data/script/console_sandbox.rb +7 -0
  144. data/script/destroy +5 -0
  145. data/script/generate +3 -68
  146. data/script/server +6 -16
  147. data/test/damagecontrol/build_test.rb +8 -8
  148. data/test/damagecontrol/poller_test.rb +10 -18
  149. data/test/damagecontrol/project_test.rb +49 -13
  150. data/test/damagecontrol/publisher/base_test.rb +26 -0
  151. data/test/damagecontrol/publisher/build/email.rhtml +0 -0
  152. data/test/damagecontrol/publisher/email_test.rb +26 -0
  153. data/test/damagecontrol/publisher/fixture.rb +34 -0
  154. data/test/damagecontrol/publisher/growl_test.rb +15 -0
  155. data/test/damagecontrol/publisher/jabber_test.rb +15 -0
  156. data/test/damagecontrol/scm_web_test.rb +1 -1
  157. data/test/damagecontrol/visitor/changesets.rss +1 -1
  158. data/test/damagecontrol/visitor/diff_persister_test.rb +4 -4
  159. data/test/functional/build_controller_test.rb +17 -0
  160. data/test/test_helper.rb +13 -13
  161. metadata +185 -24
  162. data/app/views/project/_bugzilla.rhtml +0 -13
  163. data/app/views/project/_jira.rhtml +0 -19
  164. data/app/views/project/_mooky.rhtml +0 -23
  165. data/app/views/project/_rubyforge.rhtml +0 -19
  166. data/app/views/project/_scarab.rhtml +0 -19
  167. data/app/views/project/_scms.rhtml +0 -15
  168. data/app/views/project/_sourceforge.rhtml +0 -19
  169. data/app/views/project/_starteam.rhtml +0 -43
  170. data/app/views/project/_svn.rhtml +0 -22
  171. data/app/views/project/_trac.rhtml +0 -13
  172. data/app/views/project/_trackers.rhtml +0 -18
  173. data/app/views/project/changesets.rhtml +0 -31
@@ -1,13 +0,0 @@
1
- <script>
2
- var bugzilla_url_tip = "<div class='tp1'>The URL of the Bugzilla installation.</div>";
3
- </script>
4
-
5
- <table width="100%">
6
- <tr>
7
- <td width="25%" class="setting-name">Bugzilla URL</td>
8
- <td><%= tip(:txt => 'bugzilla_url_tip') %></td>
9
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::Bugzilla[url]", :value => bugzilla.url) %></td>
10
- </tr>
11
- </table>
12
-
13
- <img src="/images/bugzilla.png"/>
@@ -1,19 +0,0 @@
1
- <script>
2
- var jira_baseurl_tip = "<div class='tp1'>The base URL of the JIRA installation (not the URL to the specific JIRA project).</div>";
3
- var jira_project_id_tip = "<div class='tp1'>The id of the JIRA project.</div>";
4
- </script>
5
-
6
- <table width="100%">
7
- <tr>
8
- <td width="25%" class="setting-name">Base URL</td>
9
- <td><%= tip(:txt => 'jira_baseurl_tip') %></td>
10
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::JIRA[baseurl]", :value => jira.baseurl) %></td>
11
- </tr>
12
- <tr>
13
- <td class="setting-name">Project id</td>
14
- <td><%= tip(:txt => 'jira_project_id_tip') %></td>
15
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::JIRA[project_id]", :value => jira.project_id) %></td>
16
- </tr>
17
- </table>
18
-
19
- <img src="/images/jira.gif"/>
@@ -1,23 +0,0 @@
1
- <script>
2
- function mooky_init() {
3
- alert("Mooky! You'll find me under the 'Source Control' tab.")
4
- }
5
-
6
- var mooky_foo_tip = "<div class='tp1'>The bar value.</div>";
7
- var mooky_bar_tip = "<div class='tp1'>The foo value.</div>";
8
-
9
- </script>
10
-
11
- <img src="images/mooky.png"/>
12
- <table width="100%">
13
- <tr>
14
- <td width="25%" class="setting-name">Foo</td>
15
- <td><%= tip(:txt => 'mooky_foo_tip') %></td>
16
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::Mooky[foo]", :value => mooky.foo) %></td>
17
- </tr>
18
- <tr>
19
- <td class="setting-name">Bar</td>
20
- <td><%= tip(:txt => 'mooky_bar_tip') %></td>
21
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::Mooky[bar]", :value => mooky.bar) %></td>
22
- </tr>
23
- </table>
@@ -1,19 +0,0 @@
1
- <script>
2
- var rubyforge_group_id_tip = "<div class='tp1'>The ID of the project (group_id). Example: <br><tt>http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1120&amp;group_id=<strong>426</strong>&amp;atid=1698</tt>.</div>";
3
- var rubyforge_tracker_id_tip = "<div class='tp1'>The ID of the tracker (aid). Example: <br><tt>http://rubyforge.org/tracker/index.php?func=detail&amp;aid=<strong>1120</strong>&amp;group_id=426&amp;atid=1698</tt>.</div>";
4
- </script>
5
-
6
- <table width="100%">
7
- <tr>
8
- <td width="25%" class="setting-name">Project ID</td>
9
- <td><%= tip(:txt => 'rubyforge_group_id_tip') %></td>
10
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::RubyForge[group_id]", :value => rubyforge.group_id) %></td>
11
- </tr>
12
- <tr>
13
- <td class="setting-name">Tracker ID</td>
14
- <td><%= tip(:txt => 'rubyforge_tracker_id_tip') %></td>
15
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::RubyForge[tracker_id]", :value => rubyforge.tracker_id) %></td>
16
- </tr>
17
- </table>
18
-
19
- <img src="/images/rubyforge.png"/>
@@ -1,19 +0,0 @@
1
- <script>
2
- var scarab_baseurl_tip = "<div class='tp1'>The URL of the Scarab installation.</div>";
3
- var scarab_module_key_tip = "<div class='tp1'>The Scarab module key.</div>";
4
- </script>
5
-
6
- <table width="100%">
7
- <tr>
8
- <td width="25%" class="setting-name">Scarab Base URL</td>
9
- <td><%= tip(:txt => 'scarab_baseurl_tip') %></td>
10
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::Scarab[baseurl]", :value => scarab.baseurl) %></td>
11
- </tr>
12
- <tr>
13
- <td class="setting-name">Scarab Module</td>
14
- <td><%= tip(:txt => 'scarab_module_key_tip') %></td>
15
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::Scarab[module_key]", :value => scarab.module_key) %></td>
16
- </tr>
17
- </table>
18
-
19
- <img align="center" src="/images/scarab.gif"/>
@@ -1,15 +0,0 @@
1
- <table width="100%">
2
- <tr>
3
- <td width="25%">Source Control</td>
4
- <td class="config_cell"><%= tip(:txt => "scm_tip") %></td>
5
- <td width="75%">
6
- <%= text_or_select(@edit, :name => "scm", :values => scms, :onchange => "showElement(this.value, scms)") %>
7
- </td>
8
- </tr>
9
- </table>
10
-
11
- <% scms.each do |scm| %>
12
- <div id="<%= scm.class.name %>" style="<% if(scm.selected?)%>display:block<%else%>display:none<%end%>">
13
- <%= render_partial(scm.short, scm) %>
14
- </div>
15
- <% end %>
@@ -1,19 +0,0 @@
1
- <script>
2
- var sourceforge_group_id_tip = "<div class='tp1'>The ID of the project (group_id). Example: <br><tt>http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1051927&amp;group_id=<strong>7856</strong>&amp;atid=107856</tt>.</div>";
3
- var sourceforge_tracker_id_tip = "<div class='tp1'>The ID of the tracker (aid). Example: <br><tt>http://sourceforge.net/tracker/index.php?func=detail&amp;aid=<strong>1051927</strong>&amp;group_id=7856&amp;atid=107856</tt>.</div>";
4
- </script>
5
-
6
- <table width="100%">
7
- <tr>
8
- <td width="25%" class="setting-name">Project ID</td>
9
- <td><%= tip(:txt => 'sourceforge_group_id_tip') %></td>
10
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::SourceForge[group_id]", :value => sourceforge.group_id) %></td>
11
- </tr>
12
- <tr>
13
- <td class="setting-name">Tracker ID</td>
14
- <td><%= tip(:txt => 'sourceforge_tracker_id_tip') %></td>
15
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::SourceForge[tracker_id]", :value => sourceforge.tracker_id) %></td>
16
- </tr>
17
- </table>
18
-
19
- <img src="/images/sourceforge.gif"/>
@@ -1,43 +0,0 @@
1
- <script>
2
- function starteam_init() {}
3
- </script>
4
-
5
- <table width="100%">
6
- <tr>
7
- <td width="25%" class="config_cell">User name</td>
8
- <td>&nbsp;</td>
9
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[user_name]", :value => starteam.user_name) %></td>
10
- </tr>
11
- <tr>
12
- <td class="config_cell">Password</td>
13
- <td><%= tip(:txt => 'scm_password_tip') %></td>
14
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[password]", :value => starteam.password) %></td>
15
- </tr>
16
- <tr>
17
- <td class="config_cell">Server name</td>
18
- <td>&nbsp;</td>
19
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[server_name]", :value => starteam.server_name) %></td>
20
- </tr>
21
- <tr>
22
- <td class="config_cell">Server port</td>
23
- <td>&nbsp;</td>
24
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[server_port]", :value => starteam.server_port) %></td>
25
- </tr>
26
- <tr>
27
- <td class="config_cell">Project name</td>
28
- <td>&nbsp;</td>
29
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[project_name]", :value => starteam.project_name) %></td>
30
- </tr>
31
- <tr>
32
- <td class="config_cell">View name</td>
33
- <td>&nbsp;</td>
34
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[view_name]", :value => starteam.view_name) %></td>
35
- </tr>
36
- <tr>
37
- <td class="config_cell">Folder name</td>
38
- <td>&nbsp;</td>
39
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::StarTeam[folder_name]", :value => starteam.folder_name) %></td>
40
- </tr>
41
- </table>
42
-
43
- <img src="/images/starteam.png"/>
@@ -1,22 +0,0 @@
1
- <script>
2
- function svn_init() {}
3
-
4
- var svn_url_tip = "<div class='tp1'>If you specify a local URL (starting with file://) DamageControl can create the repository for you after you save (unless the repository already exists).<br>Using a file:// URL will also give you the option to have DamageControl install a trigger in Subversion, so that you don't have to use polling to detect changes.<br>On Windows, file URLs must look like file:///C:/jupiter/mars</div>";
5
- var svn_path_tip = "<div class='tp1'>This is the relative path from the start of the repository <br>to the end of the URL. For example, if your URL is <br>svn://your.server/path/to/repository/path/within/repository <br>then this value should be path/within/repository.</div>";
6
-
7
- </script>
8
-
9
- <table width="100%">
10
- <tr>
11
- <td width="25%" class="config_cell">Url</td>
12
- <td><%= tip(:txt => 'svn_url_tip') %></td>
13
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::SVN[url]", :value => svn.url) %></td>
14
- </tr>
15
- <tr>
16
- <td width="25%" class="config_cell">Directory</td>
17
- <td><%= tip(:txt => 'svn_path_tip') %></td>
18
- <td width="75%"><%= text_or_input(@edit, :name => "RSCM::SVN[path]", :value => svn.path) %></td>
19
- </tr>
20
- </table>
21
-
22
- <img src="/images/svnlogo64.png"/>
@@ -1,13 +0,0 @@
1
- <script>
2
- var trac_url_tip = "<div class='tp1'>The URL of the Trac installation. This URL should include no trailing slash. Example: http://my.trac.home/cgi-bin/trac.cgi</div>";
3
- </script>
4
-
5
- <table width="100%">
6
- <tr>
7
- <td width="25%" class="setting-name">Trac URL</td>
8
- <td><%= tip(:txt => 'trac_url_tip') %></td>
9
- <td width="75%"><%= text_or_input(@edit, :name => "DamageControl::Tracker::Trac[url]", :value => trac.url) %></td>
10
- </tr>
11
- </table>
12
-
13
- <img src="/images/trac.png"/>
@@ -1,18 +0,0 @@
1
- By specifying an issue tracker issue numbers/ids in developers' SCM commit messages
2
- will be detected and highlighted with external links to the particular issue.
3
- This way people browsing changesets can easily navigate to related issues.
4
- <table width="100%">
5
- <tr>
6
- <td width="25%">Issue tracker</td>
7
- <td class="config_cell"><%= tip(:txt => "scm_tip") %></td>
8
- <td width="75%">
9
- <%= text_or_select(@edit, :name => "tracker", :values => @trackers, :onchange => "showElement(this.value, trackers)") %>
10
- </td>
11
- </tr>
12
- </table>
13
-
14
- <% @trackers.each do |tracker| %>
15
- <div id="<%= tracker.class.name %>" style="<% if(tracker.selected?)%>display:block<%else%>display:none<%end%>">
16
- <%= render_partial(tracker.short, tracker) %>
17
- </div>
18
- <% end %>
@@ -1,31 +0,0 @@
1
- <%
2
- @changesets.each do |changeset|
3
- %>
4
- <table class="pane">
5
- <tr class="pane">
6
- <td colspan="3" class="changeset">
7
- <div class="changeset-message">
8
- <b><%= changeset.developer %></b>
9
- (<%= changeset.time.to_human %> UTC)<br>
10
- <%= @project.tracker.highlight(changeset.message) %>
11
- </div>
12
- </td>
13
- </tr>
14
- <%
15
- changeset.each do |change|
16
- %>
17
- <tr>
18
- <td width="5%"><%= tag("img", :src => change.icon) %></td>
19
- <td width="5%"><%= change.revision %></td>
20
- <td width="90%">
21
- <a class="diff-toggle" href="#" onclick="toggleCode('<%= change.path %>');return false"><%= change.path %></a>
22
- <br>
23
- <div class="diff" id="<%= change.path %>">
24
- <%= change.html_diff %>
25
- </div>
26
- </td>
27
- </tr>
28
- <% end %>
29
- </table>
30
- <% end %>
31
-