fig 0.1.62 → 0.1.64
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/Changes +156 -0
- data/VERSION +1 -1
- data/bin/fig +9 -2
- data/bin/fig-debug +9 -2
- data/lib/fig/applicationconfiguration.rb +3 -2
- data/lib/fig/atexit.rb +37 -0
- data/lib/fig/backtrace.rb +23 -6
- data/lib/fig/command.rb +131 -31
- data/lib/fig/command/coveragesupport.rb +40 -0
- data/lib/fig/command/listing.rb +8 -8
- data/lib/fig/command/optionerror.rb +8 -0
- data/lib/fig/{options.rb → command/options.rb} +248 -144
- data/lib/fig/command/packageload.rb +161 -62
- data/lib/fig/configfileerror.rb +2 -0
- data/lib/fig/environment.rb +350 -246
- data/lib/fig/environmentvariables/casesensitive.rb +1 -1
- data/lib/fig/figrc.rb +78 -78
- data/lib/fig/grammar.treetop +204 -219
- data/lib/fig/log4rconfigerror.rb +2 -0
- data/lib/fig/operatingsystem.rb +382 -334
- data/lib/fig/package.rb +11 -33
- data/lib/fig/packagecache.rb +1 -1
- data/lib/fig/packagedescriptor.rb +103 -21
- data/lib/fig/packagedescriptorparseerror.rb +16 -0
- data/lib/fig/parser.rb +36 -19
- data/lib/fig/parserpackagebuildstate.rb +56 -0
- data/lib/fig/repository.rb +504 -259
- data/lib/fig/statement.rb +30 -12
- data/lib/fig/statement/archive.rb +8 -5
- data/lib/fig/statement/asset.rb +19 -0
- data/lib/fig/statement/command.rb +2 -2
- data/lib/fig/statement/configuration.rb +20 -20
- data/lib/fig/statement/include.rb +13 -34
- data/lib/fig/statement/override.rb +21 -7
- data/lib/fig/statement/path.rb +22 -2
- data/lib/fig/statement/resource.rb +14 -4
- data/lib/fig/statement/retrieve.rb +34 -4
- data/lib/fig/statement/set.rb +22 -2
- data/lib/fig/workingdirectorymaintainer.rb +197 -0
- data/lib/fig/workingdirectorymetadata.rb +45 -0
- metadata +52 -46
- data/lib/fig/retriever.rb +0 -141
- data/lib/fig/statement/publish.rb +0 -15
@@ -0,0 +1,40 @@
|
|
1
|
+
# This is not a normal module/class. It contains code to be run by bin/fig and
|
2
|
+
# bin/fig-debug when doing coverage.
|
3
|
+
|
4
|
+
# Depends upon setup done by spec/spec_helper.rb.
|
5
|
+
if ! ENV['FIG_COVERAGE_RUN_COUNT'] || ! ENV['FIG_COVERAGE_ROOT_DIRECTORY']
|
6
|
+
$stderr.puts \
|
7
|
+
'FIG_COVERAGE_RUN_COUNT or FIG_COVERAGE_ROOT_DIRECTORY not set. Cannot do coverage correctly.'
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'simplecov'
|
12
|
+
|
13
|
+
# Normal load of .simplecov does not work because SimpleCov assumes that
|
14
|
+
# everything is relative to the current directory. The manipulation of
|
15
|
+
# SimpleCov.root below takes care of most things, but that doesn't affect
|
16
|
+
# .simplecov handling done in the "require 'simplecov'" above.
|
17
|
+
load File.expand_path(
|
18
|
+
File.join(ENV['FIG_COVERAGE_ROOT_DIRECTORY'], '.simplecov')
|
19
|
+
)
|
20
|
+
|
21
|
+
# We may run the identical fig command-line multiple times, so we need to give
|
22
|
+
# additional value to make the run name unique.
|
23
|
+
SimpleCov.command_name(
|
24
|
+
"fig run #{ENV['FIG_COVERAGE_RUN_COUNT']} (#{ARGV.join(' ')})"
|
25
|
+
)
|
26
|
+
SimpleCov.root ENV['FIG_COVERAGE_ROOT_DIRECTORY']
|
27
|
+
|
28
|
+
SimpleCov.at_exit do
|
29
|
+
# Have to invoke result() in order to get coverage data saved.
|
30
|
+
#
|
31
|
+
# Default at_exit() further invokes format():
|
32
|
+
#
|
33
|
+
# 1) We save time by not doing it on each fig run and let the rspec run
|
34
|
+
# handle that.
|
35
|
+
# 2) The formatter emits a message to stdout, which screws up tests of
|
36
|
+
# the fig output.
|
37
|
+
SimpleCov.result
|
38
|
+
end
|
39
|
+
|
40
|
+
SimpleCov.start
|
data/lib/fig/command/listing.rb
CHANGED
@@ -28,7 +28,7 @@ module Fig::Command::Listing
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def display_configs_in_local_packages_list()
|
31
|
-
@
|
31
|
+
@base_package.configs.each do |config|
|
32
32
|
puts config.name
|
33
33
|
end
|
34
34
|
|
@@ -71,7 +71,7 @@ module Fig::Command::Listing
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def display_dependencies_in_tree()
|
74
|
-
walk_dependency_tree(@
|
74
|
+
walk_dependency_tree(@base_package, derive_base_display_config_names(), nil, 0) do
|
75
75
|
|package, config_name, depth|
|
76
76
|
|
77
77
|
print ' ' * (depth * 4)
|
@@ -150,7 +150,7 @@ module Fig::Command::Listing
|
|
150
150
|
|
151
151
|
def derive_base_display_config_names()
|
152
152
|
if @options.list_all_configs?
|
153
|
-
return @
|
153
|
+
return @base_package.config_names
|
154
154
|
end
|
155
155
|
|
156
156
|
return [ base_config() ]
|
@@ -160,11 +160,11 @@ module Fig::Command::Listing
|
|
160
160
|
packages = {}
|
161
161
|
starting_config_names = derive_base_display_config_names()
|
162
162
|
|
163
|
-
if ! @
|
164
|
-
packages[@
|
163
|
+
if ! @base_package.name.nil?
|
164
|
+
packages[@base_package] = starting_config_names.to_set
|
165
165
|
end
|
166
166
|
|
167
|
-
walk_dependency_tree(@
|
167
|
+
walk_dependency_tree(@base_package, starting_config_names, nil, 0) do
|
168
168
|
|package, config_name, depth|
|
169
169
|
|
170
170
|
if (
|
@@ -230,7 +230,7 @@ module Fig::Command::Listing
|
|
230
230
|
prior_node = nil
|
231
231
|
current_parent = tree
|
232
232
|
|
233
|
-
walk_dependency_tree(@
|
233
|
+
walk_dependency_tree(@base_package, derive_base_display_config_names(), nil, 0) do
|
234
234
|
|package, config_name, depth|
|
235
235
|
|
236
236
|
if depth < prior_depth
|
@@ -327,7 +327,7 @@ module Fig::Command::Listing
|
|
327
327
|
def display_variables_flat_from_repository()
|
328
328
|
variable_names = Set.new()
|
329
329
|
|
330
|
-
walk_dependency_tree(@
|
330
|
+
walk_dependency_tree(@base_package, derive_base_display_config_names(), nil, 0) do
|
331
331
|
|package, config_name, depth|
|
332
332
|
|
333
333
|
package[config_name].walk_statements() do |statement|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
|
3
|
+
require 'fig/command/optionerror'
|
3
4
|
require 'fig/package'
|
4
5
|
require 'fig/packagedescriptor'
|
5
6
|
require 'fig/statement/archive'
|
@@ -7,14 +8,13 @@ require 'fig/statement/include'
|
|
7
8
|
require 'fig/statement/path'
|
8
9
|
require 'fig/statement/resource'
|
9
10
|
require 'fig/statement/set'
|
10
|
-
require 'fig/userinputerror'
|
11
11
|
|
12
12
|
module Fig; end
|
13
|
+
class Fig::Command; end
|
13
14
|
|
14
15
|
# Command-line processing.
|
15
|
-
class Fig::Options
|
16
|
+
class Fig::Command::Options
|
16
17
|
USAGE = <<-EOF
|
17
|
-
|
18
18
|
Usage:
|
19
19
|
|
20
20
|
fig [...] [DESCRIPTOR] [--update | --update-if-missing] [-- COMMAND]
|
@@ -24,6 +24,7 @@ Usage:
|
|
24
24
|
[--resource PATH]
|
25
25
|
[--archive PATH]
|
26
26
|
[--include DESCRIPTOR]
|
27
|
+
[--override DESCRIPTOR]
|
27
28
|
[--force]
|
28
29
|
[...]
|
29
30
|
|
@@ -40,7 +41,7 @@ Usage:
|
|
40
41
|
|
41
42
|
A DESCRIPTOR looks like <package name>[/<version>][:<config>] e.g. "foo",
|
42
43
|
"foo/1.2.3", and "foo/1.2.3:default". Whether ":<config>" and "/<version>" are
|
43
|
-
required or allowed is dependent upon what your are doing
|
44
|
+
required or allowed is dependent upon what your are doing.
|
44
45
|
|
45
46
|
Standard options (represented as "[...]" above):
|
46
47
|
|
@@ -57,7 +58,6 @@ Environment variables:
|
|
57
58
|
|
58
59
|
FIG_REMOTE_URL (required),
|
59
60
|
FIG_HOME (path to local repository cache, defaults to $HOME/.fighome).
|
60
|
-
|
61
61
|
EOF
|
62
62
|
|
63
63
|
LOG_LEVELS = %w[ off fatal error warn info debug all ]
|
@@ -69,57 +69,7 @@ Environment variables:
|
|
69
69
|
attr_reader :exit_code
|
70
70
|
|
71
71
|
def initialize(argv)
|
72
|
-
argv
|
73
|
-
strip_shell_command(argv)
|
74
|
-
|
75
|
-
@options = {}
|
76
|
-
|
77
|
-
@options[:home] = ENV['FIG_HOME'] || File.expand_path('~/.fighome')
|
78
|
-
|
79
|
-
parser = new_parser()
|
80
|
-
|
81
|
-
begin
|
82
|
-
parser.parse!(argv)
|
83
|
-
rescue OptionParser::MissingArgument => error
|
84
|
-
$stderr.puts "Please provide the #{error}."
|
85
|
-
@exit_code = 1
|
86
|
-
return
|
87
|
-
end
|
88
|
-
|
89
|
-
if not exit_code.nil?
|
90
|
-
return
|
91
|
-
end
|
92
|
-
|
93
|
-
if argv.size > 1
|
94
|
-
$stderr.puts %q<Extra arguments. Should only have a package/version after all other options. Had "> + argv.join(%q<", ">) + %q<" left over.>
|
95
|
-
@exit_code = 1
|
96
|
-
return
|
97
|
-
end
|
98
|
-
|
99
|
-
package_text = argv.first
|
100
|
-
if package_text
|
101
|
-
@descriptor = Fig::PackageDescriptor.parse(package_text)
|
102
|
-
if not @descriptor.name
|
103
|
-
$stderr.puts %Q<No package name specified in descriptor "#{package_text}".>
|
104
|
-
@exit_code = 1
|
105
|
-
return
|
106
|
-
end
|
107
|
-
|
108
|
-
if not @descriptor.version
|
109
|
-
$stderr.puts %Q<No version specified in descriptor "#{package_text}".>
|
110
|
-
@exit_code = 1
|
111
|
-
return
|
112
|
-
end
|
113
|
-
|
114
|
-
if @descriptor.config && config()
|
115
|
-
$stderr.puts \
|
116
|
-
%Q<Cannot specify both --config and a config in the descriptor "#{package_text}".>
|
117
|
-
@exit_code = 1
|
118
|
-
return
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
return
|
72
|
+
process_command_line(argv)
|
123
73
|
end
|
124
74
|
|
125
75
|
def archives()
|
@@ -146,6 +96,10 @@ Environment variables:
|
|
146
96
|
return @options[:get]
|
147
97
|
end
|
148
98
|
|
99
|
+
def help?()
|
100
|
+
return @options[:help]
|
101
|
+
end
|
102
|
+
|
149
103
|
def home()
|
150
104
|
return @options[:home]
|
151
105
|
end
|
@@ -178,12 +132,12 @@ Environment variables:
|
|
178
132
|
return @options[:no_figrc]
|
179
133
|
end
|
180
134
|
|
181
|
-
def
|
182
|
-
return @options[:
|
135
|
+
def environment_statements()
|
136
|
+
return @options[:environment_statements]
|
183
137
|
end
|
184
138
|
|
185
|
-
def
|
186
|
-
return @options[:
|
139
|
+
def package_definition_file()
|
140
|
+
return @options[:package_definition_file]
|
187
141
|
end
|
188
142
|
|
189
143
|
def publish?()
|
@@ -218,6 +172,10 @@ Environment variables:
|
|
218
172
|
return update? || update_if_missing?
|
219
173
|
end
|
220
174
|
|
175
|
+
def version?()
|
176
|
+
return @options[:version]
|
177
|
+
end
|
178
|
+
|
221
179
|
# Answers whether we should reset the environment to nothing, sort of like
|
222
180
|
# the standardized environment that cron(1) creates. At present, we're only
|
223
181
|
# setting this when we're listing variables. One could imagine allowing this
|
@@ -228,8 +186,7 @@ Environment variables:
|
|
228
186
|
return listing() == :variables
|
229
187
|
end
|
230
188
|
|
231
|
-
|
232
|
-
|
189
|
+
# This needs to be public for efficient use of custom command.rb wrappers.
|
233
190
|
def strip_shell_command(argv)
|
234
191
|
argv.each_with_index do |arg, i|
|
235
192
|
terminating_option = nil
|
@@ -252,30 +209,132 @@ Environment variables:
|
|
252
209
|
return
|
253
210
|
end
|
254
211
|
|
212
|
+
# This needs to be public for efficient use of custom command.rb wrappers.
|
213
|
+
def help()
|
214
|
+
puts @help_message
|
215
|
+
puts <<-'END_MESSAGE'
|
216
|
+
-- end of Fig options; anything after this is used as a command to run
|
217
|
+
--command-extra-args end of Fig options; anything after this is appended to the end of a
|
218
|
+
"command" statement in a "config" block.
|
219
|
+
|
220
|
+
END_MESSAGE
|
221
|
+
|
222
|
+
return 0
|
223
|
+
end
|
224
|
+
|
225
|
+
private
|
226
|
+
|
227
|
+
# Note that OptionParser insist that the regex match the entire value, not
|
228
|
+
# just matches the regex in general. In effect, OptionParser is wrapping the
|
229
|
+
# regex with "\A" and "\z".
|
230
|
+
STARTS_WITH_NON_HYPHEN = %r< \A [^-] .* >x
|
231
|
+
|
232
|
+
ARGUMENT_DESCRIPTION = {
|
233
|
+
'--set' => Fig::Statement::Set::ARGUMENT_DESCRIPTION,
|
234
|
+
'--append' => Fig::Statement::Path::ARGUMENT_DESCRIPTION
|
235
|
+
}
|
236
|
+
|
237
|
+
def process_command_line(argv)
|
238
|
+
argv = argv.clone
|
239
|
+
strip_shell_command(argv)
|
240
|
+
|
241
|
+
@switches = []
|
242
|
+
@options = {}
|
243
|
+
|
244
|
+
@options[:home] = ENV['FIG_HOME'] || File.expand_path('~/.fighome')
|
245
|
+
|
246
|
+
parser = new_parser()
|
247
|
+
@help_message = parser.help
|
248
|
+
|
249
|
+
begin
|
250
|
+
parser.parse!(argv)
|
251
|
+
rescue OptionParser::InvalidArgument => error
|
252
|
+
raise_invalid_argument(error.args[0], error.args[1])
|
253
|
+
rescue OptionParser::MissingArgument => error
|
254
|
+
raise_missing_argument(error.args[0])
|
255
|
+
rescue OptionParser::InvalidOption => error
|
256
|
+
raise Fig::Command::OptionError.new(
|
257
|
+
"Unknown option #{error.args[0]}.\n\n#{USAGE}"
|
258
|
+
)
|
259
|
+
rescue OptionParser::ParseError => error
|
260
|
+
raise Fig::Command::OptionError.new(error.to_s)
|
261
|
+
end
|
262
|
+
|
263
|
+
if not exit_code.nil?
|
264
|
+
return
|
265
|
+
end
|
266
|
+
|
267
|
+
if argv.size > 1
|
268
|
+
$stderr.puts %q<Extra arguments. Should only have a package/version after all other options. Had "> + argv.join(%q<", ">) + %q<" left over.>
|
269
|
+
@exit_code = 1
|
270
|
+
return
|
271
|
+
end
|
272
|
+
|
273
|
+
derive_primary_descriptor(argv.first)
|
274
|
+
|
275
|
+
return
|
276
|
+
end
|
277
|
+
|
278
|
+
def raise_missing_argument(option)
|
279
|
+
raise Fig::Command::OptionError.new(
|
280
|
+
"Please provide a value for #{option}."
|
281
|
+
)
|
282
|
+
end
|
283
|
+
|
284
|
+
def raise_invalid_argument(option, value)
|
285
|
+
# *sigh* OptionParser does not raise MissingArgument for the case of an
|
286
|
+
# option with a required value being followed by another option. It
|
287
|
+
# assigns the next option as the value instead. E.g. for
|
288
|
+
#
|
289
|
+
# fig --set --get FOO
|
290
|
+
#
|
291
|
+
# it assigns "--get" as the value of the "--set" option.
|
292
|
+
switch_strings =
|
293
|
+
(@switches.collect {|switch| [switch.short, switch.long]}).flatten
|
294
|
+
if switch_strings.any? {|string| string == value}
|
295
|
+
raise_missing_argument(option)
|
296
|
+
end
|
297
|
+
|
298
|
+
description = ARGUMENT_DESCRIPTION[option]
|
299
|
+
if description.nil?
|
300
|
+
description = ''
|
301
|
+
else
|
302
|
+
description = ' ' + description
|
303
|
+
end
|
304
|
+
|
305
|
+
raise Fig::Command::OptionError.new(
|
306
|
+
%Q<Invalid value for #{option}: "#{value}".#{description}>
|
307
|
+
)
|
308
|
+
end
|
309
|
+
|
255
310
|
def new_parser
|
256
311
|
return OptionParser.new do |parser|
|
257
312
|
set_up_queries(parser)
|
258
313
|
set_up_commands(parser)
|
259
314
|
set_up_package_configuration_source(parser)
|
260
|
-
|
315
|
+
set_up_environment_statements(parser)
|
316
|
+
set_up_package_contents_statements(parser)
|
261
317
|
set_up_remote_repository_access(parser)
|
262
318
|
set_up_program_configuration(parser)
|
263
319
|
end
|
264
320
|
end
|
265
321
|
|
266
322
|
def set_up_queries(parser)
|
267
|
-
parser.banner = USAGE
|
268
|
-
parser.
|
269
|
-
help
|
323
|
+
parser.banner = "#{USAGE}\n"
|
324
|
+
@switches << parser.define_tail(
|
325
|
+
'-?', '-h','--help','display this help text'
|
326
|
+
) do
|
327
|
+
@options[:help] = true
|
270
328
|
end
|
271
329
|
|
272
|
-
parser.
|
273
|
-
version
|
330
|
+
@switches << parser.define_tail('-v', '--version', 'print Fig version') do
|
331
|
+
@options[:version] = true
|
274
332
|
end
|
275
333
|
|
276
|
-
parser.
|
334
|
+
@switches << parser.define(
|
277
335
|
'-g',
|
278
336
|
'--get VARIABLE',
|
337
|
+
STARTS_WITH_NON_HYPHEN,
|
279
338
|
'print value of environment variable VARIABLE'
|
280
339
|
) do |get|
|
281
340
|
@options[:get] = get
|
@@ -310,7 +369,7 @@ Environment variables:
|
|
310
369
|
option_mapping.each_pair do
|
311
370
|
| type, specification |
|
312
371
|
|
313
|
-
parser.
|
372
|
+
@switches << parser.define(*specification) do
|
314
373
|
if @options[:listing]
|
315
374
|
options_string =
|
316
375
|
(
|
@@ -325,11 +384,16 @@ Environment variables:
|
|
325
384
|
end
|
326
385
|
end
|
327
386
|
|
328
|
-
parser.
|
387
|
+
@switches << parser.define(
|
388
|
+
'--list-tree', 'for listings, output a tree instead of a list'
|
389
|
+
) do
|
329
390
|
@options[:list_tree] = true
|
330
391
|
end
|
331
392
|
|
332
|
-
parser.
|
393
|
+
@switches << parser.define(
|
394
|
+
'--list-all-configs',
|
395
|
+
'for listings, follow all configurations of the base package'
|
396
|
+
) do
|
333
397
|
@options[:list_all_configs] = true
|
334
398
|
end
|
335
399
|
|
@@ -337,17 +401,17 @@ Environment variables:
|
|
337
401
|
end
|
338
402
|
|
339
403
|
def set_up_commands(parser)
|
340
|
-
parser.
|
404
|
+
@switches << parser.define('--clean', 'remove package from $FIG_HOME') do
|
341
405
|
@options[:clean] = true
|
342
406
|
end
|
343
407
|
|
344
|
-
parser.
|
408
|
+
@switches << parser.define(
|
345
409
|
'--publish', 'install package in $FIG_HOME and in remote repo'
|
346
410
|
) do |publish|
|
347
411
|
@options[:publish] = true
|
348
412
|
end
|
349
413
|
|
350
|
-
parser.
|
414
|
+
@switches << parser.define(
|
351
415
|
'--publish-local', 'install package only in $FIG_HOME'
|
352
416
|
) do |publish_local|
|
353
417
|
@options[:publish_local] = true
|
@@ -356,86 +420,136 @@ Environment variables:
|
|
356
420
|
return
|
357
421
|
end
|
358
422
|
|
423
|
+
FILE_OPTION_VALUE_PATTERN =
|
424
|
+
%r<
|
425
|
+
\A
|
426
|
+
(?:
|
427
|
+
- # Solely a hyphen, to allow for stdin
|
428
|
+
| [^-] .* # or anything not starting with a hyphen.
|
429
|
+
)
|
430
|
+
\z
|
431
|
+
>x
|
432
|
+
|
359
433
|
def set_up_package_configuration_source(parser)
|
360
|
-
parser.
|
434
|
+
@switches << parser.define(
|
361
435
|
'-c',
|
362
436
|
'--config CONFIG',
|
437
|
+
STARTS_WITH_NON_HYPHEN,
|
363
438
|
%q<apply configuration CONFIG, default is "default">
|
364
439
|
) do |config|
|
365
440
|
@options[:config] = config
|
366
441
|
end
|
367
442
|
|
368
|
-
@options[:
|
369
|
-
parser.
|
443
|
+
@options[:package_definition_file] = nil
|
444
|
+
@switches << parser.define(
|
370
445
|
'--file FILE',
|
446
|
+
FILE_OPTION_VALUE_PATTERN,
|
371
447
|
%q<read Fig file FILE. Use '-' for stdin. See also --no-file>
|
372
448
|
) do |path|
|
373
|
-
@options[:
|
449
|
+
@options[:package_definition_file] = path
|
374
450
|
end
|
375
451
|
|
376
|
-
parser.
|
452
|
+
@switches << parser.define(
|
377
453
|
'--no-file', 'ignore package.fig file in current directory'
|
378
454
|
) do |path|
|
379
|
-
@options[:
|
455
|
+
@options[:package_definition_file] = :none
|
380
456
|
end
|
381
457
|
|
382
458
|
return
|
383
459
|
end
|
384
460
|
|
385
|
-
def
|
386
|
-
@options[:
|
387
|
-
parser.
|
461
|
+
def set_up_environment_statements(parser)
|
462
|
+
@options[:environment_statements] = []
|
463
|
+
@switches << parser.define(
|
388
464
|
'-p',
|
389
465
|
'--append VARIABLE=VALUE',
|
466
|
+
STARTS_WITH_NON_HYPHEN,
|
390
467
|
'append (actually, prepend) VALUE to PATH-like environment variable VARIABLE'
|
391
|
-
) do |
|
392
|
-
|
393
|
-
|
394
|
-
|
468
|
+
) do |name_value|
|
469
|
+
@options[:environment_statements] <<
|
470
|
+
new_variable_statement('--append', name_value, Fig::Statement::Path)
|
471
|
+
end
|
472
|
+
|
473
|
+
@switches << parser.define(
|
474
|
+
'-s',
|
475
|
+
'--set VARIABLE=VALUE',
|
476
|
+
STARTS_WITH_NON_HYPHEN,
|
477
|
+
'set environment variable VARIABLE to VALUE'
|
478
|
+
) do |name_value|
|
479
|
+
@options[:environment_statements] <<
|
480
|
+
new_variable_statement('--set', name_value, Fig::Statement::Set)
|
395
481
|
end
|
396
482
|
|
397
|
-
parser.
|
483
|
+
@switches << parser.define(
|
398
484
|
'-i',
|
399
485
|
'--include DESCRIPTOR',
|
486
|
+
STARTS_WITH_NON_HYPHEN,
|
400
487
|
'include package/version:config specified in DESCRIPTOR in environment'
|
401
488
|
) do |descriptor_string|
|
402
489
|
statement =
|
403
490
|
Fig::Statement::Include.new(
|
404
|
-
nil,
|
491
|
+
nil,
|
492
|
+
'--include option',
|
493
|
+
Fig::Statement::Include.parse_descriptor(
|
494
|
+
descriptor_string,
|
495
|
+
:validation_context => ' given in a --include option'
|
496
|
+
),
|
497
|
+
nil
|
405
498
|
)
|
499
|
+
|
500
|
+
# We've never allowed versionless includes from the command-line. Hooray!
|
406
501
|
statement.complain_if_version_missing()
|
407
|
-
|
502
|
+
|
503
|
+
@options[:environment_statements] << statement
|
408
504
|
end
|
409
505
|
|
410
|
-
parser.
|
411
|
-
'
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
506
|
+
@switches << parser.define(
|
507
|
+
'--override DESCRIPTOR',
|
508
|
+
STARTS_WITH_NON_HYPHEN,
|
509
|
+
'dictate version of package as specified in DESCRIPTOR'
|
510
|
+
) do |descriptor_string|
|
511
|
+
descriptor =
|
512
|
+
Fig::Statement::Override.parse_descriptor(
|
513
|
+
descriptor_string,
|
514
|
+
:validation_context => ' given in a --override option'
|
515
|
+
)
|
516
|
+
statement =
|
517
|
+
Fig::Statement::Override.new(
|
518
|
+
nil, '--override option', descriptor.name, descriptor.version
|
519
|
+
)
|
520
|
+
|
521
|
+
@options[:environment_statements] << statement
|
416
522
|
end
|
417
523
|
|
524
|
+
return
|
525
|
+
end
|
526
|
+
|
527
|
+
def set_up_package_contents_statements(parser)
|
418
528
|
@options[:archives] = []
|
419
|
-
parser.
|
529
|
+
@switches << parser.define(
|
420
530
|
'--archive PATH',
|
531
|
+
STARTS_WITH_NON_HYPHEN,
|
421
532
|
'include PATH archive in package (when using --publish)'
|
422
533
|
) do |path|
|
423
|
-
@options[:archives] <<
|
534
|
+
@options[:archives] <<
|
535
|
+
Fig::Statement::Archive.new(nil, '--archive option', path)
|
424
536
|
end
|
425
537
|
|
426
538
|
@options[:resources] =[]
|
427
|
-
parser.
|
539
|
+
@switches << parser.define(
|
428
540
|
'--resource PATH',
|
541
|
+
STARTS_WITH_NON_HYPHEN,
|
429
542
|
'include PATH resource in package (when using --publish)'
|
430
543
|
) do |path|
|
431
|
-
@options[:resources] <<
|
544
|
+
@options[:resources] <<
|
545
|
+
Fig::Statement::Resource.new(nil, '--resource option', path)
|
432
546
|
end
|
433
547
|
|
434
548
|
return
|
435
549
|
end
|
436
550
|
|
437
551
|
def set_up_remote_repository_access(parser)
|
438
|
-
parser.
|
552
|
+
@switches << parser.define(
|
439
553
|
'-u',
|
440
554
|
'--update',
|
441
555
|
'check remote repo for updates and download to $FIG_HOME as necessary'
|
@@ -443,7 +557,7 @@ Environment variables:
|
|
443
557
|
@options[:update] = true
|
444
558
|
end
|
445
559
|
|
446
|
-
parser.
|
560
|
+
@switches << parser.define(
|
447
561
|
'-m',
|
448
562
|
'--update-if-missing',
|
449
563
|
'check remote repo for updates only if package missing from $FIG_HOME'
|
@@ -451,14 +565,14 @@ Environment variables:
|
|
451
565
|
@options[:update_if_missing] = true
|
452
566
|
end
|
453
567
|
|
454
|
-
parser.
|
568
|
+
@switches << parser.define(
|
455
569
|
'-l', '--login', 'login to remote repo as a non-anonymous user'
|
456
570
|
) do
|
457
571
|
@options[:login] = true
|
458
572
|
end
|
459
573
|
|
460
574
|
@options[:force] = nil
|
461
|
-
parser.
|
575
|
+
@switches << parser.define(
|
462
576
|
'--force',
|
463
577
|
'force-overwrite existing version of a package to the remote repo'
|
464
578
|
) do |force|
|
@@ -469,22 +583,26 @@ Environment variables:
|
|
469
583
|
end
|
470
584
|
|
471
585
|
def set_up_program_configuration(parser)
|
472
|
-
parser.
|
473
|
-
'--figrc PATH',
|
586
|
+
@switches << parser.define(
|
587
|
+
'--figrc PATH',
|
588
|
+
STARTS_WITH_NON_HYPHEN,
|
589
|
+
'add PATH to configuration used for Fig'
|
474
590
|
) do |path|
|
475
591
|
@options[:figrc] = path
|
476
592
|
end
|
477
593
|
|
478
|
-
parser.
|
594
|
+
@switches << parser.define('--no-figrc', 'ignore ~/.figrc') { @options[:no_figrc] = true }
|
479
595
|
|
480
|
-
parser.
|
481
|
-
'--log-config PATH',
|
596
|
+
@switches << parser.define(
|
597
|
+
'--log-config PATH',
|
598
|
+
STARTS_WITH_NON_HYPHEN,
|
599
|
+
'use PATH file as configuration for Log4r'
|
482
600
|
) do |path|
|
483
601
|
@options[:log_config] = path
|
484
602
|
end
|
485
603
|
|
486
604
|
level_list = LOG_LEVELS.join(', ')
|
487
|
-
parser.
|
605
|
+
@switches << parser.define(
|
488
606
|
'--log-level LEVEL',
|
489
607
|
LOG_LEVELS,
|
490
608
|
LOG_ALIASES,
|
@@ -494,7 +612,7 @@ Environment variables:
|
|
494
612
|
@options[:log_level] = log_level
|
495
613
|
end
|
496
614
|
|
497
|
-
parser.
|
615
|
+
@switches << parser.define(
|
498
616
|
'--suppress-warning-include-statement-missing-version',
|
499
617
|
%q<don't complain about "include package" without a version>
|
500
618
|
) do
|
@@ -504,46 +622,32 @@ Environment variables:
|
|
504
622
|
return
|
505
623
|
end
|
506
624
|
|
507
|
-
def
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
--command-extra-args end of Fig options; anything after this is appended to the end of a
|
512
|
-
"command" statement in a "config" block.
|
513
|
-
|
514
|
-
END_MESSAGE
|
515
|
-
|
516
|
-
@exit_code = 0
|
625
|
+
def new_variable_statement(option, name_value, statement_class)
|
626
|
+
variable, value = statement_class.parse_name_value(name_value) {
|
627
|
+
raise_invalid_argument(option, name_value)
|
628
|
+
}
|
517
629
|
|
518
|
-
return
|
630
|
+
return statement_class.new(nil, "#{option} option", variable, value)
|
519
631
|
end
|
520
632
|
|
521
|
-
|
522
|
-
|
633
|
+
# This will be the base package, unless we're publishing (in which case it's
|
634
|
+
# the name to publish to.
|
635
|
+
def derive_primary_descriptor(raw_string)
|
636
|
+
return if raw_string.nil?
|
523
637
|
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
rescue
|
531
|
-
$stderr.puts 'Could not retrieve version number. Something has mucked with your Fig install.'
|
638
|
+
@descriptor = Fig::PackageDescriptor.parse(
|
639
|
+
raw_string,
|
640
|
+
:name => :required,
|
641
|
+
:version => :required,
|
642
|
+
:validation_context => ' specified on command line'
|
643
|
+
)
|
532
644
|
|
645
|
+
if @descriptor.config && config()
|
646
|
+
$stderr.puts \
|
647
|
+
%Q<Cannot specify both --config and a config in the descriptor "#{raw_string}".>
|
533
648
|
@exit_code = 1
|
534
|
-
return
|
535
649
|
end
|
536
650
|
|
537
|
-
if line !~ /\d+\.\d+\.\d+/
|
538
|
-
$stderr.puts %Q<"#{line}" does not look like a version number. Something has mucked with your Fig install.>
|
539
|
-
|
540
|
-
@exit_code = 1
|
541
|
-
return
|
542
|
-
end
|
543
|
-
|
544
|
-
puts File.basename($0) + ' v' + line
|
545
|
-
|
546
|
-
@exit_code = 0
|
547
651
|
return
|
548
652
|
end
|
549
653
|
end
|