fig 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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]