damagecontrol 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +75 -0
- data/README.license +5 -0
- data/Rakefile +111 -0
- data/app/controllers/admin_controller.rb +10 -0
- data/app/controllers/application.rb +163 -0
- data/app/controllers/files_controller.rb +19 -0
- data/app/controllers/project_controller.rb +284 -0
- data/app/controllers/scm_controller.rb +49 -0
- data/app/helpers/admin_helper.rb +2 -0
- data/app/helpers/application_helper.rb +3 -0
- data/app/helpers/project_helper.rb +2 -0
- data/app/views/dhtml_sites.txt +6 -0
- data/app/views/files/list.rhtml +4 -0
- data/app/views/layouts/rscm.rhtml +79 -0
- data/app/views/project/_bugzilla.rhtml +13 -0
- data/app/views/project/_changesets_list.rhtml +52 -0
- data/app/views/project/_cvs.rhtml +171 -0
- data/app/views/project/_jira.rhtml +19 -0
- data/app/views/project/_mooky.rhtml +23 -0
- data/app/views/project/_null.rhtml +0 -0
- data/app/views/project/_project.rhtml +36 -0
- data/app/views/project/_rubyforge.rhtml +19 -0
- data/app/views/project/_scarab.rhtml +19 -0
- data/app/views/project/_scms.rhtml +15 -0
- data/app/views/project/_sourceforge.rhtml +19 -0
- data/app/views/project/_starteam.rhtml +43 -0
- data/app/views/project/_svn.rhtml +22 -0
- data/app/views/project/_trac.rhtml +13 -0
- data/app/views/project/_trackers.rhtml +18 -0
- data/app/views/project/changesets.rhtml +31 -0
- data/app/views/project/index.rhtml +23 -0
- data/app/views/project/view.rhtml +70 -0
- data/app/views/scm/checkout_status.rhtml +44 -0
- data/app/views/scm/diff.rhtml +1 -0
- data/app/views/scm/scroll.html +27 -0
- data/bin/damagecontrol +7 -0
- data/bin/damagecontrol-webrick +2 -0
- data/config/database.yml +20 -0
- data/config/environment.rb +60 -0
- data/config/environments/development.rb +3 -0
- data/config/environments/production.rb +2 -0
- data/config/environments/test.rb +3 -0
- data/lib/damagecontrol/app.rb +74 -0
- data/lib/damagecontrol/build.rb +104 -0
- data/lib/damagecontrol/diff_htmlizer.rb +82 -0
- data/lib/damagecontrol/diff_parser.rb +153 -0
- data/lib/damagecontrol/directories.rb +126 -0
- data/lib/damagecontrol/poller.rb +72 -0
- data/lib/damagecontrol/project.rb +213 -0
- data/lib/damagecontrol/project_dependencies.rb +8 -0
- data/lib/damagecontrol/scm_web.rb +50 -0
- data/lib/damagecontrol/standard_persister.rb +49 -0
- data/lib/damagecontrol/tracker.rb +164 -0
- data/lib/damagecontrol/visitor/build_executor.rb +32 -0
- data/lib/damagecontrol/visitor/diff_persister.rb +41 -0
- data/lib/damagecontrol/visitor/rss_writer.rb +43 -0
- data/lib/damagecontrol/visitor/yaml_persister.rb +71 -0
- data/public/404.html +6 -0
- data/public/500.html +6 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +7 -0
- data/public/dispatch.rb +10 -0
- data/public/images/16x16/about.png +0 -0
- data/public/images/16x16/bug_green.png +0 -0
- data/public/images/16x16/bug_red.png +0 -0
- data/public/images/16x16/bug_yellow.png +0 -0
- data/public/images/16x16/component.png +0 -0
- data/public/images/16x16/console.png +0 -0
- data/public/images/16x16/console_error.png +0 -0
- data/public/images/16x16/document_add.png +0 -0
- data/public/images/16x16/document_delete.png +0 -0
- data/public/images/16x16/document_edit.png +0 -0
- data/public/images/16x16/document_exchange.png +0 -0
- data/public/images/16x16/document_new.png +0 -0
- data/public/images/16x16/document_warning.png +0 -0
- data/public/images/16x16/safe.png +0 -0
- data/public/images/16x16/scroll_information.png +0 -0
- data/public/images/16x16/wrench.png +0 -0
- data/public/images/24x24/box_delete.png +0 -0
- data/public/images/24x24/box_into.png +0 -0
- data/public/images/24x24/box_new.png +0 -0
- data/public/images/24x24/console_network.png +0 -0
- data/public/images/24x24/document_edit.png +0 -0
- data/public/images/24x24/find.png +0 -0
- data/public/images/24x24/folders.png +0 -0
- data/public/images/24x24/garbage.png +0 -0
- data/public/images/24x24/gear_connection.png +0 -0
- data/public/images/24x24/gear_delete.png +0 -0
- data/public/images/24x24/gears_run.png +0 -0
- data/public/images/24x24/home.png +0 -0
- data/public/images/24x24/navigate_left.png +0 -0
- data/public/images/24x24/navigate_right.png +0 -0
- data/public/images/24x24/package_new.png +0 -0
- data/public/images/24x24/safe.png +0 -0
- data/public/images/24x24/safe_new.png +0 -0
- data/public/images/24x24/safe_out.png +0 -0
- data/public/images/24x24/scroll_information.png +0 -0
- data/public/images/24x24/stop.png +0 -0
- data/public/images/24x24/wrench.png +0 -0
- data/public/images/README.license +2 -0
- data/public/images/blue-16.gif +0 -0
- data/public/images/blue-32.gif +0 -0
- data/public/images/bugzilla.png +0 -0
- data/public/images/cvs.png +0 -0
- data/public/images/footer.gif +0 -0
- data/public/images/green-128.gif +0 -0
- data/public/images/green-16.gif +0 -0
- data/public/images/green-32.gif +0 -0
- data/public/images/grey-16.gif +0 -0
- data/public/images/grey-32.gif +0 -0
- data/public/images/jira.gif +0 -0
- data/public/images/red-16.gif +0 -0
- data/public/images/red-32.gif +0 -0
- data/public/images/red-pulse-32.gif +0 -0
- data/public/images/rss.gif +0 -0
- data/public/images/rubyforge.png +0 -0
- data/public/images/scarab.gif +0 -0
- data/public/images/sourceforge.gif +0 -0
- data/public/images/starteam.png +0 -0
- data/public/images/svnlogo64.png +0 -0
- data/public/images/trac.png +0 -0
- data/public/index.html +1 -0
- data/public/javascripts/dw_event.js +34 -0
- data/public/javascripts/dw_tooltip.js +86 -0
- data/public/javascripts/dw_viewport.js +55 -0
- data/public/javascripts/pngfix.js +29 -0
- data/public/javascripts/toggle_diff.js +25 -0
- data/public/licenses/DAMAGECONTROL.license +28 -0
- data/public/licenses/INCORS.license +32 -0
- data/public/stylesheets/diff.css +23 -0
- data/public/stylesheets/style.css +307 -0
- data/script/breakpointer +5 -0
- data/script/console +30 -0
- data/script/generate +70 -0
- data/script/server +61 -0
- data/test/damagecontrol/a_program.rb +3 -0
- data/test/damagecontrol/a_slow_program.rb +3 -0
- data/test/damagecontrol/build_test.rb +59 -0
- data/test/damagecontrol/diff_htmlizer_test.rb +31 -0
- data/test/damagecontrol/diff_parser_test.rb +61 -0
- data/test/damagecontrol/file_ext.rb +12 -0
- data/test/damagecontrol/poller_test.rb +56 -0
- data/test/damagecontrol/project_test.rb +144 -0
- data/test/damagecontrol/scm_web_test.rb +22 -0
- data/test/damagecontrol/test.diff +38 -0
- data/test/damagecontrol/test.html +40 -0
- data/test/damagecontrol/tracker_test.rb +48 -0
- data/test/damagecontrol/visitor/changesets.rss +34 -0
- data/test/damagecontrol/visitor/diff_persister_test.rb +49 -0
- data/test/damagecontrol/visitor/rss_writer_test.rb +40 -0
- data/test/damagecontrol/visitor/yaml_persister_test.rb +40 -0
- data/test/functional/admin_controller_test.rb +17 -0
- data/test/functional/project_controller_test.rb +17 -0
- data/test/test_helper.rb +14 -0
- metadata +245 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'rscm/directories'
|
|
2
|
+
|
|
3
|
+
class ScmController < ApplicationController
|
|
4
|
+
|
|
5
|
+
# Checks out a working copy into the project's checkout dir.
|
|
6
|
+
def checkout
|
|
7
|
+
load_project
|
|
8
|
+
|
|
9
|
+
# Do this asynch to give a fast response
|
|
10
|
+
# TODO: guard against multiple concurrent checkouts
|
|
11
|
+
# TODO: put the thread on the daemon side instead
|
|
12
|
+
Thread.new do
|
|
13
|
+
@project.checkout
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Doing a redirect since this *should* be called via HTTP POST. TODO: verify METHOD
|
|
17
|
+
redirect_to :action => "checkout_status", :id => @project.name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Shows the status page with the JS magic that
|
|
21
|
+
# will pull the checkout_list
|
|
22
|
+
def checkout_status
|
|
23
|
+
@checkout_list_path = "/scm/checkout_list/#{@params['id']}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Sends the file containing the files currently being checked out.to the client
|
|
27
|
+
def checkout_list
|
|
28
|
+
load_project
|
|
29
|
+
if(File.exist?(@project.checkout_list_file))
|
|
30
|
+
send_file(@project.checkout_list_file)
|
|
31
|
+
else
|
|
32
|
+
render_text("No files checked out yet")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Creates the SCM repo
|
|
37
|
+
def create
|
|
38
|
+
load_project
|
|
39
|
+
@project.scm.create
|
|
40
|
+
redirect_to :controller => "project", :action => "view", :id => @project.name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def delete_working_copy
|
|
44
|
+
load_project
|
|
45
|
+
@project.delete_working_copy
|
|
46
|
+
redirect_to :controller => "project", :action => "view", :id => @project.name
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title>RSCM</title>
|
|
4
|
+
<script src="/javascripts/toggle_diff.js" type="text/javascript"></script>
|
|
5
|
+
<link type="text/css" rel="stylesheet" href="/stylesheets/style.css">
|
|
6
|
+
<link type="text/css" rel="stylesheet" href="/stylesheets/diff.css">
|
|
7
|
+
<script>
|
|
8
|
+
|
|
9
|
+
// http://developer.irt.org/script/1428.htm - add timezone
|
|
10
|
+
function intercept(a) {
|
|
11
|
+
if(a.href.indexOf('?') == -1) a.href += '?'; else a.href += '&';
|
|
12
|
+
a.href += 'timezone=' + new Date().getTimezoneOffset() + '&tab=' + stickyTab
|
|
13
|
+
}
|
|
14
|
+
</script>
|
|
15
|
+
</head>
|
|
16
|
+
<body onLoad="executeOnLoad()">
|
|
17
|
+
|
|
18
|
+
<table id="header" cellpadding="0" cellspacing="0" width="100%" border="0">
|
|
19
|
+
<tr id="top-panel">
|
|
20
|
+
<td>
|
|
21
|
+
<a href="http://damagecontrol.codehaus.org/"><img class="logo" src="images/damagecontrol-logo.gif"/></a>
|
|
22
|
+
</td>
|
|
23
|
+
</tr>
|
|
24
|
+
<tr id="top-nav">
|
|
25
|
+
<td id="left-top-nav">
|
|
26
|
+
<%= "TODO: breadcrumbs here" %>
|
|
27
|
+
</td>
|
|
28
|
+
</tr>
|
|
29
|
+
</table>
|
|
30
|
+
|
|
31
|
+
<table id="main-table" width="100%" height="70%" border="0">
|
|
32
|
+
<tr>
|
|
33
|
+
|
|
34
|
+
<td id="side-panel" width="20%">
|
|
35
|
+
<div id="tasks">
|
|
36
|
+
<% @sidebar_links.each do |link|
|
|
37
|
+
image = link.delete(:image)
|
|
38
|
+
name = link.delete(:name)
|
|
39
|
+
href = link.delete(:href)
|
|
40
|
+
if(href)
|
|
41
|
+
%>
|
|
42
|
+
<div class="task">
|
|
43
|
+
<%= content_tag("a", tag("img", :src => image), {:href => href}) %> <%= content_tag("a", name, {:href => href}) %>
|
|
44
|
+
</div>
|
|
45
|
+
<% else %>
|
|
46
|
+
<div class="task">
|
|
47
|
+
<%= link_to_image(image, link) %> <%= link_to(name, link) %>
|
|
48
|
+
</div>
|
|
49
|
+
<% end %>
|
|
50
|
+
<% end %>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div id="navigation">
|
|
54
|
+
<%= render_partial(@navigation_name, nil) if @navigation_name %>
|
|
55
|
+
</div>
|
|
56
|
+
</td>
|
|
57
|
+
|
|
58
|
+
<td id="main-panel" width="80%" height="100%">
|
|
59
|
+
<%= @content_for_layout %>
|
|
60
|
+
</td>
|
|
61
|
+
|
|
62
|
+
</tr>
|
|
63
|
+
|
|
64
|
+
<tr><td id="footer" colspan="2" background="/images/footer.gif">
|
|
65
|
+
This stuff displays best in a Mozilla based browser. Try <a href="http://www.mozilla.org/products/firefox/">Firefox</a>.
|
|
66
|
+
<br>
|
|
67
|
+
</td></tr>
|
|
68
|
+
|
|
69
|
+
</table>
|
|
70
|
+
|
|
71
|
+
<!-- These scripts must be inside or after the body tag since they check for the presence of document.body -->
|
|
72
|
+
<script src="/javascripts/dw_tooltip.js" type="text/javascript"></script>
|
|
73
|
+
<script src="/javascripts/dw_event.js" type="text/javascript"></script>
|
|
74
|
+
<script src="/javascripts/dw_viewport.js" type="text/javascript"></script>
|
|
75
|
+
<!--[if gte IE 5.5000]>
|
|
76
|
+
<script type="text/javascript" src="/javascripts/pngfix.js"></script>
|
|
77
|
+
<![endif]-->
|
|
78
|
+
</body>
|
|
79
|
+
</html>
|
|
@@ -0,0 +1,13 @@
|
|
|
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"/>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<table nowrap="nowrap" class="pane" nowrap="nowrap">
|
|
2
|
+
|
|
3
|
+
<%
|
|
4
|
+
if @linkable_changesets.nil?
|
|
5
|
+
%>
|
|
6
|
+
<%
|
|
7
|
+
elsif @linkable_changesets.empty?
|
|
8
|
+
%>
|
|
9
|
+
<tr class="pane">
|
|
10
|
+
<td class="pane">
|
|
11
|
+
No Changesets
|
|
12
|
+
</td>
|
|
13
|
+
</tr>
|
|
14
|
+
<% else %>
|
|
15
|
+
<%
|
|
16
|
+
@linkable_changesets.reverse.each do |changeset|
|
|
17
|
+
%>
|
|
18
|
+
<tr class="build-row">
|
|
19
|
+
<td nowrap="nowrap">
|
|
20
|
+
<%= link_to("#{changeset.identifier} (#{changeset.developer})", :action => "changesets", :id => @project.name, :params => {"changeset" => changeset.identifier}) %>
|
|
21
|
+
</td>
|
|
22
|
+
<td width="100%">
|
|
23
|
+
<% @project.builds(changeset.identifier).each do |build| %>
|
|
24
|
+
<%= tag("img", :src => build.small_image) %>
|
|
25
|
+
<% end %>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
<% end %>
|
|
29
|
+
|
|
30
|
+
<% if(!@select_changeset_identifiers.empty?) %>
|
|
31
|
+
<tr class="build-row">
|
|
32
|
+
<td class="build-cell-even">
|
|
33
|
+
<form method="get" action="<%= url_for(:action => "changesets", :id => @project.name) %>">
|
|
34
|
+
<input type="hidden" name="project_name" value="<%= "bar" %>" />
|
|
35
|
+
<select name="changeset" onchange="submit()">
|
|
36
|
+
|
|
37
|
+
<%
|
|
38
|
+
@select_changeset_identifiers.reverse.each do |changeset_identifier|
|
|
39
|
+
%>
|
|
40
|
+
<option value="<%= changeset_identifier %>"><%= changeset_identifier %></option>
|
|
41
|
+
<% end %>
|
|
42
|
+
|
|
43
|
+
</select>
|
|
44
|
+
</form>
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<% end %>
|
|
48
|
+
|
|
49
|
+
<% end %>
|
|
50
|
+
|
|
51
|
+
</table>
|
|
52
|
+
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
cvs_port = new RegExp("^:([^:]*):(.*)@([^:]*):([0-9]*):([a-zA-Z]?.*)")
|
|
3
|
+
cvs_noport = new RegExp("^:([^:]*):(.*)@([^:]*):([a-zA-Z]?.*)")
|
|
4
|
+
cvs_local = new RegExp("^:(local):(.*)")
|
|
5
|
+
|
|
6
|
+
// distributes fields from the value of cvsroot. called on load and on edit of cvsroot field
|
|
7
|
+
function cvs_init() {
|
|
8
|
+
cvsroot = document.getElementById('cvsroot').value
|
|
9
|
+
|
|
10
|
+
protocolIndex = 1
|
|
11
|
+
userIndex = -1
|
|
12
|
+
serverIndex = -1
|
|
13
|
+
portIndex = -1
|
|
14
|
+
pathIndex = -1
|
|
15
|
+
if(tokens = cvs_port.exec(cvsroot)) {
|
|
16
|
+
userIndex = 2
|
|
17
|
+
serverIndex = 3
|
|
18
|
+
portIndex = 4
|
|
19
|
+
pathIndex = 5
|
|
20
|
+
} else if(tokens = cvs_noport.exec(cvsroot)) {
|
|
21
|
+
userIndex = 2
|
|
22
|
+
serverIndex = 3
|
|
23
|
+
pathIndex = 4
|
|
24
|
+
} else if(tokens = cvs_local.exec(cvsroot)) {
|
|
25
|
+
pathIndex = 2
|
|
26
|
+
}
|
|
27
|
+
if(pathIndex != -1) {
|
|
28
|
+
document.getElementById('cvsprotocol').selectedIndex = findIndex(tokens[protocolIndex])
|
|
29
|
+
|
|
30
|
+
if(userIndex != -1) {
|
|
31
|
+
document.getElementById('cvsuser').value = tokens[userIndex]
|
|
32
|
+
document.getElementById('cvsserver').value = tokens[serverIndex]
|
|
33
|
+
} else {
|
|
34
|
+
document.getElementById('cvsuser').value = ""
|
|
35
|
+
document.getElementById('cvsserver').value = ""
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if(portIndex != -1) {
|
|
39
|
+
document.getElementById('cvsport').value = tokens[portIndex]
|
|
40
|
+
} else {
|
|
41
|
+
document.getElementById('cvsport').value = ""
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
document.getElementById('cvsrepodir').value = tokens[pathIndex]
|
|
45
|
+
} else {
|
|
46
|
+
// didn't match
|
|
47
|
+
clearCvsFields()
|
|
48
|
+
// TODO: make CVSROOT yellow and blank all the others. Also disable submit.
|
|
49
|
+
}
|
|
50
|
+
enableOrDisableCvsFields()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function clearCvsFields() {
|
|
54
|
+
document.getElementById('cvsprotocol').selectedIndex = 0
|
|
55
|
+
document.getElementById('cvsuser').value = ""
|
|
56
|
+
document.getElementById('cvsserver').value = ""
|
|
57
|
+
document.getElementById('cvsport').value = ""
|
|
58
|
+
document.getElementById('cvsrepodir').value = ""
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function findIndex(protocol) {
|
|
62
|
+
arr = new Array("ext", "pserver", "local")
|
|
63
|
+
for (var i=0; i < arr.length; i++) {
|
|
64
|
+
if(arr[i] == protocol) {
|
|
65
|
+
return i + 1
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return 0
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function updateCvsRootField() {
|
|
72
|
+
userAtServerAtPort = ""
|
|
73
|
+
if(document.getElementById('cvsprotocol').value != "local") {
|
|
74
|
+
// it's proper client/server
|
|
75
|
+
port = document.getElementById('cvsport').value != "" ? document.getElementById('cvsport').value + ":" : ""
|
|
76
|
+
userAtServerAtPort =
|
|
77
|
+
document.getElementById('cvsuser').value + "@" +
|
|
78
|
+
document.getElementById('cvsserver').value + ":" +
|
|
79
|
+
port
|
|
80
|
+
}
|
|
81
|
+
document.getElementById('cvsroot').value = ":" +
|
|
82
|
+
document.getElementById('cvsprotocol').value + ":" +
|
|
83
|
+
userAtServerAtPort +
|
|
84
|
+
document.getElementById('cvsrepodir').value
|
|
85
|
+
enableOrDisableCvsFields()
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function enableOrDisableCvsFields() {
|
|
89
|
+
if(document.getElementById('cvsprotocol').value == "local") {
|
|
90
|
+
document.getElementById('cvsuser').disabled = true
|
|
91
|
+
document.getElementById('cvspassword').disabled = true
|
|
92
|
+
document.getElementById('cvsserver').disabled = true
|
|
93
|
+
document.getElementById('cvsport').disabled = true
|
|
94
|
+
} else if(document.getElementById('cvsprotocol').value == "ext") {
|
|
95
|
+
document.getElementById('cvsuser').disabled = false
|
|
96
|
+
document.getElementById('cvspassword').disabled = true
|
|
97
|
+
document.getElementById('cvsserver').disabled = false
|
|
98
|
+
document.getElementById('cvsport').disabled = false
|
|
99
|
+
} else if(document.getElementById('cvsprotocol').value == "pserver") {
|
|
100
|
+
document.getElementById('cvsuser').disabled = false
|
|
101
|
+
document.getElementById('cvspassword').disabled = false
|
|
102
|
+
document.getElementById('cvsserver').disabled = false
|
|
103
|
+
document.getElementById('cvsport').disabled = false
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
var scm_password_tip = "<div class='tp1'><b>Warning!</b> Password will be shown in cleartext in configuration files.</div>";
|
|
108
|
+
var cvs_protocol_tip = "<div class='tp1'>If you specify :local: DamageControl can create the repository for you after you save (unless the repository already exists).</div>";
|
|
109
|
+
// not displayed yet - not appropriate for rscm...
|
|
110
|
+
var cvs_mod_tip = "<div class='tp1'>Note that you can't use trigged build if you are using DC to build multiple branches for the same project, use polling instead.</div>";
|
|
111
|
+
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
<table width="100%">
|
|
115
|
+
<tr>
|
|
116
|
+
<td width="25%" class="setting-name">CVSROOT</td>
|
|
117
|
+
<td> </td>
|
|
118
|
+
<td width="75%"><%= text_or_input(@edit, :name => "RSCM::CVS[root]", :value => cvs.root, :onKeyUp => "cvs_init()", :id => "cvsroot") %></td>
|
|
119
|
+
</tr>
|
|
120
|
+
<% if(@edit) %>
|
|
121
|
+
<tr>
|
|
122
|
+
<td>Protocol</td>
|
|
123
|
+
<td><%= tip(:txt => 'cvs_protocol_tip') %></td>
|
|
124
|
+
<td>
|
|
125
|
+
<select class="setting-input" id="cvsprotocol" onchange="updateCvsRootField()">
|
|
126
|
+
<option value=""></option>
|
|
127
|
+
<option value="ext" selected>Secure shell (:ext:)</option>
|
|
128
|
+
<option value="pserver">Password server (:pserver:)</option>
|
|
129
|
+
<option value="local">Locally mounted folder (:local:)</option>
|
|
130
|
+
</select>
|
|
131
|
+
</td>
|
|
132
|
+
</tr>
|
|
133
|
+
<tr>
|
|
134
|
+
<td>User name</td>
|
|
135
|
+
<td> </td>
|
|
136
|
+
<td width="75%"><%= text_or_input(@edit, :onKeyUp => "updateCvsRootField()", :id => "cvsuser") %></td>
|
|
137
|
+
</tr>
|
|
138
|
+
<tr>
|
|
139
|
+
<td>Password</td>
|
|
140
|
+
<td><%= tip(:txt => 'scm_password_tip') %></td>
|
|
141
|
+
<td width="75%"><%= text_or_input(@edit, :name => "RSCM::CVS[password]", :onKeyUp => "updateCvsRootField()", :id => "cvspassword") %></td>
|
|
142
|
+
</tr>
|
|
143
|
+
<tr>
|
|
144
|
+
<td>Server</td>
|
|
145
|
+
<td> </td>
|
|
146
|
+
<td width="75%"><%= text_or_input(@edit, :onKeyUp => "updateCvsRootField()", :id => "cvsserver") %></td>
|
|
147
|
+
</tr>
|
|
148
|
+
<tr>
|
|
149
|
+
<td>Port</td>
|
|
150
|
+
<td> </td>
|
|
151
|
+
<td width="75%"><%= text_or_input(@edit, :onKeyUp => "updateCvsRootField()", :id => "cvsport") %></td>
|
|
152
|
+
</tr>
|
|
153
|
+
<tr>
|
|
154
|
+
<td>Repository directory</td>
|
|
155
|
+
<td> </td>
|
|
156
|
+
<td width="75%"><%= text_or_input(@edit, :onKeyUp => "updateCvsRootField()", :id => "cvsrepodir") %></td>
|
|
157
|
+
</tr>
|
|
158
|
+
<% end %>
|
|
159
|
+
<tr>
|
|
160
|
+
<td>Module</td>
|
|
161
|
+
<td> </td>
|
|
162
|
+
<td width="75%"><%= text_or_input(@edit, :name => "RSCM::CVS[mod]", :value => cvs.mod, :id => "cvsmodule") %></td>
|
|
163
|
+
</tr>
|
|
164
|
+
<tr>
|
|
165
|
+
<td>Branch</td>
|
|
166
|
+
<td> </td>
|
|
167
|
+
<td width="75%"><%= text_or_input(@edit, :name => "RSCM::CVS[branch]", :value => cvs.branch, :id => "cvsmodule") %></td>
|
|
168
|
+
</tr>
|
|
169
|
+
</table>
|
|
170
|
+
|
|
171
|
+
<img src="/images/cvs.png"/>
|
|
@@ -0,0 +1,19 @@
|
|
|
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"/>
|
|
@@ -0,0 +1,23 @@
|
|
|
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>
|
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
var project_name_page_tip = "<div class='tp1'>The project name should not use space characters, as it will be used to create a folder on the server.</div>";
|
|
3
|
+
var build_command_tip = "<div class='tp1'>The command-line that will execute the build.</div>";
|
|
4
|
+
var project_description_tip = "<div class='tp1'>A short description of the project. Will be used in various notifications such as RSS.</div>";
|
|
5
|
+
var project_home_page_tip = "<div class='tp1'>URL to the project's home page or documentation.</div>";
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<input name="project" type="hidden" value="<%= project.class.name %>"/>
|
|
9
|
+
|
|
10
|
+
<table width="100%">
|
|
11
|
+
<tr>
|
|
12
|
+
<td width="25%" class="setting-name">Project name</td>
|
|
13
|
+
<td><%= tip(:txt => 'project_name_page_tip') %></td>
|
|
14
|
+
<td width="75%">
|
|
15
|
+
<%= text_or_input(@new_project, :name => "DamageControl::Project[name]", :value => project.name) %>
|
|
16
|
+
<% if(@edit) %>
|
|
17
|
+
<%= tag("input", :type => "hidden", :name => "DamageControl::Project[name]", :value => project.name) %>
|
|
18
|
+
<% end %>
|
|
19
|
+
</td>
|
|
20
|
+
</tr>
|
|
21
|
+
<tr>
|
|
22
|
+
<td>Build command</td>
|
|
23
|
+
<td><%= tip(:txt => 'build_command_tip') %></td>
|
|
24
|
+
<td><%= text_or_input(@edit, :name => "DamageControl::Project[build_command]", :value => project.build_command) %></td>
|
|
25
|
+
</tr>
|
|
26
|
+
<tr>
|
|
27
|
+
<td>Project description</td>
|
|
28
|
+
<td><%= tip(:txt => 'project_description_tip') %></td>
|
|
29
|
+
<td><%= text_or_input(@edit, :name => "DamageControl::Project[description]", :value => project.description) %></td>
|
|
30
|
+
</tr>
|
|
31
|
+
<tr>
|
|
32
|
+
<td>Project home page</td>
|
|
33
|
+
<td><%= tip(:txt => 'project_home_page_tip') %></td>
|
|
34
|
+
<td><%= text_or_input(@edit, :name => "DamageControl::Project[home_page]", :value => project.home_page) %></td>
|
|
35
|
+
</tr>
|
|
36
|
+
</table>
|
|
@@ -0,0 +1,19 @@
|
|
|
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&aid=1120&group_id=<strong>426</strong>&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&aid=<strong>1120</strong>&group_id=426&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"/>
|
|
@@ -0,0 +1,19 @@
|
|
|
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"/>
|
|
@@ -0,0 +1,15 @@
|
|
|
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 %>
|
|
@@ -0,0 +1,19 @@
|
|
|
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&aid=1051927&group_id=<strong>7856</strong>&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&aid=<strong>1051927</strong>&group_id=7856&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"/>
|
|
@@ -0,0 +1,43 @@
|
|
|
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> </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> </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> </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> </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> </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> </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"/>
|
|
@@ -0,0 +1,22 @@
|
|
|
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"/>
|
|
@@ -0,0 +1,13 @@
|
|
|
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"/>
|