bosh-gen 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.md CHANGED
@@ -21,6 +21,13 @@ make
21
21
  make install
22
22
  ```
23
23
 
24
+ ### v0.8.1
25
+
26
+ Changed:
27
+
28
+ * `extract-job` & `extract-pkg` - copies files mentioned in specs
29
+ * `package` - large files go into blobs/ folder
30
+
24
31
  ## v0.7.0
25
32
 
26
33
  Added:
@@ -31,14 +31,20 @@ module Bosh::Gen
31
31
  def copy_dependent_packages
32
32
  @packages.each {|package| directory "packages/#{package}"}
33
33
  end
34
-
35
- def copy_dependent_sources
34
+
35
+ def copy_package_spec_files
36
36
  @blobs = false
37
37
  @packages.each do |package|
38
- directory "src/#{package}" if File.exist?(File.join(source_release_path, "src", package))
39
- if File.exist?(File.join(source_release_path, "blobs", package))
40
- directory "blobs/#{package}"
41
- @blobs = true
38
+ spec = source_file("packages", package, "spec")
39
+ files = YAML.load_file(spec)["files"]
40
+
41
+ files.each do |relative_file|
42
+ if File.exist?(source_file("src", relative_file))
43
+ copy_file "src/#{relative_file}"
44
+ elsif File.exist?(source_file("blobs", relative_file))
45
+ copy_file "blobs/#{relative_file}"
46
+ @blobs = true
47
+ end
42
48
  end
43
49
  end
44
50
  end
@@ -54,6 +60,9 @@ module Bosh::Gen
54
60
  File.join("jobs", job_name, path)
55
61
  end
56
62
 
63
+ def source_file(*path)
64
+ File.join(source_release_path, *path)
65
+ end
57
66
  end
58
67
  end
59
68
  end
@@ -30,13 +30,19 @@ module Bosh::Gen
30
30
  @packages.each {|package| directory "packages/#{package}"}
31
31
  end
32
32
 
33
- def copy_dependent_sources
33
+ def copy_package_spec_files
34
34
  @blobs = false
35
35
  @packages.each do |package|
36
- directory "src/#{package}" if File.exist?(File.join(source_release_path, "src", package))
37
- if File.exist?(File.join(source_release_path, "blobs", package))
38
- directory "blobs/#{package}"
39
- @blobs = true
36
+ spec = source_file("packages", package, "spec")
37
+ files = YAML.load_file(spec)["files"]
38
+
39
+ files.each do |relative_file|
40
+ if File.exist?(source_file("src", relative_file))
41
+ copy_file "src/#{relative_file}"
42
+ elsif File.exist?(source_file("blobs", relative_file))
43
+ copy_file "blobs/#{relative_file}"
44
+ @blobs = true
45
+ end
40
46
  end
41
47
  end
42
48
  end
@@ -9,21 +9,23 @@ module Bosh::Gen
9
9
  argument :name
10
10
  argument :dependencies, :type => :array
11
11
  argument :files, :type => :array
12
-
12
+
13
+ BLOB_FILE_MIN_SIZE=20_000 # files over 20k are blobs
14
+
13
15
  def self.source_root
14
16
  File.join(File.dirname(__FILE__), "package_generator", "templates")
15
17
  end
16
-
18
+
17
19
  def check_root_is_release
18
20
  unless File.exist?("jobs") && File.exist?("packages")
19
21
  raise Thor::Error.new("run inside a BOSH release project")
20
22
  end
21
23
  end
22
-
24
+
23
25
  def check_name
24
26
  raise Thor::Error.new("'#{name}' is not a vaild BOSH id") unless name.bosh_valid_id?
25
27
  end
26
-
28
+
27
29
  def warn_missing_dependencies
28
30
  dependencies.each do |d|
29
31
  raise Thor::Error.new("dependency '#{d}' is not a vaild BOSH id") unless d.bosh_valid_id?
@@ -32,7 +34,7 @@ module Bosh::Gen
32
34
  end
33
35
  end
34
36
  end
35
-
37
+
36
38
  def packaging
37
39
  create_file package_dir("packaging") do
38
40
  packaging = <<-SHELL.gsub(/^\s{10}/, '')
@@ -72,16 +74,30 @@ module Bosh::Gen
72
74
  end
73
75
  end
74
76
 
75
- # Copy the local source files into src/NAME/filename, unless filename
76
- # already exists as a blob in blobs/NAME/filename.
77
+ # Copy the local source files into src or blobs
78
+ # * into src/NAME/filename (if < 20k) or
79
+ # * into blobs/NAME/filename (if >= 20k)
80
+ # Skip a file if:
81
+ # * filename already exists as a blob in blobs/NAME/filename
82
+ # * file doesn't exist
77
83
  def copy_src_files
78
- files.each do |file_path|
84
+ files.each do |file|
85
+ file_path = File.expand_path(file)
86
+ unless File.exist?(file_path)
87
+ say "Skipping unknown file #{file_path}", :red
88
+ next
89
+ end
90
+
91
+ size = File.size(file_path)
79
92
  file_name = File.basename(file_path)
80
- src_file = src_dir(file_name)
81
- if File.exist? blob_dir(file_name)
93
+ src_file = src_dir(file_name)
94
+ blob_file = blob_dir(file_name)
95
+ if File.exist?(blob_file)
82
96
  say "Blob '#{file_name}' exists as a blob, skipping..."
83
97
  else
84
- copy_file File.expand_path(file_path), src_file
98
+ # if < 20k, put in src/, else blobs/
99
+ target = size >= BLOB_FILE_MIN_SIZE ? blob_file : src_file
100
+ copy_file File.expand_path(file_path), target
85
101
  end
86
102
  end
87
103
  end
@@ -125,7 +141,7 @@ module Bosh::Gen
125
141
 
126
142
  # Returns all .tar.gz in the files list
127
143
  def tarballs_in_files
128
- files.select { |file| file =~ /.tar.gz/ }
144
+ files.select { |file| file =~ /.(?:tar.gz|tgz)/ }
129
145
  end
130
146
 
131
147
  # If primary_package_file was mysql's client-5.1.62-rel13.3-435-Linux-x86_64.tar.gz
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Gen
3
- VERSION = "0.8.0"
3
+ VERSION = "0.8.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000 Z
12
+ date: 2012-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -209,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
209
  version: '0'
210
210
  segments:
211
211
  - 0
212
- hash: -3406333594034376682
212
+ hash: 3642309180596894033
213
213
  required_rubygems_version: !ruby/object:Gem::Requirement
214
214
  none: false
215
215
  requirements:
@@ -218,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  version: '0'
219
219
  segments:
220
220
  - 0
221
- hash: -3406333594034376682
221
+ hash: 3642309180596894033
222
222
  requirements: []
223
223
  rubyforge_project:
224
224
  rubygems_version: 1.8.24