heidi 0.3.1 → 0.4.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.
Files changed (72) hide show
  1. data/Gemfile +1 -0
  2. data/Gemfile.lock +3 -0
  3. data/README.rdoc +20 -0
  4. data/VERSION +1 -1
  5. data/bin/heidi +8 -82
  6. data/heidi.gemspec +49 -10
  7. data/lib/heidi.rb +4 -0
  8. data/lib/heidi/build.rb +42 -10
  9. data/lib/heidi/builder.rb +7 -2
  10. data/lib/heidi/hook.rb +2 -0
  11. data/lib/heidi/integrator.rb +11 -5
  12. data/lib/heidi/project.rb +37 -24
  13. data/lib/heidi/shell.rb +119 -0
  14. data/lib/heidi/tester.rb +6 -5
  15. data/lib/heidi/web.rb +65 -4
  16. data/lib/heidi/web/assets/css/bootstrap-responsive.css +643 -0
  17. data/lib/heidi/web/assets/css/bootstrap.css +3682 -0
  18. data/lib/heidi/web/{public/css/screen.css → assets/css/colors.css} +1 -75
  19. data/lib/heidi/web/assets/css/docs.css +772 -0
  20. data/lib/heidi/web/{public → assets}/images/HeidiBlue-480.png +0 -0
  21. data/lib/heidi/web/{public → assets}/images/HeidiBlue.gif +0 -0
  22. data/lib/heidi/web/{public → assets}/images/OrganisedMinds.png +0 -0
  23. data/lib/heidi/web/{public → assets}/images/heidi.jpeg +0 -0
  24. data/lib/heidi/web/assets/img/glyphicons-halflings-white.png +0 -0
  25. data/lib/heidi/web/assets/img/glyphicons-halflings.png +0 -0
  26. data/lib/heidi/web/assets/img/glyphicons/glyphicons_009_magic.png +0 -0
  27. data/lib/heidi/web/assets/img/glyphicons/glyphicons_042_group.png +0 -0
  28. data/lib/heidi/web/assets/img/glyphicons/glyphicons_079_podium.png +0 -0
  29. data/lib/heidi/web/assets/img/glyphicons/glyphicons_082_roundabout.png +0 -0
  30. data/lib/heidi/web/assets/img/glyphicons/glyphicons_155_show_thumbnails.png +0 -0
  31. data/lib/heidi/web/assets/img/glyphicons/glyphicons_163_iphone.png +0 -0
  32. data/lib/heidi/web/assets/img/glyphicons/glyphicons_214_resize_small.png +0 -0
  33. data/lib/heidi/web/assets/img/glyphicons/glyphicons_266_book_open.png +0 -0
  34. data/lib/heidi/web/assets/js/README.md +106 -0
  35. data/lib/heidi/web/assets/js/application.js +180 -0
  36. data/lib/heidi/web/assets/js/bootstrap-alert.js +94 -0
  37. data/lib/heidi/web/assets/js/bootstrap-button.js +100 -0
  38. data/lib/heidi/web/assets/js/bootstrap-carousel.js +157 -0
  39. data/lib/heidi/web/assets/js/bootstrap-collapse.js +136 -0
  40. data/lib/heidi/web/assets/js/bootstrap-dropdown.js +92 -0
  41. data/lib/heidi/web/assets/js/bootstrap-modal.js +210 -0
  42. data/lib/heidi/web/assets/js/bootstrap-popover.js +95 -0
  43. data/lib/heidi/web/assets/js/bootstrap-scrollspy.js +125 -0
  44. data/lib/heidi/web/assets/js/bootstrap-tab.js +130 -0
  45. data/lib/heidi/web/assets/js/bootstrap-tooltip.js +270 -0
  46. data/lib/heidi/web/assets/js/bootstrap-transition.js +51 -0
  47. data/lib/heidi/web/assets/js/bootstrap-typeahead.js +271 -0
  48. data/lib/heidi/web/assets/js/google-code-prettify/prettify.css +30 -0
  49. data/lib/heidi/web/assets/js/google-code-prettify/prettify.js +28 -0
  50. data/lib/heidi/web/assets/js/jquery.js +9252 -0
  51. data/lib/heidi/web/views/build.erb +40 -24
  52. data/lib/heidi/web/views/commit.erb +10 -7
  53. data/lib/heidi/web/views/config.erb +34 -18
  54. data/lib/heidi/web/views/home.erb +44 -25
  55. data/lib/heidi/web/views/layout.erb +57 -4
  56. data/lib/heidi/web/views/new_project.erb +56 -0
  57. data/lib/heidi/web/views/project.erb +114 -32
  58. data/lib/heidi/web/views/project_header.erb +20 -0
  59. data/spec/heidi/build_spec.rb +163 -2
  60. data/spec/heidi/builder_spec.rb +61 -1
  61. data/spec/heidi/hook_spec.rb +47 -1
  62. data/spec/heidi/integrator_spec.rb +96 -1
  63. data/spec/heidi/project_spec.rb +177 -2
  64. data/spec/heidi/shell_spec.rb +67 -0
  65. data/spec/heidi/web_spec.rb +78 -2
  66. data/spec/heidi_spec.rb +16 -5
  67. data/spec/spec_helper.rb +1 -1
  68. data/spec/support/01_rworld.rb +9 -0
  69. data/spec/support/mock_project.rb +39 -0
  70. data/spec/support/survivable.rb +10 -0
  71. metadata +131 -79
  72. data/spec/heidi/tester_spec.rb +0 -5
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gem "simple_shell"
6
6
 
7
7
  group :development do
8
8
  gem "rspec", "~> 2.8.0"
9
+ gem "rack-test", ">= 0"
9
10
  gem "rdoc", "~> 3.12"
10
11
  gem "bundler", "~> 1.0.0"
11
12
  gem "jeweler", "~> 1.8.3"
@@ -14,6 +14,8 @@ GEM
14
14
  rack (1.4.1)
15
15
  rack-protection (1.2.0)
16
16
  rack
17
+ rack-test (0.6.1)
18
+ rack (>= 1.0)
17
19
  rake (0.9.2.2)
18
20
  rcov (0.9.10)
19
21
  rdoc (3.12)
@@ -43,6 +45,7 @@ PLATFORMS
43
45
  DEPENDENCIES
44
46
  bundler (~> 1.0.0)
45
47
  jeweler (~> 1.8.3)
48
+ rack-test
46
49
  rcov
47
50
  rdoc (~> 3.12)
48
51
  rspec (~> 2.8.0)
@@ -79,6 +79,7 @@ following directories:
79
79
  - test/
80
80
  - success/
81
81
  - failure/
82
+ - after/
82
83
 
83
84
  If you place shell scripts in these directories and make them executable,
84
85
  these scripts will be executed inside the build directory at a given time.
@@ -89,6 +90,25 @@ these scripts will be executed inside the build directory at a given time.
89
90
  [success] Is run when the tests where performed in good order. Send huray
90
91
  emails here
91
92
  [failure] Is run when the tests failed. Send he-or-she-broke-it emails here.
93
+ [after] Runs after success or failure.
94
+
95
+ === Environment
96
+
97
+ Each hook is called with a Pretty-Clean-Environment. At the very least it is
98
+ made sure that you are not hindered by GemBundler.
99
+
100
+ How Heidi hooks hold up with RVM; I'm just not sure...
101
+
102
+ There is a number of Heidi variables passed into the hook as well
103
+
104
+ [$HEIDI_DIR] The project directory
105
+ [$HEIDI_LOG_DIR] The build's log directory (so you can write your own)
106
+ [$HEIDI_BUILD_DIR] The build root
107
+ [$HEIDI_BUILD_COMMIT] The abbrev. of the commit currently working on.
108
+
109
+ ==== Caveat
110
+
111
+ These environment variable might be subject to change in the (near) future
92
112
 
93
113
  == History
94
114
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
data/bin/heidi CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'simple_shell'
4
- require 'heidi'
3
+ require 'heidi/shell'
5
4
 
6
5
  cmd = ARGV.shift
7
6
  for_a = ARGV.shift
@@ -12,32 +11,14 @@ if ENV['HEIDI_PATH']
12
11
  ENV['HEIDI_PATH'] = nil
13
12
  end
14
13
 
15
- shell = SimpleShell.new
16
14
 
17
- def check_heidi_root()
18
- if !File.exists?("./projects") && File.directory?("./projects")
19
- $stderr.puts "You're not inside Heidi"
20
- exit 1
21
- end
22
- end
15
+
16
+ include Heidi::Shell
17
+ noisy
23
18
 
24
19
  case cmd
25
20
  when "new"
26
- puts "creating #{for_a}/"
27
- puts "creating #{for_a}/projects"
28
- shell.mkdir %W(-p #{for_a}/projects)
29
- shell.mkdir %W(-p #{for_a}/bin)
30
- puts "creating #{for_a}/Gemfile"
31
- File.open("#{for_a}/Gemfile", File::CREAT|File::WRONLY) do |f|
32
- f.puts 'source "http://rubygems.org"'
33
- f.puts 'gem "heidi"'
34
- end
35
-
36
- puts "\nIf you like you can run: bundle install --binstubs"
37
- puts "this will tie heidi and heidi_web to this location"
38
- puts "\nFor even more tying down, run: bundle install --deployment"
39
- puts "after running bundle install --binstubs"
40
-
21
+ new_heidi_root(for_a)
41
22
 
42
23
  when "project"
43
24
  repo = ARGV.shift
@@ -48,69 +29,14 @@ when "project"
48
29
  end
49
30
 
50
31
  check_heidi_root
32
+ new_project(for_a, repo)
51
33
 
52
- if File.exists? "projects/#{for_a}"
53
- $stderr.puts "projects/#{for_a} is in the way. Please remove it"
54
- exit 1
55
- end
56
-
57
- # create a logs dir
58
- puts "creating projects/#{for_a}"
59
- puts "creating projects/#{for_a}/logs"
60
- shell.mkdir %W(-p projects/#{for_a}/logs)
61
-
62
- %w(build tests failure success before).each do |hook|
63
- puts "creating projects/#{for_a}/hooks/#{hook}"
64
- shell.mkdir %W(-p projects/#{for_a}/hooks/#{hook})
65
- end
66
-
67
- # make a clone
68
- shell.in("projects/#{for_a}") do |sh|
69
- puts "filling #{for_a} cache"
70
-
71
- puts "git clone #{repo}"
72
- sh.git %W(clone #{repo} cached)
73
-
74
- sh.in("cached") do |cached|
75
- puts "setting the name of the project to: #{for_a}"
76
- cached.git %W(config heidi.name #{for_a})
77
- end
78
- end
79
- puts "Creating default test hook: projects/#{for_a}/hooks/tests/01_rspec"
80
- File.open("projects/#{for_a}/hooks/tests/01_rspec", File::CREAT|File::WRONLY) do |f|
81
- f.puts %q(#!/bin/sh
82
-
83
- # edit this file to your needs
84
- bundle exec rake spec
85
- )
86
- end
87
- shell.chmod %W(+x projects/#{for_a}/hooks/tests/01_rspec)
88
- puts "\n"
89
- puts "Now edit or add some hooks and run: heidi integrate #{for_a}"
90
34
 
91
35
  when "drop"
92
36
  check_heidi_root
93
-
94
- # remove build and cache dir, expose logs directly
95
- puts "removing build dir"
96
- shell.rm %W(-r projects/#{for_a}/build)
97
- puts "removing cache (preserving project config)"
98
- shell.cp %W(-pr projects/#{for_a}/cached/.git/config projects/#{for_a})
99
- shell.rm %W(-r projects/#{for_a}/cached)
100
- puts "exposing builds"
101
- shell.mv %W(projects/#{for_a}/logs/* projects/#{for_a}/)
102
- shell.rm %W(-r projects/#{for_a}/logs)
37
+ remove_project(for_a)
103
38
 
104
39
  when "integrate"
105
- heidi = Heidi.new
106
- heidi.projects.each do |project|
107
- next if !for_a.nil? && project.name != for_a
108
-
109
- project.fetch
110
- msg = project.integrate(!for_a.nil?)
111
- unless msg.nil? || msg == true
112
- $stderr.puts "#{project.name}: #{msg}"
113
- end
114
- end
40
+ integrate(for_a)
115
41
 
116
42
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "heidi"
8
- s.version = "0.3.1"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Hartog C. de Mik"]
12
- s.date = "2012-02-15"
12
+ s.date = "2012-03-01"
13
13
  s.description = "CI-Joe alike CI system called Heidi."
14
14
  s.email = "hartog@organisedminds.com"
15
15
  s.executables = ["heidi", "heidi_web"]
@@ -36,34 +36,70 @@ Gem::Specification.new do |s|
36
36
  "lib/heidi/hook.rb",
37
37
  "lib/heidi/integrator.rb",
38
38
  "lib/heidi/project.rb",
39
+ "lib/heidi/shell.rb",
39
40
  "lib/heidi/tester.rb",
40
41
  "lib/heidi/web.rb",
41
- "lib/heidi/web/public/css/screen.css",
42
- "lib/heidi/web/public/images/HeidiBlue-480.png",
43
- "lib/heidi/web/public/images/HeidiBlue.gif",
44
- "lib/heidi/web/public/images/OrganisedMinds.png",
45
- "lib/heidi/web/public/images/heidi.jpeg",
42
+ "lib/heidi/web/assets/css/bootstrap-responsive.css",
43
+ "lib/heidi/web/assets/css/bootstrap.css",
44
+ "lib/heidi/web/assets/css/colors.css",
45
+ "lib/heidi/web/assets/css/docs.css",
46
+ "lib/heidi/web/assets/images/HeidiBlue-480.png",
47
+ "lib/heidi/web/assets/images/HeidiBlue.gif",
48
+ "lib/heidi/web/assets/images/OrganisedMinds.png",
49
+ "lib/heidi/web/assets/images/heidi.jpeg",
50
+ "lib/heidi/web/assets/img/glyphicons-halflings-white.png",
51
+ "lib/heidi/web/assets/img/glyphicons-halflings.png",
52
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_009_magic.png",
53
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_042_group.png",
54
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_079_podium.png",
55
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_082_roundabout.png",
56
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_155_show_thumbnails.png",
57
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_163_iphone.png",
58
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_214_resize_small.png",
59
+ "lib/heidi/web/assets/img/glyphicons/glyphicons_266_book_open.png",
60
+ "lib/heidi/web/assets/js/README.md",
61
+ "lib/heidi/web/assets/js/application.js",
62
+ "lib/heidi/web/assets/js/bootstrap-alert.js",
63
+ "lib/heidi/web/assets/js/bootstrap-button.js",
64
+ "lib/heidi/web/assets/js/bootstrap-carousel.js",
65
+ "lib/heidi/web/assets/js/bootstrap-collapse.js",
66
+ "lib/heidi/web/assets/js/bootstrap-dropdown.js",
67
+ "lib/heidi/web/assets/js/bootstrap-modal.js",
68
+ "lib/heidi/web/assets/js/bootstrap-popover.js",
69
+ "lib/heidi/web/assets/js/bootstrap-scrollspy.js",
70
+ "lib/heidi/web/assets/js/bootstrap-tab.js",
71
+ "lib/heidi/web/assets/js/bootstrap-tooltip.js",
72
+ "lib/heidi/web/assets/js/bootstrap-transition.js",
73
+ "lib/heidi/web/assets/js/bootstrap-typeahead.js",
74
+ "lib/heidi/web/assets/js/google-code-prettify/prettify.css",
75
+ "lib/heidi/web/assets/js/google-code-prettify/prettify.js",
76
+ "lib/heidi/web/assets/js/jquery.js",
46
77
  "lib/heidi/web/views/build.erb",
47
78
  "lib/heidi/web/views/commit.erb",
48
79
  "lib/heidi/web/views/config.erb",
49
80
  "lib/heidi/web/views/home.erb",
50
81
  "lib/heidi/web/views/layout.erb",
82
+ "lib/heidi/web/views/new_project.erb",
51
83
  "lib/heidi/web/views/project.erb",
84
+ "lib/heidi/web/views/project_header.erb",
52
85
  "spec/heidi/build_spec.rb",
53
86
  "spec/heidi/builder_spec.rb",
54
87
  "spec/heidi/git_spec.rb",
55
88
  "spec/heidi/hook_spec.rb",
56
89
  "spec/heidi/integrator_spec.rb",
57
90
  "spec/heidi/project_spec.rb",
58
- "spec/heidi/tester_spec.rb",
91
+ "spec/heidi/shell_spec.rb",
59
92
  "spec/heidi/web_spec.rb",
60
93
  "spec/heidi_spec.rb",
61
- "spec/spec_helper.rb"
94
+ "spec/spec_helper.rb",
95
+ "spec/support/01_rworld.rb",
96
+ "spec/support/mock_project.rb",
97
+ "spec/support/survivable.rb"
62
98
  ]
63
99
  s.homepage = "http://github.com/coffeeaddict/heid"
64
100
  s.licenses = ["MIT"]
65
101
  s.require_paths = ["lib"]
66
- s.rubygems_version = "1.8.10"
102
+ s.rubygems_version = "1.8.16"
67
103
  s.summary = "A naive CI system"
68
104
 
69
105
  if s.respond_to? :specification_version then
@@ -74,6 +110,7 @@ Gem::Specification.new do |s|
74
110
  s.add_runtime_dependency(%q<sinatra>, [">= 0"])
75
111
  s.add_runtime_dependency(%q<simple_shell>, [">= 0"])
76
112
  s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
113
+ s.add_development_dependency(%q<rack-test>, [">= 0"])
77
114
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
78
115
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
79
116
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
@@ -83,6 +120,7 @@ Gem::Specification.new do |s|
83
120
  s.add_dependency(%q<sinatra>, [">= 0"])
84
121
  s.add_dependency(%q<simple_shell>, [">= 0"])
85
122
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
123
+ s.add_dependency(%q<rack-test>, [">= 0"])
86
124
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
87
125
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
88
126
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
@@ -93,6 +131,7 @@ Gem::Specification.new do |s|
93
131
  s.add_dependency(%q<sinatra>, [">= 0"])
94
132
  s.add_dependency(%q<simple_shell>, [">= 0"])
95
133
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
134
+ s.add_dependency(%q<rack-test>, [">= 0"])
96
135
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
97
136
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
98
137
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
@@ -4,6 +4,10 @@ require 'simple_shell'
4
4
  require 'heidi/project'
5
5
 
6
6
  class Heidi
7
+ PASSED = "passed"
8
+ FAILED = "failed"
9
+ DNF = "DNF"
10
+
7
11
  attr_reader :projects
8
12
 
9
13
  def initialize(root=Dir.pwd)
@@ -8,6 +8,9 @@ class Heidi
8
8
  # A build is tied to a commit
9
9
  #
10
10
  class Build
11
+ FAILURE = "FAILURE"
12
+ SUCCESS = "SUCCESS"
13
+
11
14
  attr_reader :project, :commit, :root, :log_root, :build_root, :shell,
12
15
  :hooks, :logs
13
16
 
@@ -26,6 +29,8 @@ class Heidi
26
29
 
27
30
  @shell.mkdir %W(-p #{@log_root}) unless File.exists?(@log_root)
28
31
  @logs = Logs.new(@log_root)
32
+
33
+ @i_locked_build = false
29
34
  end
30
35
 
31
36
  def author
@@ -36,6 +41,16 @@ class Heidi
36
41
  project.date(@commit)
37
42
  end
38
43
 
44
+ def message
45
+ project.message(@commit)
46
+ end
47
+
48
+ def time
49
+ Time.parse(date)
50
+ rescue
51
+ Time.now
52
+ end
53
+
39
54
  def load_hooks
40
55
  log :info, "Loading hooks"
41
56
  @hooks = {
@@ -77,7 +92,7 @@ class Heidi
77
92
  shell.mv %W(#{@log_root} #{@log_root}.0)
78
93
  end
79
94
 
80
- %w(build/ SUCCESS FAILURE).each do |inode|
95
+ %W(build/ #{SUCCESS} #{FAILURE}).each do |inode|
81
96
  shell.rm("-r", "-f", inode) if File.exists? File.join(@root, inode)
82
97
  end
83
98
 
@@ -103,9 +118,11 @@ class Heidi
103
118
  def lock(&block)
104
119
  log(:info, "Locking build")
105
120
  File.open(lock_file, File::CREAT|File::TRUNC|File::WRONLY) do |f|
121
+ @i_locked_build = true
106
122
  f.puts Time.now.ctime
107
123
  end
108
124
 
125
+
109
126
  if block_given?
110
127
  yield
111
128
  unlock
@@ -116,23 +133,28 @@ class Heidi
116
133
  return unless locked?
117
134
  log(:info, "Unlocking build")
118
135
  File.unlink lock_file
136
+ @i_locked_build = false
119
137
  end
120
138
 
121
139
  def locked?
122
140
  File.exists? lock_file
123
141
  end
124
142
 
143
+ def locked_build?
144
+ @i_locked_build == true ? true : false
145
+ end
146
+
125
147
  def record(what)
126
148
  flags = File::CREAT|File::TRUNC|File::WRONLY
127
149
  file = nil
128
150
  case what
129
151
  when :failure
130
- project.build_status = "failed"
131
- file = File.open(File.join(@root, "FAILURE"), flags)
152
+ project.build_status = Heidi::FAILED
153
+ file = File.open(File.join(@root, FAILURE), flags)
132
154
  when :success
133
- project.build_status = "passed"
155
+ project.build_status = Heidi::PASSED
134
156
  project.record_latest_build
135
- file = File.open(File.join(@root, "SUCCESS"), flags)
157
+ file = File.open(File.join(@root, SUCCESS), flags)
136
158
  end
137
159
 
138
160
  unless file.nil?
@@ -142,19 +164,19 @@ class Heidi
142
164
  end
143
165
 
144
166
  def failed?
145
- File.exists?(File.join(@root, "FAILURE"))
167
+ File.exists?(File.join(@root, FAILURE))
146
168
  end
147
169
 
148
170
  def success?
149
- File.exists?(File.join(@root, "SUCCESS"))
171
+ File.exists?(File.join(@root, SUCCESS))
150
172
  end
151
173
 
152
174
  def status
153
175
  self.failed? ?
154
- "failed" :
176
+ Heidi::FAILED :
155
177
  self.success? ?
156
- "passed" :
157
- "DNF"
178
+ Heidi::PASSED :
179
+ Heidi::DNF
158
180
  end
159
181
 
160
182
  # file handle to tar ball
@@ -170,6 +192,8 @@ class Heidi
170
192
  @log_root = log_root
171
193
  @logs = []
172
194
 
195
+ FileUtils.mkdir_p log_root if !File.directory?(log_root)
196
+
173
197
  Dir[File.join(@log_root, "*")].each do |file|
174
198
  @logs << Log.new(file)
175
199
  end
@@ -205,6 +229,14 @@ class Heidi
205
229
  f.puts msg
206
230
  end
207
231
  end
232
+
233
+ read
234
+ end
235
+
236
+ def read
237
+ @contents = File.read(@file)
238
+ rescue
239
+ @contents = ""
208
240
  end
209
241
 
210
242
  def raw(msg)
@@ -15,6 +15,11 @@ class Heidi
15
15
  end
16
16
 
17
17
  def setup_build_dir
18
+ if build.locked? and !build.locked_build?
19
+ build.log(:error, "The build was locked externaly")
20
+ return false
21
+ end
22
+
18
23
  if File.exists? build.build_root
19
24
  build.log(:info, "Removing previous build")
20
25
  build.shell.do "rm", "-r", build.build_root
@@ -28,10 +33,10 @@ class Heidi
28
33
  return false
29
34
  end
30
35
 
31
- if project.integration_branch
36
+ if project.branch
32
37
  @git = Heidi::Git.new(build.build_root)
33
38
 
34
- branch = project.integration_branch
39
+ branch = project.branch
35
40
  build.log(:info, "Switching to integration branch: #{branch}")
36
41
  res = @git.switch(branch)
37
42
  if res.nil?