damagecontrol 0.5.0 → 0.5.0.1391
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 +67 -11
- data/Rakefile +15 -6
- data/app/controllers/admin_controller.rb +0 -3
- data/app/controllers/application.rb +42 -163
- data/app/controllers/build_controller.rb +33 -0
- data/app/controllers/files_controller.rb +1 -1
- data/app/controllers/project_controller.rb +23 -65
- data/app/controllers/rails_ext.rb +247 -0
- data/app/controllers/rscm_ext.rb +52 -0
- data/app/helpers/build_helper.rb +2 -0
- data/app/views/build/email.rhtml +18 -0
- data/app/views/build/status.rhtml +20 -0
- data/app/views/build/tests.rhtml +2 -0
- data/app/views/layouts/{rscm.rhtml → default.rhtml} +10 -4
- data/app/views/project/_changesets_list.rhtml +2 -2
- data/app/views/project/_cvs.rhtml +4 -5
- data/app/views/project/_project.rhtml +9 -9
- data/app/views/project/_select_pane.rhtml +26 -0
- data/app/views/project/_tab_pane.rhtml +23 -0
- data/app/views/project/changeset.rhtml +35 -0
- data/app/views/project/view.rhtml +18 -32
- data/app/views/setup/welcome.rhtml +118 -0
- data/config/database.yml +20 -20
- data/config/environment.rb +66 -60
- data/config/environments/development.rb +3 -2
- data/config/environments/production.rb +3 -2
- data/config/environments/test.rb +3 -2
- data/config/routes.rb +15 -0
- data/lib/damagecontrol/app.rb +11 -40
- data/lib/damagecontrol/build.rb +50 -8
- data/lib/damagecontrol/directories.rb +7 -6
- data/lib/damagecontrol/poller.rb +11 -20
- data/lib/damagecontrol/project.rb +83 -16
- data/lib/damagecontrol/publisher/ambient_orb.rb +16 -0
- data/lib/damagecontrol/publisher/archive.rb +16 -0
- data/lib/damagecontrol/publisher/base.rb +25 -0
- data/lib/damagecontrol/publisher/build_duration.rb +16 -0
- data/lib/damagecontrol/publisher/email.rb +59 -0
- data/lib/damagecontrol/publisher/execute.rb +49 -0
- data/lib/damagecontrol/publisher/ftp.rb +16 -0
- data/lib/damagecontrol/publisher/growl.rb +44 -0
- data/lib/damagecontrol/publisher/irc.rb +31 -0
- data/lib/damagecontrol/publisher/jabber.rb +68 -0
- data/lib/damagecontrol/publisher/scp.rb +16 -0
- data/lib/damagecontrol/publisher/x10cm11a.rb +17 -0
- data/lib/damagecontrol/publisher/x10cm17a.rb +17 -0
- data/lib/damagecontrol/publisher/yahoo.rb +16 -0
- data/lib/damagecontrol/standard_persister.rb +2 -2
- data/lib/damagecontrol/tracker.rb +48 -6
- data/lib/damagecontrol/visitor/rss_writer.rb +1 -1
- data/lib/damagecontrol/visitor/yaml_persister.rb +10 -1
- data/public/404.html +5 -5
- data/public/500.html +5 -5
- data/public/dispatch.cgi +2 -2
- data/public/dispatch.fcgi +1 -1
- data/public/dispatch.rb +2 -2
- data/public/images/growlicon.png +0 -0
- data/public/images/megaphone.png +0 -0
- data/public/images/monotone-logo.png +0 -0
- data/public/images/publisher/ambient_orb.png +0 -0
- data/public/images/publisher/build_duration.png +0 -0
- data/public/images/publisher/email.png +0 -0
- data/public/images/publisher/execute.png +0 -0
- data/public/images/publisher/growl.png +0 -0
- data/public/images/publisher/irc.png +0 -0
- data/public/images/publisher/jabber.png +0 -0
- data/public/images/publisher/x10cm11a.png +0 -0
- data/public/images/publisher/x10cm17a.png +0 -0
- data/public/images/publisher/yahoo.png +0 -0
- data/public/index.html +70 -1
- data/public/javascripts/dateFormat.js +283 -0
- data/public/javascripts/jscalendar/ChangeLog +500 -0
- data/public/javascripts/jscalendar/README +33 -0
- data/public/javascripts/jscalendar/bugtest-hidden-selects.html +108 -0
- data/public/javascripts/jscalendar/calendar-blue.css +231 -0
- data/public/javascripts/jscalendar/calendar-blue2.css +235 -0
- data/public/javascripts/jscalendar/calendar-brown.css +224 -0
- data/public/javascripts/jscalendar/calendar-green.css +228 -0
- data/public/javascripts/jscalendar/calendar-setup.js +181 -0
- data/public/javascripts/jscalendar/calendar-setup_stripped.js +21 -0
- data/public/javascripts/jscalendar/calendar-system.css +250 -0
- data/public/javascripts/jscalendar/calendar-tas.css +238 -0
- data/public/javascripts/jscalendar/calendar-win2k-1.css +270 -0
- data/public/javascripts/jscalendar/calendar-win2k-2.css +270 -0
- data/public/javascripts/jscalendar/calendar-win2k-cold-1.css +264 -0
- data/public/javascripts/jscalendar/calendar-win2k-cold-2.css +270 -0
- data/public/javascripts/jscalendar/calendar.js +1715 -0
- data/public/javascripts/jscalendar/calendar.php +119 -0
- data/public/javascripts/jscalendar/calendar_stripped.js +12 -0
- data/public/javascripts/jscalendar/doc/html/reference-Z-S.css +0 -0
- data/public/javascripts/jscalendar/doc/html/reference.css +34 -0
- data/public/javascripts/jscalendar/doc/html/reference.html +1316 -0
- data/public/javascripts/jscalendar/doc/reference.pdf +0 -0
- data/public/javascripts/jscalendar/img.gif +0 -0
- data/public/javascripts/jscalendar/index.html +333 -0
- data/public/javascripts/jscalendar/lang/calendar-af.js +39 -0
- data/public/javascripts/jscalendar/lang/calendar-br.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-ca.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-cs-win.js +34 -0
- data/public/javascripts/jscalendar/lang/calendar-da.js +63 -0
- data/public/javascripts/jscalendar/lang/calendar-de.js +100 -0
- data/public/javascripts/jscalendar/lang/calendar-du.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-el.js +89 -0
- data/public/javascripts/jscalendar/lang/calendar-en.js +123 -0
- data/public/javascripts/jscalendar/lang/calendar-es.js +114 -0
- data/public/javascripts/jscalendar/lang/calendar-fi.js +98 -0
- data/public/javascripts/jscalendar/lang/calendar-fr.js +86 -0
- data/public/javascripts/jscalendar/lang/calendar-hr-utf8.js +49 -0
- data/public/javascripts/jscalendar/lang/calendar-hr.js +0 -0
- data/public/javascripts/jscalendar/lang/calendar-hu.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-it.js +79 -0
- data/public/javascripts/jscalendar/lang/calendar-jp.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-ko-utf8.js +120 -0
- data/public/javascripts/jscalendar/lang/calendar-ko.js +120 -0
- data/public/javascripts/jscalendar/lang/calendar-lt-utf8.js +114 -0
- data/public/javascripts/jscalendar/lang/calendar-lt.js +114 -0
- data/public/javascripts/jscalendar/lang/calendar-nl.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-no.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-pl-utf8.js +93 -0
- data/public/javascripts/jscalendar/lang/calendar-pl.js +56 -0
- data/public/javascripts/jscalendar/lang/calendar-pt.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-ro.js +66 -0
- data/public/javascripts/jscalendar/lang/calendar-ru.js +45 -0
- data/public/javascripts/jscalendar/lang/calendar-si.js +94 -0
- data/public/javascripts/jscalendar/lang/calendar-sk.js +99 -0
- data/public/javascripts/jscalendar/lang/calendar-sp.js +63 -0
- data/public/javascripts/jscalendar/lang/calendar-sv.js +93 -0
- data/public/javascripts/jscalendar/lang/calendar-tr.js +58 -0
- data/public/javascripts/jscalendar/lang/calendar-zh.js +45 -0
- data/public/javascripts/jscalendar/menuarrow.gif +0 -0
- data/public/javascripts/jscalendar/menuarrow2.gif +0 -0
- data/public/javascripts/jscalendar/release-notes.html +334 -0
- data/public/javascripts/jscalendar/simple-1.html +244 -0
- data/public/javascripts/jscalendar/simple-2.html +108 -0
- data/public/javascripts/jscalendar/simple-3.html +130 -0
- data/public/javascripts/jscalendar/test-position.html +40 -0
- data/public/javascripts/jscalendar/test.php +116 -0
- data/public/javascripts/toggle_div.js +18 -0
- data/public/stylesheets/niceones.txt +1 -0
- data/public/stylesheets/style.css +8 -1
- data/script/breakpointer +4 -5
- data/script/console +19 -27
- data/script/console_sandbox.rb +7 -0
- data/script/destroy +5 -0
- data/script/generate +3 -68
- data/script/server +6 -16
- data/test/damagecontrol/build_test.rb +8 -8
- data/test/damagecontrol/poller_test.rb +10 -18
- data/test/damagecontrol/project_test.rb +49 -13
- data/test/damagecontrol/publisher/base_test.rb +26 -0
- data/test/damagecontrol/publisher/build/email.rhtml +0 -0
- data/test/damagecontrol/publisher/email_test.rb +26 -0
- data/test/damagecontrol/publisher/fixture.rb +34 -0
- data/test/damagecontrol/publisher/growl_test.rb +15 -0
- data/test/damagecontrol/publisher/jabber_test.rb +15 -0
- data/test/damagecontrol/scm_web_test.rb +1 -1
- data/test/damagecontrol/visitor/changesets.rss +1 -1
- data/test/damagecontrol/visitor/diff_persister_test.rb +4 -4
- data/test/functional/build_controller_test.rb +17 -0
- data/test/test_helper.rb +13 -13
- metadata +185 -24
- data/app/views/project/_bugzilla.rhtml +0 -13
- data/app/views/project/_jira.rhtml +0 -19
- data/app/views/project/_mooky.rhtml +0 -23
- data/app/views/project/_rubyforge.rhtml +0 -19
- data/app/views/project/_scarab.rhtml +0 -19
- data/app/views/project/_scms.rhtml +0 -15
- data/app/views/project/_sourceforge.rhtml +0 -19
- data/app/views/project/_starteam.rhtml +0 -43
- data/app/views/project/_svn.rhtml +0 -22
- data/app/views/project/_trac.rhtml +0 -13
- data/app/views/project/_trackers.rhtml +0 -18
- data/app/views/project/changesets.rhtml +0 -31
data/README
CHANGED
|
@@ -2,13 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
= Feature overview
|
|
4
4
|
|
|
5
|
-
*
|
|
5
|
+
* Builds projects of any kind:
|
|
6
|
+
* Java
|
|
7
|
+
* .NET
|
|
8
|
+
* Ruby
|
|
9
|
+
* C/C++
|
|
10
|
+
* (This is getting boring, you can build projects in any language)
|
|
11
|
+
* Supports any kind of build tools:
|
|
12
|
+
* Ant
|
|
13
|
+
* Nant
|
|
14
|
+
* Make
|
|
15
|
+
* Rake
|
|
16
|
+
* Maven
|
|
17
|
+
* Bash/Sh/Bat scripts
|
|
18
|
+
* (You get the picture)
|
|
19
|
+
* Several notification channels
|
|
20
|
+
* Email
|
|
21
|
+
* IRC
|
|
22
|
+
* RSS
|
|
23
|
+
* Growl
|
|
24
|
+
* Supports all SCMs supported by RSCM:
|
|
25
|
+
* CVS
|
|
26
|
+
* Subversion
|
|
27
|
+
* Perforce
|
|
28
|
+
* Monotone
|
|
29
|
+
* ClearCase
|
|
30
|
+
* (See http://rscm.codehaus.org for details)
|
|
31
|
+
* Trend graphs and statistics (soming soon)
|
|
6
32
|
* Web interface based on RoR (http://www.rubyonrails.org/)
|
|
33
|
+
* No funny config files, all web based configuration (you can use config files if you wish)
|
|
7
34
|
* Colourised HTML diffs.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Uses UTC times according to the SCM server's clock, not the machine running RSCM. No NTP needed!
|
|
35
|
+
* Integration with several SCM web front-ends.
|
|
36
|
+
* Integration with several issue trackers.
|
|
37
|
+
* Uses UTC times according to the SCM server's clock, not the machine running RSCM. No NTP needed!
|
|
12
38
|
|
|
13
39
|
== DamageControl Server
|
|
14
40
|
|
|
@@ -59,17 +85,47 @@ Planned:
|
|
|
59
85
|
|
|
60
86
|
* RT - http://fsck.com/projects/rt/
|
|
61
87
|
|
|
62
|
-
== SCM web front-ends
|
|
88
|
+
== SCM web front-ends
|
|
63
89
|
|
|
64
|
-
DamageControl's web interface features colourised diffs for all changes in a changeset.
|
|
65
|
-
It can also generate links to individual diff pages in other SCM web frontends
|
|
90
|
+
DamageControl's web interface features colourised diffs for all changes in a changeset (for any supported SCM).
|
|
91
|
+
It can also generate links to individual diff pages in other SCM web frontends, provided it's compatible with
|
|
92
|
+
the given project's SCM:
|
|
66
93
|
|
|
67
|
-
* RSCM Built-in HTML diffs.
|
|
68
94
|
* Fisheye - http://www.cenqua.com/fisheye/
|
|
69
95
|
* ViewCVS - http://viewcvs.sourceforge.net/
|
|
96
|
+
* Trac - http://www.edgewall.com/trac/
|
|
70
97
|
|
|
71
98
|
Planned:
|
|
72
99
|
|
|
73
|
-
*
|
|
74
|
-
|
|
100
|
+
* Chora - http://horde.org/chora/
|
|
101
|
+
|
|
102
|
+
= Extending DamageControl
|
|
103
|
+
|
|
104
|
+
== SourceControl
|
|
105
|
+
|
|
106
|
+
See http://rscm.rubyforge.org for instructions about how to add support for new SCMs
|
|
107
|
+
|
|
108
|
+
== Build Publishers
|
|
109
|
+
|
|
110
|
+
If you have an idea for a new publisher it's very easy to hook in. Just drop your class into the lib/publisher directory. Your publisher class
|
|
111
|
+
must implement the following methods:
|
|
112
|
+
|
|
113
|
+
# This method will be called when a build is complete.
|
|
114
|
+
def publish(build)
|
|
115
|
+
...
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# This is the display name of the publisher
|
|
119
|
+
def name
|
|
120
|
+
...
|
|
121
|
+
end
|
|
75
122
|
|
|
123
|
+
You must also make sure your publisher class registers with the Project class. Put this in the class body:
|
|
124
|
+
|
|
125
|
+
Project.available_publisher_classes << self
|
|
126
|
+
|
|
127
|
+
If your publisher requires some sort of configuration, just make an attr_accessor for each configuration option. DamageControl will automatically
|
|
128
|
+
pick up your publisher, render it under the Publishers tab on the project configuration page.
|
|
129
|
+
|
|
130
|
+
If you want to share your publisher with the rest of the world, just upload it to DamageControl's JIRA. If you include a unit test for it,
|
|
131
|
+
we'll be extra happy.
|
data/Rakefile
CHANGED
|
@@ -16,11 +16,16 @@ task :default => [ :all ]
|
|
|
16
16
|
|
|
17
17
|
# Run the unit tests
|
|
18
18
|
# To run a specific test: rake test TEST=path/to/test
|
|
19
|
-
fl = FileList.new('test/**/*_test.rb')
|
|
19
|
+
fl = FileList.new('test/**/*_test.rb')
|
|
20
|
+
# Work around annoying LoadError - run this test alone
|
|
21
|
+
fl.exclude('test/**/email_test.rb')
|
|
22
|
+
fl.exclude('test/functional/*')
|
|
20
23
|
# TODO: figure out how to add all the stuff in app.
|
|
21
24
|
Rake::TestTask.new { |t|
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
t.libs << "test"
|
|
26
|
+
# We need some of the test utils from rscm. add them in 2 ways so they can be found when built by dc too.
|
|
27
|
+
t.libs << File.expand_path(File.dirname(__FILE__) + "/../rscm/test") << File.expand_path(File.dirname(__FILE__) + "/../rscm/lib")
|
|
28
|
+
t.libs << File.expand_path(File.dirname(__FILE__) + "/../../RSCM/checkout/test") << File.expand_path(File.dirname(__FILE__) + "/../../RSCM/checkout/lib")
|
|
24
29
|
t.test_files = fl
|
|
25
30
|
t.verbose = true
|
|
26
31
|
}
|
|
@@ -65,9 +70,13 @@ else
|
|
|
65
70
|
|
|
66
71
|
#### Dependencies and requirements.
|
|
67
72
|
|
|
68
|
-
s.add_dependency('
|
|
69
|
-
s.add_dependency('
|
|
70
|
-
s.add_dependency('
|
|
73
|
+
s.add_dependency('rscm', '0.2.0')
|
|
74
|
+
s.add_dependency('rails', '0.10.0')
|
|
75
|
+
s.add_dependency('log4r', '1.0.5')
|
|
76
|
+
s.add_dependency('needle', '1.2.0')
|
|
77
|
+
s.add_dependency('jabber4r', '0.7.0')
|
|
78
|
+
s.add_dependency('rake', '0.4.5')
|
|
79
|
+
s.add_dependency('ruby-growl', '1.0.0')
|
|
71
80
|
# s.add_dependency('rgl')
|
|
72
81
|
#s.requirements << ""
|
|
73
82
|
|
|
@@ -1,163 +1,42 @@
|
|
|
1
|
-
# The filters added to this controller will be run for all controllers in the application.
|
|
2
|
-
# Likewise will all the methods added be available for all controllers.
|
|
3
|
-
|
|
4
|
-
require '
|
|
5
|
-
|
|
6
|
-
require 'damagecontrol/
|
|
7
|
-
require 'damagecontrol/
|
|
8
|
-
require 'damagecontrol/
|
|
9
|
-
require '
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# Sets the links to display in the sidebar. Override this method in other controllers
|
|
45
|
-
# To change what to display.
|
|
46
|
-
def set_sidebar_links
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
module ActionView
|
|
53
|
-
module Helpers
|
|
54
|
-
module UrlHelper
|
|
55
|
-
# Modify the original behaviour of +link_to+ so that the link
|
|
56
|
-
# includes the client's timezone as URL param +timezone+ in the request.
|
|
57
|
-
# Can be used by server to adjust formatting of UTC dates so they match the client's time zone.
|
|
58
|
-
def convert_confirm_option_to_javascript!(html_options)
|
|
59
|
-
# We're adding this JS call to add the timezone info as a URL param.
|
|
60
|
-
html_options["onclick"] = "intercept(this);"
|
|
61
|
-
if html_options.include?(:confirm)
|
|
62
|
-
html_options["onclick"] += "return confirm('#{html_options[:confirm]}');"
|
|
63
|
-
html_options.delete(:confirm)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
class Base
|
|
70
|
-
def text_or_input(input, options)
|
|
71
|
-
if(input)
|
|
72
|
-
options[:class] = "setting-input" unless options[:class]
|
|
73
|
-
tag("input", options)
|
|
74
|
-
elsif(options[:value] =~ /^http?:\/\//)
|
|
75
|
-
content_tag("a", options[:value], "href" => options[:value])
|
|
76
|
-
else
|
|
77
|
-
options[:value]
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def text_or_select(input, options)
|
|
82
|
-
values = options.delete(:values)
|
|
83
|
-
if(input)
|
|
84
|
-
options[:class] = "setting-input" unless options[:class]
|
|
85
|
-
|
|
86
|
-
option_tags = ""
|
|
87
|
-
values.each do |value|
|
|
88
|
-
option_attrs = {:value => value.class.name}
|
|
89
|
-
option_attrs[:selected] = "true" if value.selected?
|
|
90
|
-
option_tag = content_tag("option", value.name, option_attrs)
|
|
91
|
-
option_tags << option_tag
|
|
92
|
-
end
|
|
93
|
-
content_tag("select", option_tags, options)
|
|
94
|
-
else
|
|
95
|
-
values.find {|v| v.selected?}.name
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Creates an image with a tooltip that will show on mouseover.
|
|
100
|
-
#
|
|
101
|
-
# Options:
|
|
102
|
-
# * <tt>:txt</tt> - The text to put in the tooltip. Can be HTML.
|
|
103
|
-
# * <tt>:img</tt> - The image to display on the page. Defaults to '/images/16x16/about.png'
|
|
104
|
-
def tip(options)
|
|
105
|
-
tip = options.delete(:txt)
|
|
106
|
-
options[:src] = options.delete(:img) || "/images/16x16/about.png"
|
|
107
|
-
options[:onmouseover] = "Tooltip.show(event,#{tip})"
|
|
108
|
-
options[:onmouseout] = "Tooltip.hide()"
|
|
109
|
-
|
|
110
|
-
tag("img", options)
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
module DamageControl
|
|
116
|
-
|
|
117
|
-
# Add some generic web capabilities to the RSCM classes
|
|
118
|
-
module Web
|
|
119
|
-
module Configuration
|
|
120
|
-
|
|
121
|
-
def selected?
|
|
122
|
-
false
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# Returns the short lowercase name. Used for javascript and render_partial.
|
|
126
|
-
def short
|
|
127
|
-
$1.downcase if self.class.name =~ /.*::(.*)/
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
class RSCM::AbstractSCM
|
|
135
|
-
include DamageControl::Web::Configuration
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
class DamageControl::Tracker::Base
|
|
139
|
-
include DamageControl::Web::Configuration
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
class DamageControl::Project
|
|
143
|
-
include DamageControl::Web::Configuration
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
class DamageControl::Build
|
|
147
|
-
def small_image
|
|
148
|
-
exit_code == 0 ? "/images/green-16.gif" : "/images/red-16.gif"
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
class RSCM::Change
|
|
153
|
-
ICONS = {
|
|
154
|
-
MODIFIED => "/images/16x16/document_edit.png",
|
|
155
|
-
DELETED => "/images/16x16/document_delete.png",
|
|
156
|
-
ADDED => "/images/16x16/document_add.png",
|
|
157
|
-
MOVED => "/images/16x16/document_exchange.png",
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
def icon
|
|
161
|
-
ICONS[@status] || "/images/16x16/document_warning.png"
|
|
162
|
-
end
|
|
163
|
-
end
|
|
1
|
+
# The filters added to this controller will be run for all controllers in the application.
|
|
2
|
+
# Likewise will all the methods added be available for all controllers.
|
|
3
|
+
|
|
4
|
+
require 'damagecontrol/project'
|
|
5
|
+
require 'damagecontrol/build'
|
|
6
|
+
require 'damagecontrol/tracker'
|
|
7
|
+
require 'damagecontrol/scm_web'
|
|
8
|
+
require 'damagecontrol/publisher/base'
|
|
9
|
+
require 'rscm_ext'
|
|
10
|
+
require 'rails_ext'
|
|
11
|
+
|
|
12
|
+
class ApplicationController < ActionController::Base
|
|
13
|
+
|
|
14
|
+
layout 'default'
|
|
15
|
+
|
|
16
|
+
def initialize
|
|
17
|
+
@sidebar_links = [
|
|
18
|
+
{
|
|
19
|
+
:controller => "project",
|
|
20
|
+
:action => "new",
|
|
21
|
+
:image => "/images/24x24/box_new.png",
|
|
22
|
+
:name => "New project"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
@controller = self
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Loads the project specified by the +id+ parameter and places it into the @project variable
|
|
29
|
+
def load_project
|
|
30
|
+
project_name = @params["id"]
|
|
31
|
+
@project = DamageControl::Project.load(project_name)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
protected
|
|
35
|
+
|
|
36
|
+
# Sets the links to display in the sidebar. Override this method in other controllers
|
|
37
|
+
# To change what to display.
|
|
38
|
+
def set_sidebar_links
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class BuildController < ApplicationController
|
|
2
|
+
|
|
3
|
+
def status
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def stdout
|
|
7
|
+
load_build
|
|
8
|
+
send_log(@build.stdout)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def stderr
|
|
12
|
+
load_build
|
|
13
|
+
send_log(@build.stderr)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def tests
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def send_log(file)
|
|
22
|
+
# see application.rb for :no_disposition
|
|
23
|
+
send_file(file, :stream => true, :type => "text/plain", :no_disposition => true)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def load_build
|
|
27
|
+
load_project
|
|
28
|
+
changeset_identifier = @params["changeset"].to_identifier
|
|
29
|
+
build_time = @params["build"].to_identifier
|
|
30
|
+
@build = @project.build(changeset_identifier, build_time)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -3,58 +3,38 @@ require 'damagecontrol/project'
|
|
|
3
3
|
require 'damagecontrol/directories'
|
|
4
4
|
require 'damagecontrol/diff_parser'
|
|
5
5
|
require 'damagecontrol/diff_htmlizer'
|
|
6
|
+
require 'damagecontrol/publisher/base'
|
|
6
7
|
|
|
7
8
|
class ProjectController < ApplicationController
|
|
8
9
|
|
|
9
10
|
# TODO: check if the various SCMs are installed and disable them with a warning if not.
|
|
10
11
|
# Each SCM class should have an available? method
|
|
11
12
|
|
|
12
|
-
SCMS = [
|
|
13
|
-
# Uncomment this to see Mooky in action in the web interface!
|
|
14
|
-
# RSCM::Mooky,
|
|
15
|
-
RSCM::CVS,
|
|
16
|
-
RSCM::SVN,
|
|
17
|
-
RSCM::StarTeam
|
|
18
|
-
]
|
|
19
|
-
|
|
20
|
-
TRACKERS = [
|
|
21
|
-
DamageControl::Tracker::Null,
|
|
22
|
-
DamageControl::Tracker::Bugzilla,
|
|
23
|
-
DamageControl::Tracker::JIRA,
|
|
24
|
-
DamageControl::Tracker::RubyForge,
|
|
25
|
-
DamageControl::Tracker::SourceForge,
|
|
26
|
-
DamageControl::Tracker::Scarab,
|
|
27
|
-
DamageControl::Tracker::Trac
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
SCM_WEBS = [
|
|
31
|
-
# SCMWeb::Null.new,
|
|
32
|
-
# SCMWeb::ViewCVS.new,
|
|
33
|
-
# SCMWeb::Fisheye.new
|
|
34
|
-
]
|
|
35
|
-
|
|
36
13
|
def initialize
|
|
37
14
|
super
|
|
38
15
|
@navigation_name = "changesets_list"
|
|
39
16
|
end
|
|
40
17
|
|
|
41
18
|
def index
|
|
42
|
-
@projects = DamageControl::Project.find_all
|
|
19
|
+
@projects = ::DamageControl::Project.find_all
|
|
43
20
|
@navigation_name = "null"
|
|
44
21
|
end
|
|
45
22
|
|
|
46
23
|
def new
|
|
47
24
|
@project = DamageControl::Project.new
|
|
48
|
-
|
|
25
|
+
|
|
26
|
+
@scms = RSCM::AbstractSCM.classes.collect {|cls| cls.new}
|
|
49
27
|
first_scm = @scms[0]
|
|
50
28
|
def first_scm.selected?
|
|
51
29
|
true
|
|
52
30
|
end
|
|
53
|
-
|
|
31
|
+
|
|
32
|
+
@trackers = DamageControl::Tracker::Base.classes.collect {|cls| cls.new}
|
|
54
33
|
first_tracker = @trackers[0]
|
|
55
34
|
def first_tracker.selected?
|
|
56
35
|
true
|
|
57
36
|
end
|
|
37
|
+
|
|
58
38
|
@edit = true
|
|
59
39
|
@new_project = true
|
|
60
40
|
render_action("view")
|
|
@@ -88,25 +68,21 @@ class ProjectController < ApplicationController
|
|
|
88
68
|
end
|
|
89
69
|
|
|
90
70
|
def save
|
|
91
|
-
project
|
|
92
|
-
project.scm
|
|
93
|
-
project.tracker =
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
rescue => e
|
|
98
|
-
$stderr.puts(e.backtrace.join("\n"))
|
|
99
|
-
return render_text("Couldn't connect to RSCM server. Please make sure it's running.<br>" + e.message)
|
|
100
|
-
end
|
|
71
|
+
project = instantiate_from_hash(DamageControl::Project, @params[DamageControl::Project.name])
|
|
72
|
+
project.scm = find_selected("scms")
|
|
73
|
+
project.tracker = find_selected("trackers")
|
|
74
|
+
project.publishers = instantiate_array_from_hashes(@params["publishers"])
|
|
75
|
+
|
|
76
|
+
project.save
|
|
101
77
|
|
|
102
78
|
redirect_to(:action => "view", :id => project.name)
|
|
103
79
|
end
|
|
104
80
|
|
|
105
|
-
def
|
|
81
|
+
def changeset
|
|
106
82
|
load
|
|
107
|
-
|
|
108
|
-
@
|
|
109
|
-
@
|
|
83
|
+
changeset_identifier = @params["changeset"]
|
|
84
|
+
@changeset = @project.changeset(changeset_identifier.to_identifier)
|
|
85
|
+
@changeset.accept(HtmlDiffVisitor.new(@project))
|
|
110
86
|
end
|
|
111
87
|
|
|
112
88
|
protected
|
|
@@ -117,9 +93,6 @@ protected
|
|
|
117
93
|
@project = project
|
|
118
94
|
end
|
|
119
95
|
|
|
120
|
-
def visit_changesets(changesets)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
96
|
def visit_changeset(changeset)
|
|
124
97
|
@changeset = changeset
|
|
125
98
|
end
|
|
@@ -173,7 +146,7 @@ protected
|
|
|
173
146
|
# }
|
|
174
147
|
# end
|
|
175
148
|
|
|
176
|
-
if(@project.exists? && @project.scm &&
|
|
149
|
+
if(@project.exists? && @project.scm && @project.scm.can_create? && !@project.scm.exists?)
|
|
177
150
|
@sidebar_links << {
|
|
178
151
|
:controller => "scm",
|
|
179
152
|
:action => "create",
|
|
@@ -213,7 +186,7 @@ protected
|
|
|
213
186
|
}
|
|
214
187
|
end
|
|
215
188
|
|
|
216
|
-
if(@project.exists?)
|
|
189
|
+
if(@project.exists? && @project.tracker)
|
|
217
190
|
@sidebar_links << {
|
|
218
191
|
:href => @project.tracker.url,
|
|
219
192
|
:image => "/images/24x24/scroll_information.png",
|
|
@@ -250,17 +223,15 @@ private
|
|
|
250
223
|
def scm.selected?
|
|
251
224
|
true
|
|
252
225
|
end
|
|
226
|
+
# Make a dupe of the scm/tracker lists and substitute with project's value
|
|
227
|
+
@scms = RSCM::AbstractSCM.classes.collect {|cls| $stderr.puts "CLASS: #{cls.name}" ;cls.new}
|
|
228
|
+
@scms.each_index {|i| @scms[i] = @project.scm if @scms[i].class == @project.scm.class}
|
|
253
229
|
|
|
254
230
|
tracker = @project.tracker
|
|
255
231
|
def tracker.selected?
|
|
256
232
|
true
|
|
257
233
|
end
|
|
258
|
-
|
|
259
|
-
# Make a dupe of the scm/tracker lists and substitute with project's value
|
|
260
|
-
@scms = SCMS.collect {|o| o.new}
|
|
261
|
-
@scms.each_index {|i| @scms[i] = @project.scm if @scms[i].class == @project.scm.class}
|
|
262
|
-
|
|
263
|
-
@trackers = TRACKERS.collect {|o| o.new}
|
|
234
|
+
@trackers = DamageControl::Tracker::Base.classes.collect {|cls| cls.new}
|
|
264
235
|
@trackers.each_index {|i| @trackers[i] = @project.tracker if @trackers[i].class == @project.tracker.class}
|
|
265
236
|
|
|
266
237
|
@linkable_changesets = @project.changesets(@project.latest_changeset_identifier, 10)
|
|
@@ -268,17 +239,4 @@ private
|
|
|
268
239
|
|
|
269
240
|
set_sidebar_links
|
|
270
241
|
end
|
|
271
|
-
|
|
272
|
-
# Instantiates an object from parameters
|
|
273
|
-
def instantiate_from_params(param)
|
|
274
|
-
class_name = @params[param]
|
|
275
|
-
clazz = eval(class_name)
|
|
276
|
-
ob = clazz.new
|
|
277
|
-
attribs = @params[class_name] || {}
|
|
278
|
-
attribs.each do |k,v|
|
|
279
|
-
ob.send("#{k}=", v)
|
|
280
|
-
end
|
|
281
|
-
ob
|
|
282
|
-
end
|
|
283
|
-
|
|
284
242
|
end
|