fig 1.4.0 → 1.5.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.
data/lib/fig.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fig
2
- VERSION = '1.4.0'
2
+ VERSION = '1.5.0'
3
3
  end
data/lib/fig/command.rb CHANGED
@@ -248,14 +248,14 @@ class Fig::Command
248
248
  end
249
249
 
250
250
  def prepare_runtime_environment()
251
- @working_directory_maintainer = Fig::WorkingDirectoryMaintainer.new('.')
251
+ if retrieves_should_happen?
252
+ @working_directory_maintainer = Fig::WorkingDirectoryMaintainer.new('.')
252
253
 
253
- Fig::AtExit.add do
254
- @working_directory_maintainer.prepare_for_shutdown(
255
- @base_package &&
256
- retrieves_should_happen? &&
257
- ! @options.suppress_cleanup_of_retrieves
258
- )
254
+ Fig::AtExit.add do
255
+ @working_directory_maintainer.prepare_for_shutdown(
256
+ @base_package && ! @options.suppress_cleanup_of_retrieves
257
+ )
258
+ end
259
259
  end
260
260
 
261
261
  environment_variables = nil
@@ -455,7 +455,7 @@ class Fig::Command
455
455
  end
456
456
 
457
457
  def should_perform?(actions, failure_description, &predicate)
458
- yes_actions, no_actions = actions.partition &predicate
458
+ yes_actions, no_actions = actions.partition(&predicate)
459
459
  # Filter out the "don't care" actions".
460
460
  no_actions = no_actions.select { |action| ! predicate.call(action).nil? }
461
461
 
@@ -57,8 +57,7 @@ class Fig::Command::Action::DumpPackageDefinitionForCommandLine
57
57
  )
58
58
  ]
59
59
 
60
-
61
- unparsed, explanations = text_assembler.assemble_package_definition
60
+ unparsed, * = text_assembler.assemble_package_definition
62
61
  print unparsed
63
62
 
64
63
  return EXIT_SUCCESS
@@ -55,7 +55,7 @@ class Fig::Command::Action::DumpPackageDefinitionParsed
55
55
  text_assembler = Fig::PackageDefinitionTextAssembler.new :emit_as_input
56
56
  text_assembler.add_output package.statements
57
57
 
58
- unparsed, explanations = text_assembler.assemble_package_definition
58
+ unparsed, * = text_assembler.assemble_package_definition
59
59
  print unparsed
60
60
 
61
61
  return
@@ -80,7 +80,7 @@ class Fig::Command::PackageLoader
80
80
  def read_in_package_definition_file(config_file)
81
81
  if File.exist?(config_file)
82
82
  @package_loaded_from_path = config_file
83
- @package_base_directory = File.dirname config_file
83
+ @package_include_file_base_directory = File.dirname config_file
84
84
 
85
85
  return File.read(config_file)
86
86
  else
@@ -107,11 +107,12 @@ class Fig::Command::PackageLoader
107
107
  )
108
108
 
109
109
  unparsed_package = Fig::NotYetParsedPackage.new
110
- unparsed_package.descriptor = descriptor
111
- unparsed_package.working_directory = '.'
112
- unparsed_package.base_directory = @package_base_directory || '.'
113
- unparsed_package.source_description = source_description
114
- unparsed_package.unparsed_text = definition_text
110
+ unparsed_package.descriptor = descriptor
111
+ unparsed_package.working_directory = '.'
112
+ unparsed_package.include_file_base_directory =
113
+ @package_include_file_base_directory || '.'
114
+ unparsed_package.source_description = source_description
115
+ unparsed_package.unparsed_text = definition_text
115
116
 
116
117
  set_base_package(
117
118
  Fig::Parser.new(
@@ -1,10 +1,10 @@
1
1
  # Note: we very specifically do not require the files containing the
2
- # Unparser classes in order to avoid circular dependencies.
2
+ # Deparser classes in order to avoid circular dependencies.
3
3
 
4
4
  module Fig; end
5
5
 
6
- module Fig::Unparser
7
- # Determine the class of Unparser necessary for a set of Statements; the
6
+ module Fig::Deparser
7
+ # Determine the class of Deparser necessary for a set of Statements; the
8
8
  # parameter can be a single statement or multiple. Returns both the class
9
9
  # and a list of explanations of why the class was picked.
10
10
  def self.class_for_statements(
@@ -19,25 +19,25 @@ module Fig::Unparser
19
19
 
20
20
  case version
21
21
  when 0
22
- return Fig::Unparser::V0, explanations
22
+ return Fig::Deparser::V0, explanations
23
23
  when 1
24
- return Fig::Unparser::V1, explanations
24
+ return Fig::Deparser::V1, explanations
25
25
  when 2
26
- return Fig::Unparser::V2, explanations
26
+ return Fig::Deparser::V2, explanations
27
27
  end
28
28
 
29
29
  raise "Unexpected version #{version}."
30
30
  end
31
31
 
32
- def self.determine_version_and_unparse(
32
+ def self.determine_version_and_deparse(
33
33
  statements, emit_as_input_or_to_be_published_values
34
34
  )
35
- unparser_class, explanations = self.class_for_statements(
35
+ deparser_class, explanations = self.class_for_statements(
36
36
  statements, emit_as_input_or_to_be_published_values
37
37
  )
38
- unparser = unparser_class.new emit_as_input_or_to_be_published_values
38
+ deparser = deparser_class.new emit_as_input_or_to_be_published_values
39
39
 
40
- return (unparser.unparse [statements].flatten), explanations
40
+ return (deparser.deparse [statements].flatten), explanations
41
41
  end
42
42
 
43
43
  private
@@ -46,7 +46,6 @@ module Fig::Unparser
46
46
  all_statements = gather_all_statements statements
47
47
 
48
48
  if emit_as_input_or_to_be_published_values == :emit_as_input
49
- versions = []
50
49
  return all_statements.map {
51
50
  |statement|
52
51
 
@@ -95,13 +94,13 @@ module Fig::Unparser
95
94
 
96
95
  public
97
96
 
98
- def unparse(statements)
97
+ def deparse(statements)
99
98
  # It's double dispatch time!
100
99
 
101
100
  @text = ''
102
101
  @indent_level = @initial_indent_level
103
102
 
104
- statements.each { |statement| statement.unparse_as_version(self) }
103
+ statements.each { |statement| statement.deparse_as_version(self) }
105
104
 
106
105
  text = @text
107
106
  @text = nil
@@ -135,7 +134,7 @@ module Fig::Unparser
135
134
  configuration_statement.statements.each do
136
135
  |statement|
137
136
 
138
- statement.unparse_as_version(self)
137
+ statement.deparse_as_version(self)
139
138
  end
140
139
  ensure
141
140
  @indent_level -= 1
@@ -1,11 +1,11 @@
1
- require 'fig/unparser'
1
+ require 'fig/deparser'
2
2
 
3
3
  module Fig; end
4
- module Fig::Unparser; end
4
+ module Fig::Deparser; end
5
5
 
6
6
  # Handles serializing of statements in the v0 grammar.
7
- class Fig::Unparser::V0
8
- include Fig::Unparser
7
+ class Fig::Deparser::V0
8
+ include Fig::Deparser
9
9
 
10
10
  def initialize(
11
11
  emit_as_input_or_to_be_published_values,
@@ -1,13 +1,13 @@
1
- require 'fig/unparser'
2
- require 'fig/unparser/v1_base'
1
+ require 'fig/deparser'
2
+ require 'fig/deparser/v1_base'
3
3
 
4
4
  module Fig; end
5
- module Fig::Unparser; end
5
+ module Fig::Deparser; end
6
6
 
7
7
  # Handles serializing of statements in the v1 grammar.
8
- class Fig::Unparser::V1
9
- include Fig::Unparser
10
- include Fig::Unparser::V1Base
8
+ class Fig::Deparser::V1
9
+ include Fig::Deparser
10
+ include Fig::Deparser::V1Base
11
11
 
12
12
  def initialize(
13
13
  emit_as_input_or_to_be_published_values,
@@ -1,8 +1,8 @@
1
1
  module Fig; end
2
- module Fig::Unparser; end
2
+ module Fig::Deparser; end
3
3
 
4
4
  # Handles serializing of statements in the v1 grammar.
5
- module Fig::Unparser::V1Base
5
+ module Fig::Deparser::V1Base
6
6
  def command(statement)
7
7
  add_indent
8
8
  @text << %Q<command\n>
@@ -1,13 +1,13 @@
1
- require 'fig/unparser'
2
- require 'fig/unparser/v1_base'
1
+ require 'fig/deparser'
2
+ require 'fig/deparser/v1_base'
3
3
 
4
4
  module Fig; end
5
- module Fig::Unparser; end
5
+ module Fig::Deparser; end
6
6
 
7
7
  # Handles serializing of statements in the v2 grammar.
8
- class Fig::Unparser::V2
9
- include Fig::Unparser
10
- include Fig::Unparser::V1Base
8
+ class Fig::Deparser::V2
9
+ include Fig::Deparser
10
+ include Fig::Deparser::V1Base
11
11
 
12
12
  def initialize(
13
13
  emit_as_input_or_to_be_published_values,
@@ -4,13 +4,13 @@ module Fig; end
4
4
  class Fig::NotYetParsedPackage
5
5
  attr_accessor :descriptor
6
6
  attr_accessor :working_directory
7
- attr_accessor :base_directory
7
+ attr_accessor :include_file_base_directory
8
8
  attr_accessor :source_description
9
9
  attr_accessor :unparsed_text
10
10
 
11
11
  def extended_source_description()
12
12
  if source_description
13
- if source_description.start_with? working_directory
13
+ if source_description.include? "(#{working_directory})"
14
14
  return source_description
15
15
  end
16
16
 
@@ -228,7 +228,7 @@ class Fig::OperatingSystem
228
228
  rescue Archive::Error => exception
229
229
  # Nice how the error message doesn't include any information about
230
230
  # what was having the problem.
231
- message = exception.message.sub /^Extract archive failed: /, ''
231
+ message = exception.message.sub(/^Extract archive failed: /, '')
232
232
  new_exception =
233
233
  Fig::RepositoryError.new(
234
234
  "Could not extract #{entry.pathname} from #{archive_path}: #{message}"
data/lib/fig/package.rb CHANGED
@@ -22,7 +22,7 @@ class Fig::Package
22
22
  attr_reader :version
23
23
  attr_reader :description
24
24
  attr_reader :runtime_directory
25
- attr_reader :base_directory
25
+ attr_reader :include_file_base_directory
26
26
  attr_reader :statements
27
27
  attr_accessor :backtrace
28
28
  attr_accessor :unparsed_text
@@ -32,19 +32,19 @@ class Fig::Package
32
32
  version,
33
33
  description,
34
34
  runtime_directory,
35
- base_directory,
35
+ include_file_base_directory,
36
36
  statements,
37
37
  synthetic
38
38
  )
39
- @name = name
40
- @version = version
41
- @description = description
42
- @runtime_directory = runtime_directory
43
- @base_directory = base_directory
44
- @statements = statements
45
- @synthetic = synthetic
46
- @applied_config_names = []
47
- @backtrace = nil
39
+ @name = name
40
+ @version = version
41
+ @description = description
42
+ @runtime_directory = runtime_directory
43
+ @include_file_base_directory = include_file_base_directory
44
+ @statements = statements
45
+ @synthetic = synthetic
46
+ @applied_config_names = []
47
+ @backtrace = nil
48
48
  end
49
49
 
50
50
  # Was this package (supposedly) created from something other than usual
@@ -149,7 +149,7 @@ class Fig::Package
149
149
  def walk_statements(&block)
150
150
  @statements.each do |statement|
151
151
  yield statement
152
- statement.walk_statements &block
152
+ statement.walk_statements(&block)
153
153
  end
154
154
 
155
155
  return
@@ -1,8 +1,8 @@
1
+ require 'fig/deparser'
2
+ require 'fig/deparser/v0'
3
+ require 'fig/deparser/v1'
4
+ require 'fig/deparser/v2'
1
5
  require 'fig/statement/grammar_version'
2
- require 'fig/unparser'
3
- require 'fig/unparser/v0'
4
- require 'fig/unparser/v1'
5
- require 'fig/unparser/v2'
6
6
 
7
7
  module Fig; end
8
8
 
@@ -61,7 +61,7 @@ class Fig::PackageDefinitionTextAssembler
61
61
  end
62
62
 
63
63
  def assemble_package_definition()
64
- unparsed_statements, explanations = unparse_statements()
64
+ unparsed_statements, explanations = deparse_statements()
65
65
  definition =
66
66
  [@header_text, unparsed_statements, @footer_text].flatten.join("\n")
67
67
  definition.gsub!(/\n{3,}/, "\n\n")
@@ -73,8 +73,8 @@ class Fig::PackageDefinitionTextAssembler
73
73
 
74
74
  private
75
75
 
76
- def unparse_statements()
77
- unparser_class, explanations = Fig::Unparser.class_for_statements(
76
+ def deparse_statements()
77
+ deparser_class, explanations = Fig::Deparser.class_for_statements(
78
78
  @output_statements, @emit_as_input_or_to_be_published_values
79
79
  )
80
80
 
@@ -82,14 +82,14 @@ class Fig::PackageDefinitionTextAssembler
82
82
  Fig::Statement::GrammarVersion.new(
83
83
  nil,
84
84
  %Q<[synthetic statement created in #{__FILE__} line #{__LINE__}]>,
85
- %q<Fake grammar version that shouldn't be used because the Unparser should determine what gets emitted.>
85
+ %q<Fake grammar version that shouldn't be used because the Deparser should determine what gets emitted.>
86
86
  )
87
87
 
88
- unparser = unparser_class.new @emit_as_input_or_to_be_published_values
89
- text = unparser.unparse( [grammar_statement] + @output_statements )
88
+ deparser = deparser_class.new @emit_as_input_or_to_be_published_values
89
+ text = deparser.deparse( [grammar_statement] + @output_statements )
90
90
 
91
91
  explanations.unshift(
92
- "Publishing using the #{unparser.grammar_description} grammar."
92
+ "Publishing using the #{deparser.grammar_description} grammar."
93
93
  )
94
94
 
95
95
  return text, explanations
@@ -68,7 +68,7 @@ class Fig::ParserPackageBuildState
68
68
  @descriptor.version,
69
69
  @descriptor.description,
70
70
  unparsed_package.working_directory,
71
- unparsed_package.base_directory,
71
+ unparsed_package.include_file_base_directory,
72
72
  statement_objects,
73
73
  false,
74
74
  )
@@ -329,16 +329,9 @@ class Fig::Repository
329
329
  temporary_package = File.join temporary_directory, 'packages'
330
330
  temporary_runtime = File.join temporary_directory, 'runtime'
331
331
  temp_fig_file = fig_file_for_package_download(temporary_package)
332
-
333
- FileUtils.rm_rf temporary_directory
334
- if File.exist? package_directory
335
- FileUtils.mkdir_p File.dirname(temporary_package)
336
- FileUtils.cp_r(
337
- package_directory, temporary_package, :preserve => true
338
- )
339
- else
340
- FileUtils.mkdir_p temporary_package
341
- end
332
+ set_up_package_download_directories(
333
+ temporary_directory, temporary_package, package_directory
334
+ )
342
335
 
343
336
  @updating_package_definition = true
344
337
  return if ! @operating_system.download(
@@ -348,42 +341,14 @@ class Fig::Repository
348
341
  package = read_package_from_directory(temporary_package, descriptor)
349
342
  @updating_package_definition = false
350
343
 
351
- remote_package_directory = remote_directory_for_package(descriptor)
352
- package.archive_locations.each do
353
- |archive_location|
354
-
355
- if not Fig::URL.is_url?(archive_location)
356
- archive_location = Fig::URL.append_path_components(
357
- remote_package_directory, [archive_location]
358
- )
359
- end
360
- @operating_system.download_and_unpack_archive(
361
- archive_location, temporary_package, temporary_runtime
362
- )
363
- end
364
- package.resource_locations.each do
365
- |resource_location|
366
-
367
- if not Fig::URL.is_url?(resource_location)
368
- resource_location = Fig::URL.append_path_components(
369
- remote_package_directory, [resource_location]
370
- )
371
- end
372
-
373
- basename, path =
374
- @operating_system.download_resource(
375
- resource_location, temporary_package
376
- )
377
-
378
- @operating_system.copy path, File.join(temporary_runtime, basename)
379
- end
344
+ download_assets(package, descriptor, temporary_package, temporary_runtime)
380
345
 
381
346
  nuke_package descriptor
382
347
 
383
348
  FileUtils.mkdir_p File.dirname(package_directory)
384
349
  FileUtils.mv temporary_package, package_directory
385
350
 
386
- runtime_directory = runtime_for_package(descriptor)
351
+ runtime_directory = package.runtime_directory
387
352
  if File.exists? temporary_runtime
388
353
  FileUtils.mkdir_p File.dirname(runtime_directory)
389
354
  FileUtils.mv temporary_runtime, runtime_directory
@@ -420,7 +385,8 @@ class Fig::Repository
420
385
 
421
386
  unparsed_package = Fig::NotYetParsedPackage.new
422
387
  unparsed_package.descriptor = descriptor
423
- unparsed_package.working_directory = unparsed_package.base_directory =
388
+ unparsed_package.working_directory =
389
+ unparsed_package.include_file_base_directory =
424
390
  runtime_for_package(descriptor)
425
391
  unparsed_package.source_description = descriptor.to_string()
426
392
  unparsed_package.unparsed_text = content
@@ -432,6 +398,56 @@ class Fig::Repository
432
398
  return package
433
399
  end
434
400
 
401
+ def set_up_package_download_directories(
402
+ temporary_directory, temporary_package, package_directory
403
+ )
404
+ FileUtils.rm_rf temporary_directory
405
+ if File.exist? package_directory
406
+ FileUtils.mkdir_p File.dirname(temporary_package)
407
+ FileUtils.cp_r(
408
+ package_directory, temporary_package, :preserve => true
409
+ )
410
+ else
411
+ FileUtils.mkdir_p temporary_package
412
+ end
413
+
414
+ return
415
+ end
416
+
417
+ def download_assets(package, descriptor, temporary_package, temporary_runtime)
418
+ remote_package_directory = remote_directory_for_package(descriptor)
419
+ package.archive_locations.each do
420
+ |archive_location|
421
+
422
+ if not Fig::URL.is_url?(archive_location)
423
+ archive_location = Fig::URL.append_path_components(
424
+ remote_package_directory, [archive_location]
425
+ )
426
+ end
427
+ @operating_system.download_and_unpack_archive(
428
+ archive_location, temporary_package, temporary_runtime
429
+ )
430
+ end
431
+ package.resource_locations.each do
432
+ |resource_location|
433
+
434
+ if not Fig::URL.is_url?(resource_location)
435
+ resource_location = Fig::URL.append_path_components(
436
+ remote_package_directory, [resource_location]
437
+ )
438
+ end
439
+
440
+ basename, path =
441
+ @operating_system.download_resource(
442
+ resource_location, temporary_package
443
+ )
444
+
445
+ @operating_system.copy path, File.join(temporary_runtime, basename)
446
+ end
447
+
448
+ return
449
+ end
450
+
435
451
  def remote_fig_file_for_package(descriptor)
436
452
  return Fig::URL.append_path_components(
437
453
  remote_directory_for_package(descriptor), [PACKAGE_FILE_IN_REPO]