fig 0.1.65 → 0.1.67

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/Changes +29 -0
  2. data/bin/fig +1 -1
  3. data/bin/fig-debug +1 -1
  4. data/lib/fig.rb +3 -0
  5. data/lib/fig/{applicationconfiguration.rb → application_configuration.rb} +0 -0
  6. data/lib/fig/{atexit.rb → at_exit.rb} +0 -0
  7. data/lib/fig/command.rb +190 -200
  8. data/lib/fig/command/action.rb +83 -0
  9. data/lib/fig/command/action/clean.rb +33 -0
  10. data/lib/fig/command/action/get.rb +48 -0
  11. data/lib/fig/command/action/help.rb +29 -0
  12. data/lib/fig/command/action/list_configs.rb +39 -0
  13. data/lib/fig/command/action/list_dependencies.rb +19 -0
  14. data/lib/fig/command/action/list_dependencies/all_configs.rb +44 -0
  15. data/lib/fig/command/action/list_dependencies/default.rb +40 -0
  16. data/lib/fig/command/action/list_dependencies/tree.rb +40 -0
  17. data/lib/fig/command/action/list_dependencies/tree_all_configs.rb +40 -0
  18. data/lib/fig/command/action/list_local.rb +29 -0
  19. data/lib/fig/command/action/list_remote.rb +33 -0
  20. data/lib/fig/command/action/list_variables.rb +23 -0
  21. data/lib/fig/command/action/list_variables/all_configs.rb +61 -0
  22. data/lib/fig/command/action/list_variables/default.rb +48 -0
  23. data/lib/fig/command/action/list_variables/tree.rb +20 -0
  24. data/lib/fig/command/action/list_variables/tree_all_configs.rb +20 -0
  25. data/lib/fig/command/action/publish.rb +52 -0
  26. data/lib/fig/command/action/publish_local.rb +29 -0
  27. data/lib/fig/command/action/role/has_no_sub_action.rb +10 -0
  28. data/lib/fig/command/action/role/has_sub_action.rb +58 -0
  29. data/lib/fig/command/action/role/list_all_configs.rb +14 -0
  30. data/lib/fig/command/action/role/list_base_config.rb +14 -0
  31. data/lib/fig/command/action/role/list_dependencies_flat.rb +22 -0
  32. data/lib/fig/command/action/role/list_dependencies_in_a_tree.rb +21 -0
  33. data/lib/fig/command/action/role/list_variables_in_a_tree.rb +150 -0
  34. data/lib/fig/command/action/role/list_walking_dependency_tree.rb +90 -0
  35. data/lib/fig/command/action/role/publish.rb +90 -0
  36. data/lib/fig/command/action/role/update.rb +46 -0
  37. data/lib/fig/command/action/run_command_line.rb +45 -0
  38. data/lib/fig/command/action/run_command_statement.rb +52 -0
  39. data/lib/fig/command/action/update.rb +17 -0
  40. data/lib/fig/command/action/update_if_missing.rb +17 -0
  41. data/lib/fig/command/action/version.rb +27 -0
  42. data/lib/fig/command/{coveragesupport.rb → coverage_support.rb} +0 -0
  43. data/lib/fig/command/{optionerror.rb → option_error.rb} +1 -1
  44. data/lib/fig/command/options.rb +185 -127
  45. data/lib/fig/command/package_applier.rb +140 -0
  46. data/lib/fig/command/package_loader.rb +124 -0
  47. data/lib/fig/{configfileerror.rb → config_file_error.rb} +1 -1
  48. data/lib/fig/{environmentvariables.rb → environment_variables.rb} +0 -0
  49. data/lib/fig/{environmentvariables/caseinsensitive.rb → environment_variables/case_insensitive.rb} +1 -1
  50. data/lib/fig/{environmentvariables/casesensitive.rb → environment_variables/case_sensitive.rb} +1 -1
  51. data/lib/fig/figrc.rb +3 -3
  52. data/lib/fig/grammar.treetop +1 -1
  53. data/lib/fig/{backtrace.rb → include_backtrace.rb} +7 -2
  54. data/lib/fig/log4r/outputter.rb +1 -1
  55. data/lib/fig/{log4rconfigerror.rb → log4r_config_error.rb} +1 -1
  56. data/lib/fig/logging.rb +2 -2
  57. data/lib/fig/{networkerror.rb → network_error.rb} +1 -1
  58. data/lib/fig/{nosuchpackageconfigerror.rb → no_such_package_config_error.rb} +2 -2
  59. data/lib/fig/{notfounderror.rb → not_found_error.rb} +0 -0
  60. data/lib/fig/{operatingsystem.rb → operating_system.rb} +5 -5
  61. data/lib/fig/package.rb +3 -3
  62. data/lib/fig/{packagecache.rb → package_cache.rb} +0 -0
  63. data/lib/fig/{packagedescriptor.rb → package_descriptor.rb} +1 -1
  64. data/lib/fig/{packagedescriptorparseerror.rb → package_descriptor_parse_error.rb} +1 -1
  65. data/lib/fig/{packageparseerror.rb → package_parse_error.rb} +1 -1
  66. data/lib/fig/parser.rb +4 -4
  67. data/lib/fig/{parserpackagebuildstate.rb → parser_package_build_state.rb} +1 -1
  68. data/lib/fig/repository.rb +17 -17
  69. data/lib/fig/{repositoryerror.rb → repository_error.rb} +1 -1
  70. data/lib/fig/{environment.rb → runtime_environment.rb} +15 -8
  71. data/lib/fig/statement/include.rb +1 -1
  72. data/lib/fig/statement/override.rb +1 -1
  73. data/lib/fig/{urlaccesserror.rb → url_access_error.rb} +1 -1
  74. data/lib/fig/{userinputerror.rb → user_input_error.rb} +0 -0
  75. data/lib/fig/{workingdirectorymaintainer.rb → working_directory_maintainer.rb} +4 -4
  76. data/lib/fig/{workingdirectorymetadata.rb → working_directory_metadata.rb} +0 -0
  77. metadata +88 -54
  78. data/VERSION +0 -1
  79. data/lib/fig/command/listing.rb +0 -363
  80. data/lib/fig/command/packageload.rb +0 -236
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.65
@@ -1,363 +0,0 @@
1
- require 'set'
2
-
3
- require 'fig/backtrace'
4
- require 'fig/package'
5
- require 'fig/packagedescriptor'
6
- require 'fig/userinputerror'
7
-
8
- module Fig; end
9
- class Fig::Command; end
10
-
11
- # Parts of the Command class related to handling of --list-* options, simply to
12
- # keep the size of command.rb down.
13
- module Fig::Command::Listing
14
- private
15
-
16
- def display_local_package_list()
17
- check_disallowed_package_descriptor('--list-local')
18
- @repository.list_packages.sort.each do |item|
19
- puts item
20
- end
21
- end
22
-
23
- def display_remote_package_list()
24
- check_disallowed_package_descriptor('--list-remote')
25
- @repository.list_remote_packages.sort.each do |item|
26
- puts item
27
- end
28
- end
29
-
30
- def display_configs_in_local_packages_list()
31
- @base_package.configs.each do |config|
32
- puts config.name
33
- end
34
-
35
- return
36
- end
37
-
38
- def handle_pre_parse_list_options()
39
- case @options.listing()
40
- when :local_packages
41
- display_local_package_list()
42
- when :remote_packages
43
- display_remote_package_list()
44
- else
45
- return false
46
- end
47
-
48
- return true
49
- end
50
-
51
- def display_dependencies()
52
- if @options.list_tree?
53
- display_dependencies_in_tree()
54
- else
55
- display_dependencies_flat()
56
- end
57
-
58
- return
59
- end
60
-
61
- def display_variables()
62
- if @options.list_tree?
63
- display_variables_in_tree()
64
- elsif @options.list_all_configs?
65
- display_variables_flat_from_repository()
66
- else
67
- display_variables_flat_from_environment()
68
- end
69
-
70
- return
71
- end
72
-
73
- def display_dependencies_in_tree()
74
- walk_dependency_tree(@base_package, derive_base_display_config_names(), nil, 0) do
75
- |package, config_name, depth|
76
-
77
- print ' ' * (depth * 4)
78
- puts package.to_s_with_config(config_name)
79
- end
80
-
81
- return
82
- end
83
-
84
- def walk_dependency_tree(base_package, config_names, backtrace, depth, &block)
85
- config_names.each do
86
- |config_name|
87
-
88
- if depth < 1
89
- @repository.reset_cached_data
90
- end
91
-
92
- yield base_package, config_name, depth
93
-
94
- new_backtrace = Fig::Backtrace.new(
95
- backtrace,
96
- Fig::PackageDescriptor.new(
97
- base_package.name(),
98
- base_package.version(),
99
- config_name
100
- )
101
- )
102
-
103
- base_package.package_dependencies(config_name, new_backtrace).each do
104
- |descriptor|
105
-
106
- package = nil
107
- if descriptor.name
108
- package =
109
- @repository.get_package(descriptor, :allow_any_version)
110
- else
111
- package = base_package
112
- end
113
-
114
- walk_dependency_tree(
115
- package, [descriptor.config], new_backtrace, depth + 1, &block
116
- )
117
- end
118
- end
119
-
120
- return
121
- end
122
-
123
- def display_dependencies_flat()
124
- packages = gather_package_dependency_configurations()
125
-
126
- if packages.empty? and $stdout.tty?
127
- puts '<no dependencies>'
128
- else
129
- strings = []
130
-
131
- packages.keys.each do
132
- |package|
133
-
134
- if @options.list_all_configs?
135
- packages[package].each do
136
- |config_name|
137
-
138
- strings << package.to_s_with_config(config_name)
139
- end
140
- else
141
- strings << package
142
- end
143
- end
144
-
145
- puts strings.uniq.sort.join("\n")
146
- end
147
-
148
- return
149
- end
150
-
151
- def derive_base_display_config_names()
152
- if @options.list_all_configs?
153
- return @base_package.config_names
154
- end
155
-
156
- return [ base_config() ]
157
- end
158
-
159
- def gather_package_dependency_configurations()
160
- packages = {}
161
- starting_config_names = derive_base_display_config_names()
162
-
163
- if ! @base_package.name.nil?
164
- packages[@base_package] = starting_config_names.to_set
165
- end
166
-
167
- walk_dependency_tree(@base_package, starting_config_names, nil, 0) do
168
- |package, config_name, depth|
169
-
170
- if (
171
- ! package.name.nil? \
172
- && ! (
173
- ! @options.list_all_configs? \
174
- && @descriptor \
175
- && package.name == @descriptor.name
176
- )
177
- )
178
- packages[package] ||= Set.new
179
- packages[package] << config_name
180
- end
181
- end
182
-
183
- if ! @options.list_all_configs? && @descriptor
184
- packages.reject! do |package, config_names|
185
- package.name == @descriptor.name
186
- end
187
- end
188
-
189
- return packages
190
- end
191
-
192
- def handle_post_parse_list_options()
193
- case @options.listing()
194
- when :configs
195
- display_configs_in_local_packages_list()
196
- when :dependencies
197
- display_dependencies()
198
- when :variables
199
- display_variables()
200
- else
201
- raise %Q<Bug in code! Found unknown :listing option value "#{options.listing()}">
202
- end
203
-
204
- return
205
- end
206
-
207
- VariableTreePackageConfig =
208
- Struct.new(
209
- :package, :config_name, :variable_statements, :child_configs, :parent
210
- )
211
-
212
- def display_variables_in_tree()
213
- # We can't just display as we walk the dependency tree because we need to
214
- # know in advance how many configurations we're going display under
215
- # another.
216
- tree = build_variable_tree()
217
-
218
- tree.child_configs().each do
219
- |child|
220
-
221
- display_variable_tree_level(child, '', '')
222
- end
223
-
224
- return
225
- end
226
-
227
- def build_variable_tree()
228
- tree = VariableTreePackageConfig.new(nil, nil, nil, [], nil)
229
- prior_depth = 0
230
- prior_node = nil
231
- current_parent = tree
232
-
233
- walk_dependency_tree(@base_package, derive_base_display_config_names(), nil, 0) do
234
- |package, config_name, depth|
235
-
236
- if depth < prior_depth
237
- (depth .. (prior_depth - 1)).each do
238
- current_parent = current_parent.parent
239
- end
240
- elsif depth == prior_depth + 1
241
- current_parent = prior_node
242
- elsif depth > prior_depth
243
- raise "Bug in code! Descended more than one level! (#{prior_depth} to #{depth}"
244
- end
245
-
246
- variable_statements = gather_variable_statements(package[config_name])
247
- node = VariableTreePackageConfig.new(
248
- package, config_name, variable_statements, [], current_parent
249
- )
250
- current_parent.child_configs() << node
251
-
252
- prior_depth = depth
253
- prior_node = node
254
- end
255
-
256
- return tree
257
- end
258
-
259
- def gather_variable_statements(config_statement)
260
- variable_statements = []
261
- config_statement.walk_statements() do |statement|
262
- case statement
263
- when Fig::Statement::Path
264
- variable_statements << statement
265
- when Fig::Statement::Set
266
- variable_statements << statement
267
- end
268
- end
269
-
270
- return variable_statements
271
- end
272
-
273
- def display_variable_tree_level(node, base_indent, package_indent)
274
- print package_indent
275
- puts node.package().to_s_with_config(node.config_name())
276
-
277
- display_variable_tree_level_variables(node, base_indent)
278
-
279
- child_configs = node.child_configs()
280
- child_count = child_configs.size()
281
-
282
- new_indent = base_indent + (child_count > 0 ? '|' : ' ') + ' ' * 3
283
- new_package_indent = base_indent + %q<'--->
284
-
285
- (0 .. (child_count - 2)).each do
286
- |child_index|
287
-
288
- display_variable_tree_level(
289
- child_configs[child_index], new_indent, new_package_indent
290
- )
291
- end
292
-
293
- if child_count > 0
294
- display_variable_tree_level(
295
- child_configs[-1], (base_indent + ' ' * 4), new_package_indent
296
- )
297
- end
298
- end
299
-
300
- def display_variable_tree_level_variables(node, base_indent)
301
- if node.child_configs().size() > 0
302
- variable_indent = base_indent + '|' + ' ' * 3
303
- else
304
- variable_indent = base_indent + ' ' * 4
305
- end
306
-
307
- variable_statements = node.variable_statements()
308
-
309
- name_width =
310
- (variable_statements.map { |statement| statement.name().length() }).max()
311
-
312
- variable_statements.each do
313
- |statement|
314
-
315
- print "#{variable_indent}"
316
- print "#{statement.name().ljust(name_width)}"
317
- print " = #{statement.value}"
318
- if statement.is_a?(Fig::Statement::Path)
319
- print ":$#{statement.name}"
320
- end
321
- print "\n"
322
- end
323
-
324
- return
325
- end
326
-
327
- def display_variables_flat_from_repository()
328
- variable_names = Set.new()
329
-
330
- walk_dependency_tree(@base_package, derive_base_display_config_names(), nil, 0) do
331
- |package, config_name, depth|
332
-
333
- package[config_name].walk_statements() do |statement|
334
- case statement
335
- when Fig::Statement::Path
336
- variable_names << statement.name()
337
- when Fig::Statement::Set
338
- variable_names << statement.name()
339
- end
340
- end
341
- end
342
-
343
- variable_names.sort.each { |name| puts name }
344
-
345
- return
346
- end
347
-
348
- def display_variables_flat_from_environment()
349
- register_package_with_environment()
350
-
351
- variables = @environment.variables()
352
-
353
- if variables.empty? and $stdout.tty?
354
- puts '<no variables>'
355
- else
356
- variables.keys.sort.each do |variable|
357
- puts variable + "=" + variables[variable]
358
- end
359
- end
360
-
361
- return
362
- end
363
- end
@@ -1,236 +0,0 @@
1
- require 'fig/package'
2
- require 'fig/packagedescriptor'
3
- require 'fig/parser'
4
-
5
- module Fig; end
6
- class Fig::Command; end
7
-
8
- # Parts of the Command class related to loading of the base Package object,
9
- # simply to keep the size of command.rb down.
10
- module Fig::Command::PackageLoad
11
- DEFAULT_FIG_FILE = 'package.fig'
12
-
13
- private
14
-
15
- def read_in_package_definition_file(config_file)
16
- if File.exist?(config_file)
17
- @package_loaded_from_path = config_file
18
-
19
- return File.read(config_file)
20
- else
21
- raise Fig::UserInputError.new(%Q<File "#{config_file}" does not exist.>)
22
- end
23
- end
24
-
25
- def load_package_definition_file_contents()
26
- package_definition_file = @options.package_definition_file()
27
-
28
- if package_definition_file == :none
29
- return nil
30
- elsif package_definition_file == '-'
31
- @package_loaded_from_path = '<standard input>'
32
-
33
- return $stdin.read
34
- elsif package_definition_file.nil?
35
- if File.exist?(DEFAULT_FIG_FILE)
36
- @package_loaded_from_path = DEFAULT_FIG_FILE
37
-
38
- return File.read(DEFAULT_FIG_FILE)
39
- end
40
- else
41
- return read_in_package_definition_file(package_definition_file)
42
- end
43
-
44
- return
45
- end
46
-
47
- def register_package_with_environment_if_not_listing_or_publishing()
48
- return if @options.listing || @options.publishing?
49
-
50
- register_package_with_environment()
51
-
52
- return
53
- end
54
-
55
- def register_package_with_environment()
56
- if @options.updating?
57
- @base_package.retrieves.each do |statement|
58
- @environment.add_retrieve(statement)
59
- end
60
- end
61
-
62
- @environment.register_package(@base_package)
63
- apply_base_config_to_environment()
64
-
65
- return
66
- end
67
-
68
- def parse_package_definition_file(definition_text)
69
- if definition_text.nil?
70
- # This package gets a free ride in terms of requiring a base config; we
71
- # synthesize it.
72
- set_base_package_to_empty_synthetic_one()
73
- return
74
- end
75
-
76
- source_description = derive_package_source_description()
77
- @base_package =
78
- Fig::Parser.new(@configuration, :check_include_versions).parse_package(
79
- Fig::PackageDescriptor.new(
80
- nil, nil, nil, :source_description => source_description
81
- ),
82
- '.',
83
- source_description,
84
- definition_text
85
- )
86
-
87
- return
88
- end
89
-
90
- def load_package_object_from_file()
91
- definition_text = load_package_definition_file_contents()
92
-
93
- parse_package_definition_file(definition_text)
94
- end
95
-
96
- def load_package_object()
97
- if @descriptor.nil?
98
- load_package_object_from_file()
99
- else
100
- @base_package = @repository.get_package(@descriptor)
101
- end
102
-
103
- register_package_with_environment_if_not_listing_or_publishing()
104
-
105
- return
106
- end
107
-
108
- def apply_base_config_to_environment(ignore_base_package = false)
109
- begin
110
- @environment.apply_config(
111
- synthesize_package_for_command_line_options(ignore_base_package),
112
- Fig::Package::DEFAULT_CONFIG,
113
- nil
114
- )
115
- rescue Fig::NoSuchPackageConfigError => exception
116
- make_no_such_package_exception_descriptive(exception)
117
- end
118
-
119
- return
120
- end
121
-
122
- def set_base_package_to_empty_synthetic_one()
123
- @base_package = Fig::Package.new(
124
- nil,
125
- nil,
126
- '.',
127
- [
128
- Fig::Statement::Configuration.new(
129
- nil,
130
- %Q<[synthetic statement created in #{__FILE__} line #{__LINE__}]>,
131
- base_config(),
132
- []
133
- )
134
- ]
135
- )
136
-
137
- return
138
- end
139
-
140
- def synthesize_package_for_command_line_options(ignore_base_package)
141
- configuration_statements = []
142
-
143
- if not ignore_base_package
144
- configuration_statements << Fig::Statement::Include.new(
145
- nil,
146
- %Q<[synthetic statement created in #{__FILE__} line #{__LINE__}]>,
147
- Fig::PackageDescriptor.new(
148
- @base_package.name(), @base_package.version(), base_config()
149
- ),
150
- nil
151
- )
152
- end
153
-
154
- configuration_statements << @options.environment_statements()
155
-
156
- configuration_statement =
157
- Fig::Statement::Configuration.new(
158
- nil,
159
- %Q<[synthetic statement created in #{__FILE__} line #{__LINE__}]>,
160
- Fig::Package::DEFAULT_CONFIG,
161
- configuration_statements.flatten()
162
- )
163
-
164
- return Fig::Package.new(nil, nil, '.', [configuration_statement])
165
- end
166
-
167
- def make_no_such_package_exception_descriptive(exception)
168
- if not @descriptor
169
- make_no_such_package_exception_descriptive_without_descriptor(exception)
170
- end
171
-
172
- check_no_such_package_exception_is_for_command_line_package(exception)
173
- source = derive_exception_source()
174
-
175
- message = %Q<There's no "#{base_config()}" config#{source}.>
176
- message += %q< Specify one that does like this: ">
177
- message +=
178
- Fig::PackageDescriptor.format(@descriptor.name, @descriptor.version, 'some_existing_config')
179
- message += %q<".>
180
-
181
- if @options.publishing?
182
- message += ' (Yes, this does work with --publish.)'
183
- end
184
-
185
- raise Fig::UserInputError.new(message)
186
- end
187
-
188
- def make_no_such_package_exception_descriptive_without_descriptor(exception)
189
- raise exception if config_was_specified_by_user()
190
- raise exception if not exception.descriptor.nil?
191
-
192
- source = derive_exception_source()
193
- message =
194
- %Q<No config was specified and there's no "#{Fig::Package::DEFAULT_CONFIG}" config#{source}.>
195
- config_names = @base_package.config_names()
196
- if config_names.size > 1
197
- message +=
198
- %Q< The valid configs are "#{config_names.join('", "')}".>
199
- elsif config_names.size == 1
200
- message += %Q< The only config is "#{config_names[0]}".>
201
- else
202
- message += ' Actually, there are no configs.'
203
- end
204
-
205
- raise Fig::UserInputError.new(message)
206
- end
207
-
208
- def check_no_such_package_exception_is_for_command_line_package(exception)
209
- descriptor = exception.descriptor
210
-
211
- raise exception if
212
- descriptor.name && descriptor.name != @descriptor.name
213
- raise exception if
214
- descriptor.version && descriptor.version != @descriptor.version
215
- raise exception if descriptor.config != base_config()
216
-
217
- return
218
- end
219
-
220
- def derive_exception_source()
221
- source = derive_package_source_description()
222
-
223
- return source ? %Q< in #{source}> : ''
224
- end
225
-
226
- def derive_package_source_description()
227
- if @package_loaded_from_path
228
- return @package_loaded_from_path
229
- elsif @descriptor
230
- return
231
- Fig::PackageDescriptor.format(@descriptor.name, @descriptor.version, nil)
232
- end
233
-
234
- return nil
235
- end
236
- end