buildbox 0.5 → 0.6.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile.lock +17 -5
  4. data/buildbox.gemspec +2 -0
  5. data/lib/buildbox.rb +2 -0
  6. data/lib/buildbox/agent.rb +26 -4
  7. data/lib/buildbox/api.rb +10 -2
  8. data/lib/buildbox/artifact.rb +62 -0
  9. data/lib/buildbox/runner.rb +12 -6
  10. data/lib/buildbox/uploader.rb +39 -0
  11. data/lib/buildbox/version.rb +1 -1
  12. data/spec/buildbox/buildbox/artifact_spec.rb +42 -0
  13. data/spec/fixtures/artifact-globber/bar/bang.txt +0 -0
  14. data/spec/fixtures/artifact-globber/bar/bang1.txt +0 -0
  15. data/spec/fixtures/artifact-globber/bar/bang2.txt +0 -0
  16. data/spec/fixtures/artifact-globber/bar/inside-bar/bang3.txt +0 -0
  17. data/spec/fixtures/artifact-globber/bar/not_a_bang.rb +0 -0
  18. data/spec/fixtures/artifact-globber/coverage/.last_run.json +5 -0
  19. data/spec/fixtures/artifact-globber/coverage/.resultset.json +934 -0
  20. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/application.css +799 -0
  21. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/application.js +1559 -0
  22. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/colorbox/border.png +0 -0
  23. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  24. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  25. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  26. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/favicon_green.png +0 -0
  27. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/favicon_red.png +0 -0
  28. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  29. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/loading.gif +0 -0
  30. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/magnify.png +0 -0
  31. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  32. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  33. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  34. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  35. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  36. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  37. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  38. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  39. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  40. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  41. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  42. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  43. data/spec/fixtures/artifact-globber/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  44. data/spec/fixtures/artifact-globber/coverage/index.html +5842 -0
  45. data/spec/fixtures/artifact-globber/foo.txt +0 -0
  46. data/spec/spec_helper.rb +4 -0
  47. metadata +102 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1cb997396df43172b702216104df4b406fa1a0e7
4
- data.tar.gz: 7c5c07fb46320fa8a4f07adffb0e6bf8609ed494
3
+ metadata.gz: 3bc1d049d31a8e693636be1d2ba1c70d5e77ad1c
4
+ data.tar.gz: d3c3d7a151a411f969a5bd7c78c287c2432963cc
5
5
  SHA512:
6
- metadata.gz: 0604babd1ee968f5bf8d00cb56a897a38f5c97e82f5f6a2f9c845bbdf0bba36ac33dc46c675b41b4c4d79706d429bd377db6193c5a74213e6c94242ea042179f
7
- data.tar.gz: 31c4c370d79fe4e8a349fc119416666b8be4840cdc4a043bbe26cdecec8daf87c68576a2692abc9e16220eb714649b3e2ad36867f7c96bccc059e49862e5cebd
6
+ metadata.gz: 7b1183a3ed2a559bd6ec924962017ddb72dc5ec7c4bb74a123478c708f4c8a1093d87387c1f545357863a502e26ce8744b6c162695fe4aa96f6f468465689137
7
+ data.tar.gz: bb03588ca98125193bfd1d5238a14ea3d87e5b3c63a82c08e9bcb05c66fb3b86581ab2b1eebb05e14efb59de44b4291635bf8d4e8df7602aa1f5046e5856fde0
data/.gitignore CHANGED
@@ -5,7 +5,7 @@
5
5
  .yardoc
6
6
  InstalledFiles
7
7
  _yardoc
8
- coverage
8
+ /coverage
9
9
  doc/
10
10
  lib/bundler/man
11
11
  pkg
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- buildbox (0.5)
4
+ buildbox (0.6.beta1)
5
5
  celluloid (~> 0.14)
6
6
  childprocess (~> 0.3)
7
7
  faraday (~> 0.8)
8
8
  faraday_middleware (~> 0.9)
9
9
  hashie (~> 2.0)
10
+ mime-types (~> 2.0)
10
11
  multi_json (~> 1.7)
11
12
 
12
13
  GEM
@@ -19,13 +20,17 @@ GEM
19
20
  ffi (~> 1.0, >= 1.0.11)
20
21
  crack (0.4.1)
21
22
  safe_yaml (~> 0.9.0)
22
- diff-lcs (1.2.4)
23
+ diff-lcs (1.2.5)
24
+ docile (1.1.0)
23
25
  faraday (0.8.8)
24
26
  multipart-post (~> 1.2.0)
25
27
  faraday_middleware (0.9.0)
26
28
  faraday (>= 0.7.4, < 0.9)
27
- ffi (1.9.0)
29
+ ffi (1.9.3)
30
+ ffi (1.9.3-x86-mingw32)
28
31
  hashie (2.0.5)
32
+ lockfile (2.1.0)
33
+ mime-types (2.0)
29
34
  multi_json (1.8.2)
30
35
  multipart-post (1.2.0)
31
36
  rake (10.1.0)
@@ -33,11 +38,17 @@ GEM
33
38
  rspec-core (~> 2.14.0)
34
39
  rspec-expectations (~> 2.14.0)
35
40
  rspec-mocks (~> 2.14.0)
36
- rspec-core (2.14.6)
37
- rspec-expectations (2.14.3)
41
+ rspec-core (2.14.7)
42
+ rspec-expectations (2.14.4)
38
43
  diff-lcs (>= 1.1.3, < 2.0)
39
44
  rspec-mocks (2.14.4)
40
45
  safe_yaml (0.9.7)
46
+ simplecov (0.8.1)
47
+ docile (~> 1.1.0)
48
+ lockfile (>= 2.1.0)
49
+ multi_json
50
+ simplecov-html (~> 0.8.0)
51
+ simplecov-html (0.8.0)
41
52
  timers (1.1.0)
42
53
  webmock (1.15.0)
43
54
  addressable (>= 2.2.7)
@@ -51,4 +62,5 @@ DEPENDENCIES
51
62
  buildbox!
52
63
  rake
53
64
  rspec
65
+ simplecov
54
66
  webmock
@@ -24,8 +24,10 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency 'multi_json', '~> 1.7'
25
25
  spec.add_dependency 'celluloid', '~> 0.14'
26
26
  spec.add_dependency 'childprocess', '~> 0.3'
27
+ spec.add_dependency 'mime-types', '~> 2.0'
27
28
 
28
29
  spec.add_development_dependency 'rake'
29
30
  spec.add_development_dependency 'rspec'
30
31
  spec.add_development_dependency 'webmock'
32
+ spec.add_development_dependency 'simplecov'
31
33
  end
@@ -3,6 +3,7 @@ require 'logger'
3
3
 
4
4
  module Buildbox
5
5
  autoload :API, "buildbox/api"
6
+ autoload :Artifact, "buildbox/artifact"
6
7
  autoload :Build, "buildbox/build"
7
8
  autoload :Command, "buildbox/command"
8
9
  autoload :Canceler, "buildbox/canceler"
@@ -15,6 +16,7 @@ module Buildbox
15
16
  autoload :Server, "buildbox/server"
16
17
  autoload :UTF8, "buildbox/utf8"
17
18
  autoload :Agent, "buildbox/agent"
19
+ autoload :Uploader, "buildbox/uploader"
18
20
  autoload :VERSION, "buildbox/version"
19
21
 
20
22
  def self.config
@@ -6,8 +6,9 @@ module Buildbox
6
6
  include Celluloid::Logger
7
7
 
8
8
  def initialize(access_token, api = Buildbox::API.new)
9
- @api = api
10
- @access_token = access_token
9
+ @api = api
10
+ @access_token = access_token
11
+ @uploader_pool = Uploader.pool(:size => 10) # upload 10 things at a time
11
12
  end
12
13
 
13
14
  def process
@@ -16,8 +17,12 @@ module Buildbox
16
17
  if @current_build = next_build
17
18
  @api.update_build(@access_token, @current_build, :agent_accepted => @access_token)
18
19
 
19
- Monitor.new(@current_build, @access_token, @api).async.monitor
20
- Runner.new(@current_build).start
20
+ montior = Monitor.new(@current_build, @access_token, @api).async.monitor
21
+ runner = Runner.start(@current_build)
22
+
23
+ @current_build.artifact_paths.each do |path|
24
+ upload_artifacts_from(runner.build_directory, path)
25
+ end
21
26
  end
22
27
 
23
28
  @current_build = nil
@@ -36,5 +41,22 @@ module Buildbox
36
41
  def hostname
37
42
  `hostname`.chomp
38
43
  end
44
+
45
+ def upload_artifacts_from(build_directory, artifact_path)
46
+ files = Artifact.files_to_upload(build_directory, artifact_path)
47
+
48
+ files.each_pair do |relative_path, absolute_path|
49
+ artifact = @api.create_artifact(@access_token, @current_build,
50
+ :path => relative_path,
51
+ :file_size => File.size(absolute_path))
52
+
53
+ @uploader_pool.upload(artifact[:uploader], absolute_path) do |state, response|
54
+ @api.update_artifact(@access_token, @current_build, artifact[:id], :state => state)
55
+ end
56
+ end
57
+ rescue => e
58
+ error "There was an error uploading artifacts for path: #{artifact_path} (#{e.class.name}: #{e.message})"
59
+ e.backtrace[0..3].each { |line| error(line) }
60
+ end
39
61
  end
40
62
  end
@@ -41,9 +41,9 @@ module Buildbox
41
41
  end
42
42
 
43
43
  def next_build(access_token)
44
- build = get("#{access_token}/builds/queue/next").build
44
+ response = get("#{access_token}/builds/queue/next")
45
45
 
46
- if build
46
+ if build = response.build
47
47
  Buildbox::Build.new(build)
48
48
  else
49
49
  nil
@@ -54,6 +54,14 @@ module Buildbox
54
54
  put("#{access_token}/builds/#{build.id}", options)
55
55
  end
56
56
 
57
+ def create_artifact(access_token, build, options)
58
+ post("#{access_token}/builds/#{build.id}/artifacts", options)
59
+ end
60
+
61
+ def update_artifact(access_token, build, artifact_id, options)
62
+ put("#{access_token}/builds/#{build.id}/artifacts/#{artifact_id}", options)
63
+ end
64
+
57
65
  private
58
66
 
59
67
  def connection
@@ -0,0 +1,62 @@
1
+ require 'fileutils'
2
+ require 'tempfile'
3
+
4
+ module Buildbox
5
+ class Artifact
6
+ include Celluloid::Logger
7
+
8
+ def self.files_to_upload(build_directory, glob)
9
+ new(build_directory, glob).files_to_upload
10
+ end
11
+
12
+ def initialize(build_directory, glob)
13
+ @build_directory = build_directory
14
+ @glob = glob
15
+ end
16
+
17
+ def files_to_upload
18
+ tmpdir = Dir.mktmpdir
19
+ path_to_absolute = {}
20
+
21
+ copy_files_to_upload(tmpdir).each do |file|
22
+ path_to_absolute[relativize_to_dir(file, tmpdir)] = file
23
+ end
24
+
25
+ path_to_absolute
26
+ end
27
+
28
+ private
29
+
30
+ def copy_files_to_upload(dir)
31
+ expanded_directory = File.expand_path(@build_directory)
32
+ absolute_glob = File.expand_path(@glob, expanded_directory)
33
+
34
+ target_files = Dir.glob(absolute_glob)
35
+
36
+ target_files.each do |file|
37
+ relative_path = relativize_to_dir(file, expanded_directory)
38
+ copy_to = File.join(dir, relative_path)
39
+
40
+ if File.file?(file)
41
+ FileUtils.mkdir_p(File.dirname(copy_to))
42
+ FileUtils.cp(file, copy_to)
43
+ end
44
+ end
45
+
46
+ # Grab all the files we're going to upload.
47
+ Dir.glob(File.join(dir, "**", "*")).reject { |file| File.directory?(file) }
48
+ end
49
+
50
+ # /foo/build-directory/something.txt => /something.txt
51
+ # /var/random/something.txt => /var/random/something.txt
52
+ def relativize_to_dir(path, directory)
53
+ if path.to_s.index(directory.to_s) == 0
54
+ parts = path.to_s.split(directory.to_s)
55
+ parts.shift
56
+ parts.join(directory.to_s)
57
+ else
58
+ path
59
+ end
60
+ end
61
+ end
62
+ end
@@ -7,18 +7,28 @@ module Buildbox
7
7
  include Celluloid
8
8
  include Celluloid::Logger
9
9
 
10
+ def self.start(build)
11
+ runner = new(build)
12
+ runner.start
13
+ runner
14
+ end
15
+
10
16
  def initialize(build)
11
17
  @build = build
12
18
  end
13
19
 
20
+ def build_directory
21
+ @build_directory ||= Buildbox.home_path.join(@build.namespace)
22
+ end
23
+
14
24
  def start
15
25
  info "Starting to build #{@build.namespace}/#{@build.id} starting..."
16
26
 
17
- FileUtils.mkdir_p(directory_path)
27
+ FileUtils.mkdir_p(build_directory)
18
28
  File.open(script_path, 'w+') { |file| file.write(@build.script) }
19
29
  File.chmod(0777, script_path)
20
30
 
21
- command = Command.new(script_path, :environment => @build.env, :directory => directory_path)
31
+ command = Command.new(script_path, :environment => @build.env, :directory => build_directory)
22
32
 
23
33
  @build.output = ""
24
34
  @build.process = command.process
@@ -38,10 +48,6 @@ module Buildbox
38
48
 
39
49
  private
40
50
 
41
- def directory_path
42
- @directory_path ||= Buildbox.home_path.join(@build.namespace)
43
- end
44
-
45
51
  def script_path
46
52
  @script_path ||= Buildbox.home_path.join(script_name)
47
53
  end
@@ -0,0 +1,39 @@
1
+ require 'celluloid'
2
+ require 'mime/types'
3
+
4
+ module Buildbox
5
+ class Uploader
6
+ include Celluloid
7
+ include Celluloid::Logger
8
+
9
+ def upload(credentials, absolute_path, &block)
10
+ info "Uploading #{absolute_path}"
11
+
12
+ action = credentials[:action]
13
+ data = credentials[:data]
14
+
15
+ connection = Faraday.new(:url => action[:url]) do |faraday|
16
+ faraday.request :multipart
17
+
18
+ faraday.options[:timeout] = 60
19
+ faraday.options[:open_timeout] = 60
20
+
21
+ faraday.adapter Faraday.default_adapter
22
+ end
23
+
24
+ mime_type = MIME::Types.type_for(absolute_path)[0].to_s
25
+ file_input_key = action[:file_input]
26
+
27
+ form_data = credentials[:data].to_hash.dup
28
+ form_data[file_input_key] = Faraday::UploadIO.new(absolute_path, mime_type)
29
+
30
+ yield("uploading")
31
+
32
+ response = connection.post(action[:path], form_data)
33
+
34
+ info "Finished uploading #{File.basename(absolute_path)} with a status of #{response.status}"
35
+
36
+ yield("finished")
37
+ end
38
+ end
39
+ end
@@ -1,3 +1,3 @@
1
1
  module Buildbox
2
- VERSION = "0.5"
2
+ VERSION = "0.6.beta1"
3
3
  end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe Buildbox::Artifact do
4
+ let(:directory) { File.join(FIXTURES_PATH, "artifact-globber") }
5
+
6
+ def test_for_files(files, expected)
7
+ expected.each do |path|
8
+ expect(files.keys).to include(path)
9
+ expect(File.exist?(files[path])).to be_true
10
+ end
11
+ end
12
+
13
+ describe "#files_to_upload" do
14
+ it "handles specific files" do
15
+ files = Buildbox::Artifact.files_to_upload(directory, "foo.txt")
16
+
17
+ expect(files.length).to eql(1)
18
+ test_for_files(files, %w(/foo.txt))
19
+ end
20
+
21
+ it "handles globs" do
22
+ files = Buildbox::Artifact.files_to_upload(directory, "bar/**/*.txt")
23
+
24
+ expect(files.length).to eql(4)
25
+ test_for_files(files, %w(/bar/bang.txt /bar/bang1.txt /bar/bang2.txt /bar/inside-bar/bang3.txt))
26
+ end
27
+
28
+ it "handles absolute globs" do
29
+ files = Buildbox::Artifact.files_to_upload(directory, File.join(File.expand_path(directory), "**/*.txt"))
30
+
31
+ expect(files.length).to eql(5)
32
+ test_for_files(files, %w(/foo.txt /bar/bang.txt /bar/bang1.txt /bar/bang2.txt /bar/inside-bar/bang3.txt))
33
+ end
34
+
35
+ it "handles specifying everything under a folder" do
36
+ files = Buildbox::Artifact.files_to_upload(directory, "coverage/**/*")
37
+
38
+ expect(files.length).to eql(25)
39
+ test_for_files(files, %w(/coverage/index.html /coverage/assets/0.8.0/application.js))
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,5 @@
1
+ {
2
+ "result": {
3
+ "covered_percent": 60.49
4
+ }
5
+ }
@@ -0,0 +1,934 @@
1
+ {
2
+ "RSpec": {
3
+ "coverage": {
4
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox.rb": [
5
+ 1,
6
+ 1,
7
+ null,
8
+ 1,
9
+ 1,
10
+ 1,
11
+ 1,
12
+ 1,
13
+ 1,
14
+ 1,
15
+ 1,
16
+ 1,
17
+ 1,
18
+ 1,
19
+ 1,
20
+ 1,
21
+ 1,
22
+ 1,
23
+ 1,
24
+ 1,
25
+ null,
26
+ 1,
27
+ 0,
28
+ null,
29
+ null,
30
+ 1,
31
+ 27,
32
+ null,
33
+ null,
34
+ 1,
35
+ 29,
36
+ null,
37
+ null,
38
+ 1,
39
+ 0,
40
+ null,
41
+ 0,
42
+ null,
43
+ null,
44
+ 1,
45
+ 0,
46
+ 0,
47
+ null,
48
+ 0,
49
+ null,
50
+ null
51
+ ],
52
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/agent.rb": [
53
+ 1,
54
+ null,
55
+ 1,
56
+ 1,
57
+ 1,
58
+ 1,
59
+ null,
60
+ 1,
61
+ 0,
62
+ 0,
63
+ 0,
64
+ null,
65
+ null,
66
+ 1,
67
+ 0,
68
+ null,
69
+ 0,
70
+ 0,
71
+ null,
72
+ 0,
73
+ 0,
74
+ null,
75
+ 0,
76
+ 0,
77
+ null,
78
+ null,
79
+ null,
80
+ 0,
81
+ null,
82
+ null,
83
+ 1,
84
+ null,
85
+ 1,
86
+ 0,
87
+ 0,
88
+ null,
89
+ 0,
90
+ 0,
91
+ null,
92
+ null,
93
+ 1,
94
+ 0,
95
+ null,
96
+ null,
97
+ 1,
98
+ 0,
99
+ null,
100
+ 0,
101
+ 0,
102
+ null,
103
+ null,
104
+ null,
105
+ 0,
106
+ 0,
107
+ null,
108
+ null,
109
+ null,
110
+ 0,
111
+ 0,
112
+ null,
113
+ null,
114
+ null
115
+ ],
116
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/api.rb": [
117
+ 1,
118
+ 1,
119
+ 1,
120
+ 1,
121
+ null,
122
+ 1,
123
+ 1,
124
+ null,
125
+ null,
126
+ null,
127
+ 1,
128
+ 1,
129
+ 0,
130
+ null,
131
+ null,
132
+ 1,
133
+ 0,
134
+ null,
135
+ null,
136
+ 1,
137
+ null,
138
+ null,
139
+ null,
140
+ null,
141
+ 1,
142
+ 1,
143
+ null,
144
+ 1,
145
+ 0,
146
+ 0,
147
+ null,
148
+ null,
149
+ 1,
150
+ 0,
151
+ null,
152
+ 0,
153
+ 0,
154
+ null,
155
+ 0,
156
+ null,
157
+ null,
158
+ null,
159
+ 1,
160
+ 0,
161
+ null,
162
+ 0,
163
+ 0,
164
+ null,
165
+ null,
166
+ null,
167
+ null,
168
+ null,
169
+ 1,
170
+ 0,
171
+ null,
172
+ null,
173
+ 1,
174
+ 0,
175
+ null,
176
+ null,
177
+ 1,
178
+ 0,
179
+ null,
180
+ null,
181
+ 1,
182
+ null,
183
+ 1,
184
+ null,
185
+ null,
186
+ 0,
187
+ 0,
188
+ null,
189
+ 0,
190
+ 0,
191
+ null,
192
+ null,
193
+ null,
194
+ 0,
195
+ 0,
196
+ null,
197
+ 0,
198
+ null,
199
+ null,
200
+ 0,
201
+ 0,
202
+ 0,
203
+ null,
204
+ null,
205
+ 1,
206
+ null,
207
+ 0,
208
+ 0,
209
+ 0,
210
+ null,
211
+ null,
212
+ 1,
213
+ null,
214
+ 0,
215
+ 0,
216
+ null,
217
+ null,
218
+ 1,
219
+ 0,
220
+ null,
221
+ null,
222
+ null
223
+ ],
224
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/artifact.rb": [
225
+ 1,
226
+ 1,
227
+ null,
228
+ 1,
229
+ 1,
230
+ 1,
231
+ null,
232
+ 1,
233
+ 3,
234
+ null,
235
+ null,
236
+ 1,
237
+ 3,
238
+ 3,
239
+ null,
240
+ null,
241
+ 1,
242
+ 3,
243
+ 3,
244
+ null,
245
+ 3,
246
+ 10,
247
+ null,
248
+ null,
249
+ 3,
250
+ null,
251
+ null,
252
+ 1,
253
+ null,
254
+ 1,
255
+ 3,
256
+ 3,
257
+ null,
258
+ 3,
259
+ null,
260
+ 3,
261
+ 10,
262
+ 10,
263
+ null,
264
+ 10,
265
+ 10,
266
+ null,
267
+ null,
268
+ null,
269
+ 17,
270
+ null,
271
+ null,
272
+ null,
273
+ null,
274
+ 1,
275
+ 20,
276
+ 20,
277
+ 20,
278
+ 20,
279
+ null,
280
+ 0,
281
+ null,
282
+ null,
283
+ null,
284
+ null
285
+ ],
286
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/build.rb": [
287
+ 1,
288
+ null,
289
+ 1,
290
+ 1,
291
+ 1,
292
+ 11,
293
+ null,
294
+ null,
295
+ 1,
296
+ 0,
297
+ null,
298
+ null,
299
+ 1,
300
+ 0,
301
+ null,
302
+ null,
303
+ 1,
304
+ 0,
305
+ null,
306
+ null,
307
+ null
308
+ ],
309
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/cli.rb": [
310
+ 1,
311
+ null,
312
+ 1,
313
+ 1,
314
+ 1,
315
+ null,
316
+ 1,
317
+ 0,
318
+ 0,
319
+ 0,
320
+ null,
321
+ 0,
322
+ 0,
323
+ null,
324
+ 0,
325
+ 0,
326
+ 0,
327
+ null,
328
+ null,
329
+ null,
330
+ 0,
331
+ 0,
332
+ null,
333
+ 0,
334
+ 0,
335
+ 0,
336
+ null,
337
+ null,
338
+ null,
339
+ 0,
340
+ 0,
341
+ null,
342
+ null,
343
+ null,
344
+ 1,
345
+ 0,
346
+ null,
347
+ 0,
348
+ null,
349
+ 0,
350
+ 0,
351
+ 0,
352
+ null,
353
+ 0,
354
+ 0,
355
+ null,
356
+ null,
357
+ 0,
358
+ 0,
359
+ 0,
360
+ null,
361
+ null,
362
+ 0,
363
+ 0,
364
+ 0,
365
+ 0,
366
+ 0,
367
+ 0,
368
+ null,
369
+ null,
370
+ 0,
371
+ 0,
372
+ 0,
373
+ null,
374
+ 0,
375
+ 0,
376
+ 0,
377
+ null,
378
+ null,
379
+ 0,
380
+ null,
381
+ null,
382
+ null,
383
+ 1,
384
+ null,
385
+ 1,
386
+ null,
387
+ 0,
388
+ 0,
389
+ null,
390
+ 0,
391
+ 0,
392
+ null,
393
+ null,
394
+ 1,
395
+ 0,
396
+ null,
397
+ null,
398
+ null,
399
+ null,
400
+ null,
401
+ null,
402
+ null,
403
+ null,
404
+ null
405
+ ],
406
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/command.rb": [
407
+ 1,
408
+ null,
409
+ null,
410
+ null,
411
+ null,
412
+ 1,
413
+ 1,
414
+ null,
415
+ null,
416
+ null,
417
+ 1,
418
+ 1,
419
+ null,
420
+ 1,
421
+ null,
422
+ null,
423
+ null,
424
+ 1,
425
+ null,
426
+ 1,
427
+ null,
428
+ 1,
429
+ 13,
430
+ 13,
431
+ 13,
432
+ null,
433
+ null,
434
+ 1,
435
+ 27,
436
+ 27,
437
+ 27,
438
+ null,
439
+ null,
440
+ 1,
441
+ 54,
442
+ null,
443
+ null,
444
+ 1,
445
+ 755,
446
+ null,
447
+ null,
448
+ 1,
449
+ null,
450
+ 27,
451
+ null,
452
+ null,
453
+ 27,
454
+ null,
455
+ null,
456
+ null,
457
+ null,
458
+ 27,
459
+ 27,
460
+ null,
461
+ 1,
462
+ null,
463
+ null,
464
+ 27,
465
+ 27,
466
+ 27,
467
+ null,
468
+ null,
469
+ 27,
470
+ 14,
471
+ 2,
472
+ null,
473
+ null,
474
+ null,
475
+ null,
476
+ 27,
477
+ null,
478
+ null,
479
+ 27,
480
+ null,
481
+ 27,
482
+ null,
483
+ 27,
484
+ null,
485
+ null,
486
+ null,
487
+ 27,
488
+ null,
489
+ null,
490
+ null,
491
+ 27,
492
+ null,
493
+ null,
494
+ 27,
495
+ null,
496
+ 27,
497
+ 27,
498
+ 469,
499
+ 469,
500
+ null,
501
+ null,
502
+ 469,
503
+ null,
504
+ null,
505
+ null,
506
+ null,
507
+ null,
508
+ 469,
509
+ 358,
510
+ null,
511
+ 358,
512
+ null,
513
+ null,
514
+ 358,
515
+ null,
516
+ 338,
517
+ 338,
518
+ null,
519
+ null,
520
+ null,
521
+ null,
522
+ null,
523
+ null,
524
+ 469,
525
+ null,
526
+ null,
527
+ null,
528
+ 27,
529
+ 27,
530
+ 27,
531
+ 27,
532
+ null,
533
+ 27,
534
+ null,
535
+ 0,
536
+ null,
537
+ null,
538
+ 27,
539
+ null,
540
+ null,
541
+ null,
542
+ null,
543
+ null,
544
+ null,
545
+ 27,
546
+ null,
547
+ null,
548
+ 27,
549
+ 0,
550
+ 0,
551
+ null,
552
+ null,
553
+ 27,
554
+ null,
555
+ null,
556
+ 0,
557
+ null,
558
+ null,
559
+ 27,
560
+ 27,
561
+ null,
562
+ null,
563
+ 1,
564
+ null,
565
+ null,
566
+ null,
567
+ null,
568
+ null,
569
+ null,
570
+ 1,
571
+ 385,
572
+ null,
573
+ 385,
574
+ 736,
575
+ 736,
576
+ null,
577
+ null,
578
+ null,
579
+ null,
580
+ null,
581
+ null,
582
+ null,
583
+ null,
584
+ 0,
585
+ 0,
586
+ null,
587
+ null,
588
+ 0,
589
+ null,
590
+ null,
591
+ 736,
592
+ null,
593
+ null,
594
+ null,
595
+ null,
596
+ null,
597
+ 385,
598
+ null,
599
+ null,
600
+ 385,
601
+ null,
602
+ 49,
603
+ null,
604
+ null,
605
+ null,
606
+ null,
607
+ null,
608
+ null,
609
+ 336,
610
+ null,
611
+ null,
612
+ null,
613
+ 0,
614
+ null,
615
+ null,
616
+ null,
617
+ null,
618
+ 385,
619
+ 0,
620
+ null,
621
+ null,
622
+ null,
623
+ 385,
624
+ null,
625
+ null,
626
+ null
627
+ ],
628
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/configuration.rb": [
629
+ 1,
630
+ 1,
631
+ null,
632
+ 1,
633
+ 1,
634
+ 1,
635
+ 0,
636
+ null,
637
+ 0,
638
+ 0,
639
+ null,
640
+ 0,
641
+ null,
642
+ null,
643
+ null,
644
+ 1,
645
+ 0,
646
+ null,
647
+ null,
648
+ 0,
649
+ 0,
650
+ 0,
651
+ 0,
652
+ null,
653
+ 0,
654
+ null,
655
+ null,
656
+ null,
657
+ 1,
658
+ 0,
659
+ 0,
660
+ null,
661
+ null,
662
+ 1,
663
+ 0,
664
+ null,
665
+ null,
666
+ 1,
667
+ 0,
668
+ 0,
669
+ null,
670
+ 0,
671
+ null,
672
+ null,
673
+ null,
674
+ 1,
675
+ null,
676
+ 1,
677
+ 0,
678
+ null,
679
+ null,
680
+ 1,
681
+ 0,
682
+ null,
683
+ null,
684
+ 1,
685
+ 0,
686
+ null,
687
+ null,
688
+ null
689
+ ],
690
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/monitor.rb": [
691
+ 1,
692
+ null,
693
+ 1,
694
+ 1,
695
+ 1,
696
+ null,
697
+ 1,
698
+ 0,
699
+ 0,
700
+ 0,
701
+ null,
702
+ null,
703
+ 1,
704
+ 0,
705
+ 0,
706
+ null,
707
+ null,
708
+ null,
709
+ 0,
710
+ null,
711
+ 0,
712
+ null,
713
+ null,
714
+ null,
715
+ null,
716
+ 0,
717
+ 0,
718
+ null,
719
+ null,
720
+ 0,
721
+ null,
722
+ null,
723
+ 0,
724
+ null,
725
+ null,
726
+ null,
727
+ null
728
+ ],
729
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/runner.rb": [
730
+ 1,
731
+ 1,
732
+ 1,
733
+ null,
734
+ 1,
735
+ 1,
736
+ 1,
737
+ 1,
738
+ null,
739
+ 1,
740
+ 0,
741
+ 0,
742
+ 0,
743
+ null,
744
+ null,
745
+ 1,
746
+ 13,
747
+ null,
748
+ null,
749
+ 1,
750
+ 28,
751
+ null,
752
+ null,
753
+ 1,
754
+ 14,
755
+ null,
756
+ 14,
757
+ 28,
758
+ 14,
759
+ null,
760
+ 14,
761
+ null,
762
+ 14,
763
+ 14,
764
+ 14,
765
+ null,
766
+ 339,
767
+ null,
768
+ 14,
769
+ 14,
770
+ null,
771
+ 14,
772
+ null,
773
+ 14,
774
+ null,
775
+ 14,
776
+ null,
777
+ null,
778
+ 1,
779
+ null,
780
+ 1,
781
+ 56,
782
+ null,
783
+ null,
784
+ 1,
785
+ 13,
786
+ 13,
787
+ 13,
788
+ null,
789
+ null,
790
+ null
791
+ ],
792
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/server.rb": [
793
+ 1,
794
+ null,
795
+ 1,
796
+ 1,
797
+ 1,
798
+ null,
799
+ 1,
800
+ 0,
801
+ 0,
802
+ 0,
803
+ null,
804
+ null,
805
+ 1,
806
+ 0,
807
+ null,
808
+ 0,
809
+ 0,
810
+ null,
811
+ 0,
812
+ null,
813
+ null,
814
+ 0,
815
+ 0,
816
+ 0,
817
+ null,
818
+ null,
819
+ 0,
820
+ null,
821
+ null,
822
+ null,
823
+ 1,
824
+ null,
825
+ 1,
826
+ 0,
827
+ null,
828
+ 0,
829
+ null,
830
+ null,
831
+ 1,
832
+ 0,
833
+ null,
834
+ null,
835
+ null
836
+ ],
837
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/utf8.rb": [
838
+ 1,
839
+ 1,
840
+ null,
841
+ null,
842
+ null,
843
+ null,
844
+ null,
845
+ null,
846
+ null,
847
+ null,
848
+ null,
849
+ null,
850
+ 1,
851
+ null,
852
+ null,
853
+ 338,
854
+ null,
855
+ 338,
856
+ null,
857
+ null,
858
+ null,
859
+ null,
860
+ 0,
861
+ 0,
862
+ 0,
863
+ 0,
864
+ null,
865
+ 0,
866
+ null,
867
+ null,
868
+ null,
869
+ 338,
870
+ null,
871
+ null,
872
+ null,
873
+ null,
874
+ 1,
875
+ 338,
876
+ 338,
877
+ 33800,
878
+ null,
879
+ 338,
880
+ 338,
881
+ 338,
882
+ null,
883
+ null,
884
+ 0,
885
+ null,
886
+ null,
887
+ 1,
888
+ 0,
889
+ 0,
890
+ 0,
891
+ null,
892
+ 0,
893
+ null,
894
+ 0,
895
+ null,
896
+ null,
897
+ 0,
898
+ null,
899
+ 0,
900
+ null,
901
+ 0,
902
+ null,
903
+ null,
904
+ null
905
+ ],
906
+ "/Users/keithpitt/Development/buildbox-ruby/lib/buildbox/platform.rb": [
907
+ 1,
908
+ 1,
909
+ 1,
910
+ 1,
911
+ 6,
912
+ 0,
913
+ null,
914
+ null,
915
+ null,
916
+ 1,
917
+ 736,
918
+ 1472,
919
+ null,
920
+ null,
921
+ 736,
922
+ null,
923
+ null,
924
+ 1,
925
+ 1472,
926
+ null,
927
+ null,
928
+ null,
929
+ null
930
+ ]
931
+ },
932
+ "timestamp": 1384163075
933
+ }
934
+ }