fig 0.2.3 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/Changes CHANGED
@@ -1,3 +1,39 @@
1
+ v0.2.5
2
+
3
+ Backwards incompatibilities:
4
+
5
+ - The layout of $FIG_HOME has changed in a backwards-incompatible manner (See
6
+ "Bug fix" section below).
7
+
8
+ When run with a local repository created by an earlier version of Fig, Fig
9
+ will exit with the message
10
+
11
+ Local repository is in version 1 format. This version of fig can only
12
+ deal with repositories in version 2 format. Either point $FIG_HOME to a
13
+ different location or rename or delete «existing path». (Be mindful of
14
+ packages that have been published only locally.)
15
+
16
+ If you don't have any packages that were were only locally published (i.e.
17
+ created using the --publish-local option), it should be safe to simply
18
+ remove the directory and then use the --update or --update-if-missing
19
+ option to pull packages from the remote repository.
20
+
21
+ Any local repository created by this version of Fig will not be readable by
22
+ earlier versions. Fig v0.1.64 and later will fail with a "Local repository
23
+ is in version 2 format. This version of fig can only deal with repositories
24
+ in version 1 format." message when reading a repository created by this
25
+ version.
26
+
27
+ Bug fix:
28
+
29
+ - The contents of packages are no longer intermingled with archives used in
30
+ the packages, meaning that there's a smaller chance of different assets
31
+ clobbering each other and of packages getting corrupted.
32
+
33
+ v0.2.4.beta.1
34
+
35
+ - Test release
36
+
1
37
  v0.2.3
2
38
 
3
39
  Backwards incompatibilities:
data/lib/fig.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fig
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.5'
3
3
  end
@@ -321,18 +321,18 @@ class Fig::OperatingSystem
321
321
  return basename, path
322
322
  end
323
323
 
324
- def download_and_unpack_archive(url, download_directory)
324
+ def download_and_unpack_archive(url, download_directory, unpack_directory)
325
325
  basename, path = download_resource(url, download_directory)
326
326
 
327
327
  case path
328
328
  when /\.tar\.gz$/
329
- unpack_archive(download_directory, path)
329
+ unpack_archive(unpack_directory, path)
330
330
  when /\.tgz$/
331
- unpack_archive(download_directory, path)
331
+ unpack_archive(unpack_directory, path)
332
332
  when /\.tar\.bz2$/
333
- unpack_archive(download_directory, path)
333
+ unpack_archive(unpack_directory, path)
334
334
  when /\.zip$/
335
- unpack_archive(download_directory, path)
335
+ unpack_archive(unpack_directory, path)
336
336
  else
337
337
  Fig::Logging.fatal "Unknown archive type: #{basename}"
338
338
  raise Fig::NetworkError.new("Unknown archive type: #{basename}")
@@ -396,7 +396,7 @@ class Fig::OperatingSystem
396
396
  end
397
397
  end
398
398
  else
399
- if !File.exist?(target) || File.mtime(source) != File.mtime(target)
399
+ if ! File.exist?(target) || File.mtime(source) != File.mtime(target)
400
400
  log_info "#{msg} #{target}" if msg
401
401
  FileUtils.mkdir_p(File.dirname(target))
402
402
  FileUtils.cp(source, target)
@@ -405,8 +405,8 @@ class Fig::OperatingSystem
405
405
  end
406
406
  end
407
407
 
408
- def move_file(dir, from, to)
409
- Dir.chdir(dir) { FileUtils.mv(from, to, :force => true) }
408
+ def move_file(directory, from, to)
409
+ Dir.chdir(directory) { FileUtils.mv(from, to, :force => true) }
410
410
  end
411
411
 
412
412
  def log_info(msg)
@@ -442,8 +442,13 @@ class Fig::OperatingSystem
442
442
  # .tar.gz
443
443
  # .tgz
444
444
  # .zip
445
- def unpack_archive(dir, file)
446
- Dir.chdir(dir) do
445
+ def unpack_archive(directory, file)
446
+ FileUtils.mkdir_p directory
447
+ Dir.chdir(directory) do
448
+ if ! File.exists? file
449
+ raise Fig::RepositoryError.new "#{file} does not exist."
450
+ end
451
+
447
452
  ::Archive.read_open_filename(file) do |reader|
448
453
  while entry = reader.next_header
449
454
  begin
@@ -21,16 +21,16 @@ class Fig::Package
21
21
  attr_reader :name
22
22
  attr_reader :version
23
23
  attr_reader :description
24
- attr_reader :directory
24
+ attr_reader :runtime_directory
25
25
  attr_reader :statements
26
26
  attr_accessor :backtrace
27
27
  attr_accessor :unparsed_text
28
28
 
29
- def initialize(name, version, description, directory, statements)
29
+ def initialize(name, version, description, runtime_directory, statements)
30
30
  @name = name
31
31
  @version = version
32
32
  @description = description
33
- @directory = directory
33
+ @runtime_directory = runtime_directory
34
34
  @statements = statements
35
35
  @applied_config_names = []
36
36
  @backtrace = nil
@@ -20,11 +20,12 @@ module Fig; end
20
20
  # Overall management of a repository. Handles local operations itself;
21
21
  # defers remote operations to others.
22
22
  class Fig::Repository
23
- METADATA_SUBDIRECTORY = '_meta'
24
- PACKAGE_FILE_IN_REPO = '.fig'
25
- RESOURCES_FILE = 'resources.tar.gz'
26
- VERSION_FILE_NAME = 'repository-format-version'
27
- VERSION_SUPPORTED = 1
23
+ METADATA_SUBDIRECTORY = '_meta'
24
+ PACKAGE_FILE_IN_REPO = '.fig'
25
+ RESOURCES_FILE = 'resources.tar.gz'
26
+ VERSION_FILE_NAME = 'repository-format-version'
27
+ LOCAL_VERSION_SUPPORTED = 2
28
+ REMOTE_VERSION_SUPPORTED = 1
28
29
 
29
30
  def initialize(
30
31
  os,
@@ -49,13 +50,18 @@ class Fig::Repository
49
50
  end
50
51
 
51
52
  def list_packages
52
- check_local_repository_format()
53
+ check_local_repository_format
53
54
 
54
55
  results = []
55
- if File.exist?(local_package_directory())
56
- @operating_system.list(local_package_directory()).each do |name|
57
- @operating_system.list(File.join(local_package_directory(), name)).each do
56
+ if File.exist?(local_package_directory)
57
+ @operating_system.list(local_package_directory).each do
58
+ |name|
59
+
60
+ @operating_system.list(
61
+ File.join local_package_directory(), name
62
+ ).each do
58
63
  |version|
64
+
59
65
  results << Fig::PackageDescriptor.format(name, version, nil)
60
66
  end
61
67
  end
@@ -114,7 +120,7 @@ class Fig::Repository
114
120
 
115
121
  @package_cache.remove_package(descriptor.name, descriptor.version)
116
122
 
117
- FileUtils.rm_rf(local_dir_for_package(descriptor))
123
+ nuke_package descriptor
118
124
 
119
125
  return
120
126
  end
@@ -128,16 +134,19 @@ class Fig::Repository
128
134
  end
129
135
 
130
136
  publisher = Fig::RepositoryPackagePublisher.new
131
- publisher.operating_system = @operating_system
132
- publisher.publish_listeners = @publish_listeners
133
- publisher.package_statements = package_statements
134
- publisher.descriptor = descriptor
135
- publisher.source_package = source_package
136
- publisher.was_forced = was_forced
137
- publisher.base_temp_dir = base_temp_dir
138
- publisher.local_dir_for_package = local_dir_for_package(descriptor)
139
- publisher.remote_dir_for_package = remote_dir_for_package(descriptor)
140
- publisher.local_only = local_only
137
+ publisher.operating_system = @operating_system
138
+ publisher.publish_listeners = @publish_listeners
139
+ publisher.package_statements = package_statements
140
+ publisher.descriptor = descriptor
141
+ publisher.source_package = source_package
142
+ publisher.was_forced = was_forced
143
+ publisher.base_temp_dir = base_temp_dir
144
+ publisher.runtime_for_package = runtime_for_package(descriptor)
145
+ publisher.local_directory_for_package =
146
+ local_directory_for_package(descriptor)
147
+ publisher.remote_directory_for_package =
148
+ remote_directory_for_package(descriptor)
149
+ publisher.local_only = local_only
141
150
  publisher.local_fig_file_for_package =
142
151
  local_fig_file_for_package(descriptor)
143
152
  publisher.remote_fig_file_for_package =
@@ -161,28 +170,35 @@ class Fig::Repository
161
170
 
162
171
  version_file = local_version_file()
163
172
  if not File.exist?(version_file)
164
- File.open(version_file, 'w') { |handle| handle.write(VERSION_SUPPORTED) }
173
+ File.open(version_file, 'w') { |handle| handle.write(LOCAL_VERSION_SUPPORTED) }
165
174
  end
166
175
 
167
176
  return
168
177
  end
169
178
 
170
179
  def check_local_repository_format()
171
- check_repository_format('Local', local_repository_version())
180
+ version = local_repository_version
181
+
182
+ if version != LOCAL_VERSION_SUPPORTED
183
+ message =
184
+ "Local repository is in version #{version} format. This version of fig can only deal with repositories in version #{LOCAL_VERSION_SUPPORTED} format."
185
+ if version < LOCAL_VERSION_SUPPORTED
186
+ message +=
187
+ " Either point $FIG_HOME to a different location or rename or delete #{@local_repository_directory}. (Be mindful of packages that have been published only locally.)"
188
+ end
189
+ Fig::Logging.fatal message
190
+ raise Fig::RepositoryError.new
191
+ end
172
192
 
173
193
  return
174
194
  end
175
195
 
176
196
  def check_remote_repository_format()
177
- check_repository_format('Remote', remote_repository_version())
178
-
179
- return
180
- end
197
+ version = remote_repository_version
181
198
 
182
- def check_repository_format(name, version)
183
- if version != VERSION_SUPPORTED
199
+ if version != REMOTE_VERSION_SUPPORTED
184
200
  Fig::Logging.fatal \
185
- "#{name} repository is in version #{version} format. This version of fig can only deal with repositories in version #{VERSION_SUPPORTED} format."
201
+ "Remote repository is in version #{version} format. This version of fig can only deal with repositories in version #{REMOTE_VERSION_SUPPORTED} format."
186
202
  raise Fig::RepositoryError.new
187
203
  end
188
204
 
@@ -205,7 +221,11 @@ class Fig::Repository
205
221
  end
206
222
 
207
223
  def local_package_directory()
208
- return File.expand_path(File.join(@local_repository_directory, 'repos'))
224
+ return File.expand_path(File.join(@local_repository_directory, 'packages'))
225
+ end
226
+
227
+ def package_runtime_directory()
228
+ return File.expand_path(File.join(@local_repository_directory, 'runtime'))
209
229
  end
210
230
 
211
231
  def remote_repository_version()
@@ -259,7 +279,7 @@ class Fig::Repository
259
279
  end
260
280
 
261
281
  def read_local_package(descriptor)
262
- directory = local_dir_for_package(descriptor)
282
+ directory = local_directory_for_package(descriptor)
263
283
  return read_package_from_directory(directory, descriptor)
264
284
  end
265
285
 
@@ -283,10 +303,10 @@ class Fig::Repository
283
303
  return
284
304
  end
285
305
 
286
- def install_package(descriptor, temp_dir)
287
- remote_fig_file = remote_fig_file_for_package(descriptor)
288
- local_dir = local_dir_for_package(descriptor)
289
- local_fig_file = fig_file_for_package_download(local_dir)
306
+ def install_package(descriptor, temporary_directory)
307
+ remote_fig_file = remote_fig_file_for_package(descriptor)
308
+ package_directory = local_directory_for_package(descriptor)
309
+ local_fig_file = fig_file_for_package_download(package_directory)
290
310
 
291
311
  if @operating_system.path_up_to_date? remote_fig_file, local_fig_file
292
312
  Fig::Logging.debug \
@@ -294,41 +314,66 @@ class Fig::Repository
294
314
  return
295
315
  end
296
316
 
297
- temp_fig_file = fig_file_for_package_download(temp_dir)
317
+ temporary_package = File.join temporary_directory, 'packages'
318
+ temporary_runtime = File.join temporary_directory, 'runtime'
319
+ temp_fig_file = fig_file_for_package_download(temporary_package)
298
320
 
299
- FileUtils.rm_rf temp_dir
300
- if File.exist? local_dir
301
- FileUtils.mkdir_p File.dirname(temp_dir)
302
- FileUtils.cp_r local_dir, temp_dir, :preserve => true
321
+ FileUtils.rm_rf temporary_directory
322
+ if File.exist? package_directory
323
+ FileUtils.mkdir_p File.dirname(temporary_package)
324
+ FileUtils.cp_r(
325
+ package_directory, temporary_package, :preserve => true
326
+ )
303
327
  else
304
- FileUtils.mkdir_p temp_dir
328
+ FileUtils.mkdir_p temporary_package
305
329
  end
306
330
 
307
331
  return if ! @operating_system.download(remote_fig_file, temp_fig_file)
308
332
 
309
- package = read_package_from_directory(temp_dir, descriptor)
333
+ package = read_package_from_directory(temporary_package, descriptor)
334
+
335
+ remote_package_directory = remote_directory_for_package(descriptor)
336
+ package.archive_locations.each do
337
+ |archive_location|
310
338
 
311
- remote_package_directory = remote_dir_for_package(descriptor)
312
- package.archive_locations.each do |archive_location|
313
339
  if not Fig::URL.is_url?(archive_location)
314
340
  archive_location = Fig::URL.append_path_components(
315
341
  remote_package_directory, [archive_location]
316
342
  )
317
343
  end
318
- @operating_system.download_and_unpack_archive(archive_location, temp_dir)
344
+ @operating_system.download_and_unpack_archive(
345
+ archive_location, temporary_package, temporary_runtime
346
+ )
319
347
  end
320
- package.resource_locations.each do |resource_location|
348
+ package.resource_locations.each do
349
+ |resource_location|
350
+
321
351
  if not Fig::URL.is_url?(resource_location)
322
352
  resource_location = Fig::URL.append_path_components(
323
353
  remote_package_directory, [resource_location]
324
354
  )
325
355
  end
326
- @operating_system.download_resource(resource_location, temp_dir)
356
+
357
+ basename, path =
358
+ @operating_system.download_resource(
359
+ resource_location, temporary_package
360
+ )
361
+
362
+ @operating_system.copy path, File.join(temporary_runtime, basename)
327
363
  end
328
364
 
329
- FileUtils.rm_rf(local_dir)
330
- FileUtils.mkdir_p( File.dirname(local_dir) )
331
- FileUtils.mv(temp_dir, local_dir)
365
+ nuke_package descriptor
366
+
367
+ FileUtils.mkdir_p File.dirname(package_directory)
368
+ FileUtils.mv temporary_package, package_directory
369
+
370
+ runtime_directory = runtime_for_package(descriptor)
371
+ if File.exists? temporary_runtime
372
+ FileUtils.mkdir_p File.dirname(runtime_directory)
373
+ FileUtils.mv temporary_runtime, runtime_directory
374
+ else
375
+ FileUtils.mkdir_p runtime_directory
376
+ end
332
377
 
333
378
  return
334
379
  end
@@ -358,7 +403,10 @@ class Fig::Repository
358
403
  content = File.read(file_name)
359
404
 
360
405
  package = @parser.parse_package(
361
- descriptor, File.dirname(file_name), descriptor.to_string(), content
406
+ descriptor,
407
+ runtime_for_package(descriptor),
408
+ descriptor.to_string(),
409
+ content
362
410
  )
363
411
 
364
412
  @package_cache.add_package(package)
@@ -368,27 +416,33 @@ class Fig::Repository
368
416
 
369
417
  def remote_fig_file_for_package(descriptor)
370
418
  return Fig::URL.append_path_components(
371
- remote_dir_for_package(descriptor), [PACKAGE_FILE_IN_REPO]
419
+ remote_directory_for_package(descriptor), [PACKAGE_FILE_IN_REPO]
372
420
  )
373
421
  end
374
422
 
375
423
  def local_fig_file_for_package(descriptor)
376
- File.join(local_dir_for_package(descriptor), PACKAGE_FILE_IN_REPO)
424
+ File.join(local_directory_for_package(descriptor), PACKAGE_FILE_IN_REPO)
377
425
  end
378
426
 
379
427
  def fig_file_for_package_download(package_download_dir)
380
428
  File.join(package_download_dir, PACKAGE_FILE_IN_REPO)
381
429
  end
382
430
 
383
- def remote_dir_for_package(descriptor)
431
+ def remote_directory_for_package(descriptor)
384
432
  return Fig::URL.append_path_components(
385
433
  remote_repository_url(), [descriptor.name, descriptor.version]
386
434
  )
387
435
  end
388
436
 
389
- def local_dir_for_package(descriptor)
437
+ def local_directory_for_package(descriptor)
390
438
  return File.join(
391
- local_package_directory(), descriptor.name, descriptor.version
439
+ local_package_directory, descriptor.name, descriptor.version
440
+ )
441
+ end
442
+
443
+ def runtime_for_package(descriptor)
444
+ return File.join(
445
+ package_runtime_directory, descriptor.name, descriptor.version
392
446
  )
393
447
  end
394
448
 
@@ -408,4 +462,11 @@ class Fig::Repository
408
462
  def package_missing?(descriptor)
409
463
  not File.exist?(local_fig_file_for_package(descriptor))
410
464
  end
465
+
466
+ def nuke_package(descriptor)
467
+ FileUtils.rm_rf runtime_for_package(descriptor)
468
+ FileUtils.rm_rf local_directory_for_package(descriptor)
469
+
470
+ return
471
+ end
411
472
  end
@@ -30,8 +30,9 @@ class Fig::RepositoryPackagePublisher
30
30
  attr_writer :source_package
31
31
  attr_writer :was_forced
32
32
  attr_writer :base_temp_dir
33
- attr_writer :local_dir_for_package
34
- attr_writer :remote_dir_for_package
33
+ attr_writer :runtime_for_package
34
+ attr_writer :local_directory_for_package
35
+ attr_writer :remote_directory_for_package
35
36
  attr_writer :local_fig_file_for_package
36
37
  attr_writer :remote_fig_file_for_package
37
38
  attr_writer :local_only
@@ -53,7 +54,7 @@ class Fig::RepositoryPackagePublisher
53
54
 
54
55
  temp_dir = publish_temp_dir()
55
56
  @operating_system.delete_and_recreate_directory(temp_dir)
56
- @operating_system.delete_and_recreate_directory(@local_dir_for_package)
57
+ @operating_system.delete_and_recreate_directory(@local_directory_for_package)
57
58
 
58
59
  fig_file = File.join(temp_dir, Fig::Repository::PACKAGE_FILE_IN_REPO)
59
60
  content, published_package = derive_definition_file
@@ -123,7 +124,7 @@ class Fig::RepositoryPackagePublisher
123
124
  begin
124
125
  published_package = Fig::Parser.new(nil, false).parse_package(
125
126
  @descriptor,
126
- @local_dir_for_package,
127
+ @runtime_for_package,
127
128
  '<package to be published>',
128
129
  file_content
129
130
  )
@@ -215,7 +216,7 @@ class Fig::RepositoryPackagePublisher
215
216
  if @resource_paths.size > 0
216
217
  check_asset_paths(@resource_paths)
217
218
 
218
- file = Fig::Repository::RESOURCES_FILE
219
+ file = File.join publish_temp_dir, Fig::Repository::RESOURCES_FILE
219
220
  @operating_system.create_archive(file, @resource_paths)
220
221
  Fig::AtExit.add { FileUtils.rm_f(file) }
221
222
 
@@ -247,7 +248,7 @@ class Fig::RepositoryPackagePublisher
247
248
  def publish_asset(asset_statement)
248
249
  asset_name = asset_statement.asset_name()
249
250
  asset_remote =
250
- Fig::URL.append_path_components @remote_dir_for_package, [asset_name]
251
+ Fig::URL.append_path_components @remote_directory_for_package, [asset_name]
251
252
 
252
253
  if Fig::URL.is_url? asset_statement.location
253
254
  asset_local = File.join(publish_temp_dir(), asset_name)
@@ -268,10 +269,16 @@ class Fig::RepositoryPackagePublisher
268
269
  end
269
270
 
270
271
  @operating_system.copy(
271
- asset_local, @local_dir_for_package + '/' + asset_name
272
+ asset_local, @local_directory_for_package + '/' + asset_name
272
273
  )
273
274
  if asset_statement.is_a?(Fig::Statement::Archive)
274
- @operating_system.unpack_archive(@local_dir_for_package, asset_name)
275
+ @operating_system.unpack_archive(
276
+ @runtime_for_package, File.absolute_path(asset_local)
277
+ )
278
+ else
279
+ @operating_system.copy(
280
+ asset_local, @runtime_for_package + '/' + asset_name
281
+ )
275
282
  end
276
283
 
277
284
  return
@@ -302,8 +309,8 @@ class Fig::RepositoryPackagePublisher
302
309
  publish_information[:was_forced] = @was_forced ? true : false
303
310
  publish_information[:local_only] = @local_only ? true : false
304
311
 
305
- publish_information[:local_destination] = @local_dir_for_package
306
- publish_information[:remote_destination] = @remote_dir_for_package
312
+ publish_information[:local_destination] = @local_directory_for_package
313
+ publish_information[:remote_destination] = @remote_directory_for_package
307
314
 
308
315
  @publish_listeners.each do
309
316
  |listener|
@@ -352,7 +359,7 @@ class Fig::RepositoryPackagePublisher
352
359
  tokenized_value = statement.tokenized_value
353
360
  expansion_happened = false
354
361
  expanded_value = tokenized_value.to_expanded_string {
355
- expansion_happened = true; published_package.directory
362
+ expansion_happened = true; published_package.runtime_directory
356
363
  }
357
364
 
358
365
  if expansion_happened && ! File.exists?(expanded_value) && ! File.symlink?(expanded_value)
@@ -346,7 +346,8 @@ class Fig::RuntimeEnvironment
346
346
  return tokenized_value.to_expanded_string { '@' } \
347
347
  unless package && package.name
348
348
 
349
- variable_value = tokenized_value.to_expanded_string { package.directory }
349
+ variable_value =
350
+ tokenized_value.to_expanded_string { package.runtime_directory }
350
351
 
351
352
  return variable_value if not @retrieves.member?(statement.name)
352
353
 
@@ -424,8 +425,8 @@ class Fig::RuntimeEnvironment
424
425
  end
425
426
  end
426
427
 
427
- if package && package.directory
428
- next package.directory
428
+ if package && package.runtime_directory
429
+ next package.runtime_directory
429
430
  end
430
431
 
431
432
  next '@'
@@ -8,7 +8,9 @@ module Fig; end
8
8
  module Fig::URL
9
9
  # From https://www.rfc-editor.org/rfc/rfc1738.txt
10
10
  def self.is_url?(url)
11
- return !! ( url =~ %r< \A [a-z0-9+.-]+ : >ix )
11
+ # We don't count single-letter "protocols" to allow for Windows drive
12
+ # letters in paths.
13
+ return !! ( url =~ %r< \A [a-z0-9+.-]{2,} : >ix )
12
14
  end
13
15
 
14
16
  # Encodes components and joins with slashes.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-11 00:00:00.000000000 Z
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
16
- requirement: &6009940 !ruby/object:Gem::Requirement
16
+ requirement: &17770220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.5.8
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *6009940
24
+ version_requirements: *17770220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: highline
27
- requirement: &6009220 !ruby/object:Gem::Requirement
27
+ requirement: &17769520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.6.2
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *6009220
35
+ version_requirements: *17769520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &6008500 !ruby/object:Gem::Requirement
38
+ requirement: &17768840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *6008500
46
+ version_requirements: *17768840
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: libarchive-static
49
- requirement: &6007740 !ruby/object:Gem::Requirement
49
+ requirement: &17768160 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *6007740
57
+ version_requirements: *17768160
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: log4r
60
- requirement: &6077320 !ruby/object:Gem::Requirement
60
+ requirement: &17831440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.1.5
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *6077320
68
+ version_requirements: *17831440
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: net-netrc
71
- requirement: &6076540 !ruby/object:Gem::Requirement
71
+ requirement: &17830680 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.2.2
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *6076540
79
+ version_requirements: *17830680
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: net-sftp
82
- requirement: &6075840 !ruby/object:Gem::Requirement
82
+ requirement: &17829940 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 2.0.4
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *6075840
90
+ version_requirements: *17829940
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: net-ssh
93
- requirement: &6075060 !ruby/object:Gem::Requirement
93
+ requirement: &17829240 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 2.0.15
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *6075060
101
+ version_requirements: *17829240
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rdoc
104
- requirement: &6074180 !ruby/object:Gem::Requirement
104
+ requirement: &17828260 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '3.12'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *6074180
112
+ version_requirements: *17828260
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sys-admin
115
- requirement: &6072300 !ruby/object:Gem::Requirement
115
+ requirement: &17826460 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 1.5.6
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *6072300
123
+ version_requirements: *17826460
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: treetop
126
- requirement: &6070800 !ruby/object:Gem::Requirement
126
+ requirement: &17825240 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 1.4.2
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *6070800
134
+ version_requirements: *17825240
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: open4
137
- requirement: &6069900 !ruby/object:Gem::Requirement
137
+ requirement: &17824080 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: 1.0.1
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *6069900
145
+ version_requirements: *17824080
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: bundler
148
- requirement: &6069300 !ruby/object:Gem::Requirement
148
+ requirement: &17823440 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 1.0.15
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *6069300
156
+ version_requirements: *17823440
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rake
159
- requirement: &6085460 !ruby/object:Gem::Requirement
159
+ requirement: &17839540 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: 0.8.7
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *6085460
167
+ version_requirements: *17839540
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rspec
170
- requirement: &6082800 !ruby/object:Gem::Requirement
170
+ requirement: &17838580 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '2'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *6082800
178
+ version_requirements: *17838580
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: rspec-core
181
- requirement: &6081600 !ruby/object:Gem::Requirement
181
+ requirement: &17835700 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,10 +186,10 @@ dependencies:
186
186
  version: 2.7.1
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *6081600
189
+ version_requirements: *17835700
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: rspec-expectations
192
- requirement: &6079340 !ruby/object:Gem::Requirement
192
+ requirement: &17833380 !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
195
195
  - - ! '>='
@@ -197,10 +197,10 @@ dependencies:
197
197
  version: 2.7.0
198
198
  type: :development
199
199
  prerelease: false
200
- version_requirements: *6079340
200
+ version_requirements: *17833380
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: rspec-mocks
203
- requirement: &6099940 !ruby/object:Gem::Requirement
203
+ requirement: &17852720 !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
206
206
  - - ! '>='
@@ -208,10 +208,10 @@ dependencies:
208
208
  version: 2.7.0
209
209
  type: :development
210
210
  prerelease: false
211
- version_requirements: *6099940
211
+ version_requirements: *17852720
212
212
  - !ruby/object:Gem::Dependency
213
213
  name: simplecov
214
- requirement: &6098400 !ruby/object:Gem::Requirement
214
+ requirement: &17851120 !ruby/object:Gem::Requirement
215
215
  none: false
216
216
  requirements:
217
217
  - - ! '>='
@@ -219,10 +219,10 @@ dependencies:
219
219
  version: 0.6.2
220
220
  type: :development
221
221
  prerelease: false
222
- version_requirements: *6098400
222
+ version_requirements: *17851120
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: simplecov-html
225
- requirement: &6096480 !ruby/object:Gem::Requirement
225
+ requirement: &17849340 !ruby/object:Gem::Requirement
226
226
  none: false
227
227
  requirements:
228
228
  - - ! '>='
@@ -230,7 +230,7 @@ dependencies:
230
230
  version: 0.5.3
231
231
  type: :development
232
232
  prerelease: false
233
- version_requirements: *6096480
233
+ version_requirements: *17849340
234
234
  description: Fig is a utility for configuring environments and managing dependencies
235
235
  across a team of developers. Given a list of packages and a command to run, Fig
236
236
  builds environment variables named in those packages (e.g., CLASSPATH), then executes