fig 0.1.23 → 0.1.25

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,7 @@ module Fig
11
11
  @variables = variables
12
12
  @retrieve_vars = {}
13
13
  @packages = {}
14
+ @applied_configs = {}
14
15
  end
15
16
 
16
17
  # Returns the value of an envirionment variable
@@ -34,8 +35,12 @@ module Fig
34
35
  end
35
36
 
36
37
  def apply_config(package, config_name)
38
+ if (@applied_configs[package.package_name] ||= []).member?(config_name)
39
+ return
40
+ end
37
41
  config = package[config_name]
38
42
  config.statements.each { |stmt| apply_config_statement(package, stmt) }
43
+ @applied_configs[package.package_name] << config_name
39
44
  end
40
45
 
41
46
  def execute_shell(command)
data/lib/fig/os.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'fileutils'
2
2
  # Must specify absolute path of ::Archive when using
3
3
  # this module to avoid conflicts with Fig::Package::Archive
4
- require 'libarchive_ruby'
4
+ require 'libarchive_ruby' unless RUBY_PLATFORM == 'java'
5
5
  require 'uri'
6
6
  require 'net/http'
7
7
  require 'net/ssh'
@@ -198,20 +198,24 @@ module Fig
198
198
  end
199
199
 
200
200
  def log_info(msg)
201
- puts msg
201
+ $stderr.puts msg
202
202
  end
203
203
 
204
204
  # Expects files_to_archive as an Array of filenames.
205
205
  def create_archive(archive_name, files_to_archive)
206
- # TODO: Need to verify files_to_archive exists.
207
- ::Archive.write_open_filename(archive_name, ::Archive::COMPRESSION_GZIP, ::Archive::FORMAT_TAR) do |ar|
208
- files_to_archive.each do |fn|
209
- ar.new_entry do |entry|
210
- entry.copy_stat(fn)
211
- entry.pathname = fn
212
- ar.write_header(entry)
213
- if !entry.directory?
214
- ar.write_data(open(fn) {|f| f.binmode; f.read })
206
+ if OS.java?
207
+ `tar czvf #{archive_name} #{files_to_archive.join(' ')}`
208
+ else
209
+ # TODO: Need to verify files_to_archive exists.
210
+ ::Archive.write_open_filename(archive_name, ::Archive::COMPRESSION_GZIP, ::Archive::FORMAT_TAR) do |ar|
211
+ files_to_archive.each do |fn|
212
+ ar.new_entry do |entry|
213
+ entry.copy_stat(fn)
214
+ entry.pathname = fn
215
+ ar.write_header(entry)
216
+ if !entry.directory?
217
+ ar.write_data(open(fn) {|f| f.binmode; f.read })
218
+ end
215
219
  end
216
220
  end
217
221
  end
@@ -225,9 +229,13 @@ module Fig
225
229
  # .zip
226
230
  def unpack_archive(dir, file)
227
231
  Dir.chdir(dir) do
228
- ::Archive.read_open_filename(file) do |ar|
229
- while entry = ar.next_header
230
- ar.extract(entry)
232
+ if OS.java?
233
+ `tar xzvf #{file}`
234
+ else
235
+ ::Archive.read_open_filename(file) do |ar|
236
+ while entry = ar.next_header
237
+ ar.extract(entry)
238
+ end
231
239
  end
232
240
  end
233
241
  end
@@ -237,6 +245,10 @@ module Fig
237
245
  Config::CONFIG['host_os'] =~ /mswin|mingw/
238
246
  end
239
247
 
248
+ def self.java?
249
+ RUBY_PLATFORM == 'java'
250
+ end
251
+
240
252
  def self.unix?
241
253
  !windows?
242
254
  end
data/spec/fig_spec.rb CHANGED
@@ -2,6 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  require 'rubygems'
4
4
  require 'fig/os'
5
+ require 'rake'
5
6
  require 'fileutils'
6
7
 
7
8
  class Popen
@@ -12,6 +13,13 @@ class Popen
12
13
  yield stdin, stdout, stderr
13
14
  }
14
15
  end
16
+ elsif Fig::OS.java?
17
+ require 'open3'
18
+ def self.popen(*cmd)
19
+ Open3.popen3(*cmd) { |stdin,stdout,stderr|
20
+ yield stdin, stdout, stderr
21
+ }
22
+ end
15
23
  else
16
24
  require 'open4'
17
25
  def self.popen(*cmd)
@@ -36,7 +44,7 @@ def fig(args, input=nil)
36
44
  args = "--file - #{args}" if input
37
45
  out = nil
38
46
  err = nil
39
- Popen.popen("#{FIG_EXE} #{args}") do |stdin, stdout, stderr|
47
+ Popen.popen("#{RUBY} #{FIG_EXE} #{args}") do |stdin, stdout, stderr|
40
48
  if input
41
49
  stdin.puts input
42
50
  stdin.close
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fig
3
3
  version: !ruby/object:Gem::Version
4
- hash: 53
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 23
10
- version: 0.1.23
4
+ version: 0.1.25
11
5
  platform: ruby
12
6
  authors:
13
7
  - Matthew Foemmel
@@ -15,120 +9,79 @@ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
11
 
18
- date: 2011-02-25 00:00:00 -06:00
12
+ date: 2011-04-27 00:00:00 -05:00
19
13
  default_executable:
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
22
16
  name: libarchive
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
26
20
  requirements:
27
21
  - - ">="
28
22
  - !ruby/object:Gem::Version
29
- hash: 25
30
- segments:
31
- - 0
32
- - 1
33
- - 1
34
23
  version: 0.1.1
35
- type: :runtime
36
- version_requirements: *id001
24
+ version:
37
25
  - !ruby/object:Gem::Dependency
38
26
  name: net-ssh
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
42
30
  requirements:
43
31
  - - ">="
44
32
  - !ruby/object:Gem::Version
45
- hash: 17
46
- segments:
47
- - 2
48
- - 0
49
- - 15
50
33
  version: 2.0.15
51
- type: :runtime
52
- version_requirements: *id002
34
+ version:
53
35
  - !ruby/object:Gem::Dependency
54
36
  name: net-sftp
55
- prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
58
40
  requirements:
59
41
  - - ">="
60
42
  - !ruby/object:Gem::Version
61
- hash: 11
62
- segments:
63
- - 2
64
- - 0
65
- - 2
66
43
  version: 2.0.2
67
- type: :runtime
68
- version_requirements: *id003
44
+ version:
69
45
  - !ruby/object:Gem::Dependency
70
46
  name: polyglot
71
- prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
73
- none: false
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
74
50
  requirements:
75
51
  - - ">="
76
52
  - !ruby/object:Gem::Version
77
- hash: 5
78
- segments:
79
- - 0
80
- - 2
81
- - 9
82
53
  version: 0.2.9
83
- type: :runtime
84
- version_requirements: *id004
54
+ version:
85
55
  - !ruby/object:Gem::Dependency
86
56
  name: treetop
87
- prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
89
- none: false
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
90
60
  requirements:
91
61
  - - ">="
92
62
  - !ruby/object:Gem::Version
93
- hash: 3
94
- segments:
95
- - 1
96
- - 4
97
- - 2
98
63
  version: 1.4.2
99
- type: :runtime
100
- version_requirements: *id005
64
+ version:
101
65
  - !ruby/object:Gem::Dependency
102
66
  name: rspec
103
- prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
105
- none: false
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
106
70
  requirements:
107
71
  - - ~>
108
72
  - !ruby/object:Gem::Version
109
- hash: 9
110
- segments:
111
- - 1
112
- - 3
113
73
  version: "1.3"
114
- type: :development
115
- version_requirements: *id006
74
+ version:
116
75
  - !ruby/object:Gem::Dependency
117
76
  name: open4
118
- prerelease: false
119
- requirement: &id007 !ruby/object:Gem::Requirement
120
- none: false
77
+ type: :development
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
121
80
  requirements:
122
81
  - - ">="
123
82
  - !ruby/object:Gem::Version
124
- hash: 21
125
- segments:
126
- - 1
127
- - 0
128
- - 1
129
83
  version: 1.0.1
130
- type: :development
131
- version_requirements: *id007
84
+ version:
132
85
  description: Fig is a utility for configuring environments and managing dependencies across a team of developers. You give it a list of packages and a shell command to run; it creates an environment that includes those packages, then executes the shell command in it (the caller's environment is not affected).
133
86
  email: git@foemmel.com
134
87
  executables:
@@ -153,40 +106,31 @@ files:
153
106
  - lib/fig/windows.rb
154
107
  - LICENSE
155
108
  - README.md
156
- - spec/fig_spec.rb
157
- - spec/spec_helper.rb
158
- - spec/win_spec.rb
159
109
  has_rdoc: true
160
110
  homepage: http://github.com/mfoemmel/fig
161
111
  licenses: []
162
112
 
163
113
  post_install_message:
164
- rdoc_options: []
165
-
114
+ rdoc_options:
115
+ - --charset=UTF-8
166
116
  require_paths:
167
117
  - lib
168
118
  required_ruby_version: !ruby/object:Gem::Requirement
169
- none: false
170
119
  requirements:
171
120
  - - ">="
172
121
  - !ruby/object:Gem::Version
173
- hash: 3
174
- segments:
175
- - 0
176
122
  version: "0"
123
+ version:
177
124
  required_rubygems_version: !ruby/object:Gem::Requirement
178
- none: false
179
125
  requirements:
180
126
  - - ">="
181
127
  - !ruby/object:Gem::Version
182
- hash: 3
183
- segments:
184
- - 0
185
128
  version: "0"
129
+ version:
186
130
  requirements: []
187
131
 
188
132
  rubyforge_project:
189
- rubygems_version: 1.5.2
133
+ rubygems_version: 1.3.5
190
134
  signing_key:
191
135
  specification_version: 3
192
136
  summary: Fig is a utility for configuring environments and managing dependencies across a team of developers..