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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'rscm/annotations'
|
|
2
|
+
require 'damagecontrol/project'
|
|
3
|
+
|
|
4
|
+
module DamageControl
|
|
5
|
+
module Publisher
|
|
6
|
+
|
|
7
|
+
# Base class for publishers. Subclasses must extend this class and call register self.
|
|
8
|
+
class Base
|
|
9
|
+
|
|
10
|
+
attr_accessor :enabled
|
|
11
|
+
|
|
12
|
+
@@classes = []
|
|
13
|
+
def self.register(cls)
|
|
14
|
+
@@classes << cls unless @@classes.index(cls)
|
|
15
|
+
end
|
|
16
|
+
def self.classes
|
|
17
|
+
@@classes
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Dir[File.dirname(__FILE__) + "/*.rb"].each do |src|
|
|
21
|
+
load(src) unless File.expand_path(src) == File.expand_path(__FILE__)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'action_mailer'
|
|
2
|
+
require 'damagecontrol/publisher/base'
|
|
3
|
+
|
|
4
|
+
module DamageControl
|
|
5
|
+
module Publisher
|
|
6
|
+
class Email < Base
|
|
7
|
+
register self
|
|
8
|
+
|
|
9
|
+
attr_accessor :enabled
|
|
10
|
+
|
|
11
|
+
ann :description => "How to deliver email [\"sendmail\"|\"smtp\"]"
|
|
12
|
+
attr_accessor :delivery_method
|
|
13
|
+
|
|
14
|
+
ann :description => "Recipients (comma separated)"
|
|
15
|
+
attr_accessor :to
|
|
16
|
+
|
|
17
|
+
ann :description => "Who sends the email"
|
|
18
|
+
attr_accessor :from
|
|
19
|
+
|
|
20
|
+
def initialize
|
|
21
|
+
@delivery_method = "sendmail"
|
|
22
|
+
@to = ""
|
|
23
|
+
@from = "\"DamageControl\" <dcontrol@codehaus.org>"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def name
|
|
27
|
+
"Email"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def publish(build)
|
|
31
|
+
BuildMailer.template_root = File.expand_path(File.dirname(__FILE__) + "/../../../app/views")
|
|
32
|
+
BuildMailer.delivery_method = @delivery_method
|
|
33
|
+
BuildMailer.deliver_email(build, self)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class BuildMailer < ActionMailer::Base
|
|
38
|
+
def email(build, email_publisher, foo=nil, bar=nil)
|
|
39
|
+
@delivery_method = email_publisher.delivery_method
|
|
40
|
+
Log.info("Sending email to #{email_publisher.to.inspect} via #{@delivery_method}")
|
|
41
|
+
@recipients = email_publisher.to.split(%r{,\s*})
|
|
42
|
+
|
|
43
|
+
@from = email_publisher.from
|
|
44
|
+
|
|
45
|
+
@subject = "#{build.project.name} Build #{build.status_message}"
|
|
46
|
+
@sent_on = Time.new.utc
|
|
47
|
+
@headers['Content-Type'] = "text/html"
|
|
48
|
+
@body["build"] = build
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# We have to define this, since our name is used to find the email template
|
|
52
|
+
class << self
|
|
53
|
+
def to_s
|
|
54
|
+
"Build"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'rscm/path_converter' #TODO: move safer_popen to popen_ext.rb
|
|
3
|
+
require 'damagecontrol/publisher/base'
|
|
4
|
+
|
|
5
|
+
module DamageControl
|
|
6
|
+
|
|
7
|
+
class Build
|
|
8
|
+
def execute_publisher_stdout
|
|
9
|
+
File.expand_path("#{execute_publisher_dir}/stdout.log")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def execute_publisher_stderr
|
|
13
|
+
File.expand_path("#{execute_publisher_dir}/stderr.log")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def execute_publisher_dir
|
|
17
|
+
File.expand_path("#{dir}/execute_publisher")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module Publisher
|
|
22
|
+
class Execute < Base
|
|
23
|
+
#register self
|
|
24
|
+
|
|
25
|
+
ann :description => "Command line"
|
|
26
|
+
ann :tip => "Stdout and stderr for the command will be made available on the build page. Don't redirect streams."
|
|
27
|
+
attr_accessor :command_line
|
|
28
|
+
|
|
29
|
+
ann :description => "Directory"
|
|
30
|
+
ann :tip => "Relative directory (under checkout directory) where the command will be executed."
|
|
31
|
+
attr_accessor :command_line
|
|
32
|
+
|
|
33
|
+
def initialize
|
|
34
|
+
@command_line = "echo \"The build label is $DAMAGECONTROL_BUILD_LABEL\""
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def name
|
|
38
|
+
"Execute"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def publish(build)
|
|
42
|
+
FileUtils.mkdir_p(build.execute_publisher_dir)
|
|
43
|
+
safer_popen("{@command_line} > \"#{build.execute_publisher_stdout}\" 2> \"#{build.execute_publisher_stderr}\"") do |io|
|
|
44
|
+
io.read
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'damagecontrol/publisher/base'
|
|
2
|
+
require 'ruby-growl'
|
|
3
|
+
|
|
4
|
+
module DamageControl
|
|
5
|
+
module Publisher
|
|
6
|
+
class Growl < Base
|
|
7
|
+
register self
|
|
8
|
+
|
|
9
|
+
NOTIFICATION_TYPES = ["Build Successful", "Build Failed"] unless defined? NOTIFICATION_TYPES
|
|
10
|
+
|
|
11
|
+
ann :description => "Hosts", :tip => "Comma-separated list of (OS X) hosts that will receive Growl notifications. Requires Growl 0.6 or later."
|
|
12
|
+
attr_reader :hosts
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
@hosts = "localhost"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def name
|
|
19
|
+
"Growl"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def publish(build)
|
|
23
|
+
message = nil
|
|
24
|
+
index = nil
|
|
25
|
+
if(build.successful?)
|
|
26
|
+
message = "#{build.status_message} build (by #{build.changeset.developer})"
|
|
27
|
+
index = 0
|
|
28
|
+
else
|
|
29
|
+
message = "#{build.changeset.developer} broke the build"
|
|
30
|
+
index = 1
|
|
31
|
+
end
|
|
32
|
+
@hosts.split(%r{,\s*}).each do |host|
|
|
33
|
+
begin
|
|
34
|
+
g = ::Growl.new(host, "DamageControl (#{build.project.name})", NOTIFICATION_TYPES)
|
|
35
|
+
# A bug in Ruby-Growl (or Growl) prevents the message from being sticky.
|
|
36
|
+
g.notify(NOTIFICATION_TYPES[index], build.project.name, message, 0, true)
|
|
37
|
+
rescue Exception => e
|
|
38
|
+
Log.info("Growl publisher failed to notify #{host}: #{e.message}")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'damagecontrol/publisher/base'
|
|
2
|
+
|
|
3
|
+
module DamageControl
|
|
4
|
+
module Publisher
|
|
5
|
+
class Irc < Base
|
|
6
|
+
#register self
|
|
7
|
+
|
|
8
|
+
ann :description => "IRC server"
|
|
9
|
+
attr_reader :server
|
|
10
|
+
|
|
11
|
+
ann :description => "IRC notification channel"
|
|
12
|
+
attr_reader :channel
|
|
13
|
+
|
|
14
|
+
ann :description => "DamageControl's IRC nick"
|
|
15
|
+
attr_reader :nick
|
|
16
|
+
|
|
17
|
+
def initialize
|
|
18
|
+
@server = "irc.codehaus.org"
|
|
19
|
+
@channel = "#xxxxxx"
|
|
20
|
+
@nick = "dcontrol"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def name
|
|
24
|
+
"IRC"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def publish(build)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'damagecontrol/publisher/base'
|
|
2
|
+
require 'jabber4r/jabber4r'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module DamageControl
|
|
6
|
+
module Publisher
|
|
7
|
+
class Jabber < Base
|
|
8
|
+
register self
|
|
9
|
+
|
|
10
|
+
ann :description => "DamageControl Jabber Id/Resource"
|
|
11
|
+
attr_reader :id_resource
|
|
12
|
+
|
|
13
|
+
ann :description => "DamageControl Jabber Password"
|
|
14
|
+
attr_reader :password
|
|
15
|
+
|
|
16
|
+
ann :description => "DamageControl's Friends"
|
|
17
|
+
attr_reader :friends
|
|
18
|
+
|
|
19
|
+
def initialize
|
|
20
|
+
@id_resource = "damagecontrol@jabber.codehaus.org/damagecontrol"
|
|
21
|
+
@friends = "aslak@jabber.codehaus.org"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def name
|
|
25
|
+
"Jabber"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def publish(build)
|
|
29
|
+
session = nil
|
|
30
|
+
begin
|
|
31
|
+
session = login
|
|
32
|
+
message = nil
|
|
33
|
+
if(build.successful?)
|
|
34
|
+
message = "#{build.project.name}: #{build.status_message} build (by #{build.changeset.developer})"
|
|
35
|
+
else
|
|
36
|
+
message = "#{build.project.name}: #{build.changeset.developer} broke the build"
|
|
37
|
+
end
|
|
38
|
+
@friends.split(%r{,\s*}).each do |friend|
|
|
39
|
+
begin
|
|
40
|
+
session.new_message(friend).set_subject(message).set_body(message).send
|
|
41
|
+
rescue Exception => e
|
|
42
|
+
Log.error "Failed to send Jabber message to #{friend}"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
ensure
|
|
46
|
+
session.release if session
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
# Logs in and tries to register (and log in again) if login fails
|
|
53
|
+
def login(register_if_login_fails=true)
|
|
54
|
+
begin
|
|
55
|
+
session = ::Jabber::Session.bind(@id_resource, @password)
|
|
56
|
+
rescue
|
|
57
|
+
if(register_if_login_fails)
|
|
58
|
+
if(::Jabber::Session.register(@id_resource, @password))
|
|
59
|
+
login(false)
|
|
60
|
+
else
|
|
61
|
+
raise "Failed to register #{@id_resource}"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'damagecontrol/publisher/base'
|
|
2
|
+
|
|
3
|
+
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/124460
|
|
4
|
+
module DamageControl
|
|
5
|
+
module Publisher
|
|
6
|
+
class X10Cm11A < Base
|
|
7
|
+
#register self
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"X10-CM11A"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def publish(build)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'damagecontrol/publisher/base'
|
|
2
|
+
|
|
3
|
+
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/124460
|
|
4
|
+
module DamageControl
|
|
5
|
+
module Publisher
|
|
6
|
+
class X10Cm17A < Base
|
|
7
|
+
#register self
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"X10-CM17A"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def publish(build)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -33,9 +33,9 @@ module DamageControl
|
|
|
33
33
|
File.open(project.changesets_rss_file, "w") do |io|
|
|
34
34
|
rss_writer = DamageControl::Visitor::RssWriter.new(
|
|
35
35
|
rss,
|
|
36
|
-
"Changesets for #{
|
|
36
|
+
"Changesets for #{project.name}",
|
|
37
37
|
"http://localhost:4712/", # TODO point to web version of changeset
|
|
38
|
-
project.
|
|
38
|
+
project.name,
|
|
39
39
|
project.tracker || Tracker::Null.new,
|
|
40
40
|
project.scm_web || SCMWeb::Null.new
|
|
41
41
|
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'rscm/path_converter'
|
|
2
|
+
require 'rscm/annotations'
|
|
2
3
|
|
|
3
4
|
module DamageControl
|
|
4
5
|
module Tracker
|
|
@@ -6,12 +7,23 @@ module DamageControl
|
|
|
6
7
|
# Simple superclass so we can easily include mixins
|
|
7
8
|
# for all subclasses in one fell swoop.
|
|
8
9
|
class Base #:nodoc:
|
|
10
|
+
@@classes = []
|
|
11
|
+
def self.register(cls)
|
|
12
|
+
@@classes << cls unless @@classes.index(cls)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.classes
|
|
16
|
+
@@classes
|
|
17
|
+
end
|
|
18
|
+
|
|
9
19
|
def htmlize(str)
|
|
10
20
|
str.gsub(/\n/, "<br>")
|
|
11
21
|
end
|
|
12
22
|
end
|
|
13
23
|
|
|
14
24
|
class Null < Base
|
|
25
|
+
register self
|
|
26
|
+
|
|
15
27
|
def name
|
|
16
28
|
"No Tracker"
|
|
17
29
|
end
|
|
@@ -27,9 +39,12 @@ module DamageControl
|
|
|
27
39
|
end
|
|
28
40
|
|
|
29
41
|
class Bugzilla < Base
|
|
42
|
+
register self
|
|
43
|
+
|
|
44
|
+
ann :description => "Bugzilla URL", :tip => "The URL of the Bugzilla installation."
|
|
30
45
|
attr_accessor :url
|
|
31
46
|
|
|
32
|
-
def initialize(url=
|
|
47
|
+
def initialize(url="http://bugzilla.org/")
|
|
33
48
|
@url = url
|
|
34
49
|
end
|
|
35
50
|
|
|
@@ -48,9 +63,12 @@ module DamageControl
|
|
|
48
63
|
end
|
|
49
64
|
|
|
50
65
|
class Trac < Base
|
|
66
|
+
register self
|
|
67
|
+
|
|
68
|
+
ann :description => "Trac URL", :tip => "The URL of the Trac installation. This URL should include no trailing slash. Example: http://my.trac.home/cgi-bin/trac.cgi"
|
|
51
69
|
attr_accessor :url
|
|
52
70
|
|
|
53
|
-
def initialize(url=
|
|
71
|
+
def initialize(url="http://trac.org/")
|
|
54
72
|
@url = url
|
|
55
73
|
end
|
|
56
74
|
|
|
@@ -69,10 +87,15 @@ module DamageControl
|
|
|
69
87
|
end
|
|
70
88
|
|
|
71
89
|
class JIRA < Base
|
|
90
|
+
register self
|
|
91
|
+
|
|
92
|
+
ann :description => "Base URL", :tip => "The base URL of the JIRA installation (not the URL to the specific JIRA project)."
|
|
72
93
|
attr_accessor :baseurl
|
|
94
|
+
|
|
95
|
+
ann :description => "Project id", :tip => "The id of the project - example: 'DC'"
|
|
73
96
|
attr_accessor :project_id
|
|
74
97
|
|
|
75
|
-
def initialize(baseurl=
|
|
98
|
+
def initialize(baseurl="http://jira.codehaus.org/", project_id="")
|
|
76
99
|
@baseurl, @project_id = baseurl, project_id
|
|
77
100
|
end
|
|
78
101
|
|
|
@@ -95,12 +118,19 @@ module DamageControl
|
|
|
95
118
|
end
|
|
96
119
|
|
|
97
120
|
class SourceForge < Base
|
|
121
|
+
register self
|
|
122
|
+
|
|
98
123
|
PATTERN = /#([0-9]+)/
|
|
99
124
|
|
|
125
|
+
ann :description => "Project id"
|
|
126
|
+
ann :tip => "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>"
|
|
100
127
|
attr_accessor :group_id
|
|
128
|
+
|
|
129
|
+
ann :description => "Tracker id"
|
|
130
|
+
ann :tip => "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>."
|
|
101
131
|
attr_accessor :tracker_id
|
|
102
132
|
|
|
103
|
-
def initialize(group_id=
|
|
133
|
+
def initialize(group_id="", tracker_id="")
|
|
104
134
|
@group_id, @tracker_id = group_id, tracker_id
|
|
105
135
|
end
|
|
106
136
|
|
|
@@ -118,8 +148,15 @@ module DamageControl
|
|
|
118
148
|
end
|
|
119
149
|
|
|
120
150
|
class RubyForge < SourceForge
|
|
151
|
+
register self
|
|
152
|
+
|
|
153
|
+
ann :description => "Project id"
|
|
154
|
+
ann :tip => "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>."
|
|
155
|
+
attr_accessor :group_id
|
|
121
156
|
|
|
122
|
-
|
|
157
|
+
ann :description => "Tracker id"
|
|
158
|
+
ann :tip => "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>."
|
|
159
|
+
attr_accessor :tracker_id
|
|
123
160
|
|
|
124
161
|
def name
|
|
125
162
|
"RubyForge"
|
|
@@ -135,10 +172,15 @@ module DamageControl
|
|
|
135
172
|
end
|
|
136
173
|
|
|
137
174
|
class Scarab < Base
|
|
175
|
+
register self
|
|
176
|
+
|
|
177
|
+
ann :description => "Base URL", :tip => "The URL of the Scarab installation."
|
|
138
178
|
attr_accessor :baseurl
|
|
179
|
+
|
|
180
|
+
ann :description => "Scarab Module", :tip => "The Scarab Module key."
|
|
139
181
|
attr_accessor :module_key
|
|
140
182
|
|
|
141
|
-
def initialize(baseurl=
|
|
183
|
+
def initialize(baseurl="http://scarab.org/", module_key="")
|
|
142
184
|
@baseurl, @module_key = baseurl, module_key
|
|
143
185
|
end
|
|
144
186
|
|