hudson 0.3.0.beta.4 → 0.3.0.beta.5

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hudson (0.3.0.beta.3)
4
+ hudson (0.3.0.beta.5)
5
5
  builder (~> 2.1.2)
6
6
  hpricot
7
7
  httparty (~> 0.5.2)
@@ -56,7 +56,7 @@ DEPENDENCIES
56
56
  hudson!
57
57
  json (~> 1.4.0)
58
58
  rake (~> 0.8.7)
59
- rspec (~> 2.0.0.beta)
59
+ rspec (~> 2.0.0)
60
60
  term-ansicolor (>= 1.0.4)
61
61
  thor (= 0.14.2)
62
62
  yajl-ruby (>= 0.7.6)
@@ -31,3 +31,13 @@ Feature: Create jobs
31
31
  Given I am in the "ruby" project folder
32
32
  When I run local executable "hudson" with arguments "create . --host localhost --port 3010"
33
33
  Then I should see "Cannot determine project SCM. Currently supported:"
34
+
35
+ Scenario: Recreate job
36
+ Given I am in the "ruby" project folder
37
+ When I create a job
38
+ Then I should see "Added project 'ruby' to Hudson."
39
+ When I recreate a job
40
+ Then I should see "Added project 'ruby' to Hudson."
41
+
42
+
43
+
@@ -89,3 +89,13 @@ Then /^I should see a hudson server on port (\d+)$/ do |port|
89
89
  end
90
90
  end
91
91
 
92
+ When /^I (re|)create a job$/ do |override|
93
+ override = override.blank? ? "" : " --override"
94
+ steps <<-CUCUMBER
95
+ When the project uses "git" scm
96
+ When I run local executable "hudson" with arguments "create . --host localhost --port 3010#{override}"
97
+ CUCUMBER
98
+ end
99
+
100
+
101
+
@@ -1,10 +1,12 @@
1
1
  Given /^the project uses "git" scm$/ do
2
2
  repo = "git://some.host/drnic/ruby.git"
3
3
  in_project_folder do
4
- %x[ git init ]
5
- %x[ git add . ]
6
- %x[ git commit -m "initial commit" ]
7
- %x[ git remote add origin #{repo} ]
4
+ unless File.exist?(".git")
5
+ %x[ git init ]
6
+ %x[ git add . ]
7
+ %x[ git commit -m "initial commit" ]
8
+ %x[ git remote add origin #{repo} ]
9
+ end
8
10
  end
9
11
  end
10
12
 
data/hudson.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hudson}
5
- s.version = "0.3.0.beta.4"
5
+ s.version = "0.3.0.beta.5"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Charles Lowell", "Dr Nic Williams"]
data/lib/hudson.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Hudson
2
- VERSION = "0.3.0.beta.4"
2
+ VERSION = "0.3.0.beta.5"
3
3
  HUDSON_VERSION = "1.380"
4
4
  WAR = File.expand_path(File.dirname(__FILE__) + "/hudson/hudson.war")
5
5
  PLUGINS = File.expand_path(File.dirname(__FILE__) + "/hudson/plugins")
data/lib/hudson/api.rb CHANGED
@@ -12,6 +12,8 @@ module Hudson
12
12
  headers 'content-type' => 'application/json'
13
13
  format :json
14
14
  # http_proxy 'localhost', '8888'
15
+
16
+ JobAlreadyExistsError = Class.new(Exception)
15
17
 
16
18
  def self.setup_base_url(options)
17
19
  # Thor's HashWithIndifferentAccess is based on string keys which URI::HTTP.build ignores
@@ -26,7 +28,14 @@ module Hudson
26
28
  end
27
29
 
28
30
  # returns true if successfully create a new job on Hudson
29
- def self.create_job(name, job_config)
31
+ # +job_config+ is a Hudson::JobConfigBuilder instance
32
+ # +options+ are:
33
+ # :override - true, will delete any existing job with same name, else error
34
+ #
35
+ # returns true if successful, else false
36
+ #
37
+ # TODO Exceptions?
38
+ def self.create_job(name, job_config, options = {})
30
39
  res = post "/createItem/api/xml?name=#{CGI.escape(name)}", {
31
40
  :body => job_config.to_xml, :format => :xml, :headers => { 'content-type' => 'application/xml' }
32
41
  }
@@ -34,12 +43,27 @@ module Hudson
34
43
  cache_base_uri
35
44
  true
36
45
  else
37
- require "hpricot"
38
- puts "Server error:"
39
- puts Hpricot(res.body).search("//body").text
46
+ if res.body =~ /A job already exists with the name/
47
+ if options[:override]
48
+ delete_job(name)
49
+ return create_job(name, job_config)
50
+ else
51
+ raise JobAlreadyExistsError.new(name)
52
+ end
53
+ else
54
+ require "hpricot"
55
+ puts "Server error:"
56
+ puts Hpricot(res.body).search("//body").text
57
+ end
40
58
  false
41
59
  end
42
60
  end
61
+
62
+ # Attempts to delete a job +name+
63
+ def self.delete_job(name)
64
+ post "/job/#{name}/doDelete/api/json"
65
+ rescue Crack::ParseError
66
+ end
43
67
 
44
68
  def self.summary
45
69
  begin
data/lib/hudson/cli.rb CHANGED
@@ -49,6 +49,7 @@ module Hudson
49
49
  desc "create [project_path] [options]", "create a continuous build for your project"
50
50
  common_options
51
51
  method_option :name, :banner => "dir_name", :desc => "name of the build"
52
+ method_option :override, :desc => "override if job exists", :type => :boolean, :default => false
52
53
  def create(project_path = ".")
53
54
  select_hudson_server(options)
54
55
  FileUtils.chdir(project_path) do
@@ -59,7 +60,7 @@ module Hudson
59
60
  c.scm = scm.url
60
61
  end
61
62
  name = options[:name] || File.basename(FileUtils.pwd)
62
- if Hudson::Api.create_job(name, job_config)
63
+ if Hudson::Api.create_job(name, job_config, {:override => options[:override]})
63
64
  build_url = "#{@uri}/job/#{name.gsub(/\s/,'%20')}/build"
64
65
  puts "Added project '#{name}' to Hudson."
65
66
  puts "Trigger builds via: #{build_url}"
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hudson
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196379
4
+ hash: 62196377
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 0
10
10
  - beta
11
- - 4
12
- version: 0.3.0.beta.4
11
+ - 5
12
+ version: 0.3.0.beta.5
13
13
  platform: ruby
14
14
  authors:
15
15
  - Charles Lowell