damagecontrol 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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"/>
|