fig 0.1.57 → 0.1.59
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 +80 -0
- data/VERSION +1 -1
- data/bin/fig-debug +12 -0
- data/bin/fig.bat +1 -0
- data/lib/fig/applicationconfiguration.rb +41 -41
- data/lib/fig/backtrace.rb +28 -30
- data/lib/fig/command.rb +52 -112
- data/lib/fig/command/listing.rb +207 -41
- data/lib/fig/command/packageload.rb +137 -0
- data/lib/fig/environment.rb +59 -72
- data/lib/fig/environmentvariables.rb +44 -0
- data/lib/fig/environmentvariables/caseinsensitive.rb +49 -0
- data/lib/fig/environmentvariables/casesensitive.rb +30 -0
- data/lib/fig/grammar.treetop +60 -35
- data/lib/fig/log4r/outputter.rb +96 -0
- data/lib/fig/logging.rb +2 -1
- data/lib/fig/logging/colorizable.rb +14 -0
- data/lib/fig/nosuchpackageconfigerror.rb +15 -0
- data/lib/fig/operatingsystem.rb +24 -13
- data/lib/fig/options.rb +70 -20
- data/lib/fig/package.rb +25 -26
- data/lib/fig/packagecache.rb +3 -3
- data/lib/fig/packagedescriptor.rb +36 -19
- data/lib/fig/packageparseerror.rb +7 -0
- data/lib/fig/parser.rb +76 -39
- data/lib/fig/repository.rb +131 -93
- data/lib/fig/retriever.rb +61 -39
- data/lib/fig/statement.rb +24 -2
- data/lib/fig/statement/archive.rb +4 -6
- data/lib/fig/statement/command.rb +4 -6
- data/lib/fig/statement/configuration.rb +7 -9
- data/lib/fig/statement/include.rb +49 -32
- data/lib/fig/statement/override.rb +7 -8
- data/lib/fig/statement/path.rb +4 -6
- data/lib/fig/statement/publish.rb +4 -11
- data/lib/fig/statement/resource.rb +4 -6
- data/lib/fig/statement/retrieve.rb +4 -6
- data/lib/fig/statement/set.rb +4 -6
- data/lib/fig/urlaccesserror.rb +4 -5
- metadata +52 -215
- data/LICENSE +0 -27
- data/README.md +0 -526
- data/TODO +0 -4
- data/lib/fig/packageerror.rb +0 -8
- data/lib/fig/windows.rb +0 -44
data/lib/fig/command/listing.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
require 'set'
|
|
2
2
|
|
|
3
|
+
require 'fig/backtrace'
|
|
3
4
|
require 'fig/package'
|
|
5
|
+
require 'fig/packagedescriptor'
|
|
4
6
|
require 'fig/userinputerror'
|
|
5
7
|
|
|
6
8
|
module Fig; end
|
|
@@ -48,7 +50,7 @@ module Fig::Command::Listing
|
|
|
48
50
|
|
|
49
51
|
def display_dependencies()
|
|
50
52
|
if @options.list_tree?
|
|
51
|
-
display_dependencies_in_tree(
|
|
53
|
+
display_dependencies_in_tree()
|
|
52
54
|
else
|
|
53
55
|
display_dependencies_flat()
|
|
54
56
|
end
|
|
@@ -58,35 +60,60 @@ module Fig::Command::Listing
|
|
|
58
60
|
|
|
59
61
|
def display_variables()
|
|
60
62
|
if @options.list_tree?
|
|
61
|
-
|
|
63
|
+
display_variables_in_tree()
|
|
64
|
+
elsif @options.list_all_configs?
|
|
65
|
+
display_variables_flat_from_repository()
|
|
62
66
|
else
|
|
63
|
-
|
|
67
|
+
display_variables_flat_from_environment()
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
return
|
|
67
71
|
end
|
|
68
72
|
|
|
69
|
-
def display_dependencies_in_tree(
|
|
73
|
+
def display_dependencies_in_tree()
|
|
74
|
+
walk_dependency_tree(@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)
|
|
70
85
|
config_names.each do
|
|
71
86
|
|config_name|
|
|
72
87
|
|
|
73
|
-
|
|
74
|
-
|
|
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
|
+
)
|
|
75
102
|
|
|
76
|
-
base_package.package_dependencies(config_name).each do
|
|
103
|
+
base_package.package_dependencies(config_name, new_backtrace).each do
|
|
77
104
|
|descriptor|
|
|
78
105
|
|
|
79
106
|
package = nil
|
|
80
107
|
if descriptor.name
|
|
81
108
|
package =
|
|
82
|
-
@repository.get_package(
|
|
83
|
-
descriptor.name, descriptor.version, false, :allow_any_version
|
|
84
|
-
)
|
|
109
|
+
@repository.get_package(descriptor, :allow_any_version)
|
|
85
110
|
else
|
|
86
111
|
package = base_package
|
|
87
112
|
end
|
|
88
113
|
|
|
89
|
-
|
|
114
|
+
walk_dependency_tree(
|
|
115
|
+
package, [descriptor.config], new_backtrace, depth + 1, &block
|
|
116
|
+
)
|
|
90
117
|
end
|
|
91
118
|
end
|
|
92
119
|
|
|
@@ -94,25 +121,28 @@ module Fig::Command::Listing
|
|
|
94
121
|
end
|
|
95
122
|
|
|
96
123
|
def display_dependencies_flat()
|
|
97
|
-
|
|
98
|
-
packages = gather_package_depencency_configurations(base_config_names)
|
|
124
|
+
packages = gather_package_dependency_configurations()
|
|
99
125
|
|
|
100
126
|
if packages.empty? and $stdout.tty?
|
|
101
127
|
puts '<no dependencies>'
|
|
102
128
|
else
|
|
103
|
-
|
|
129
|
+
strings = []
|
|
130
|
+
|
|
131
|
+
packages.keys.each do
|
|
104
132
|
|package|
|
|
105
133
|
|
|
106
134
|
if @options.list_all_configs?
|
|
107
|
-
packages[package].
|
|
135
|
+
packages[package].each do
|
|
108
136
|
|config_name|
|
|
109
137
|
|
|
110
|
-
|
|
138
|
+
strings << package.to_s_with_config(config_name)
|
|
111
139
|
end
|
|
112
140
|
else
|
|
113
|
-
|
|
141
|
+
strings << package
|
|
114
142
|
end
|
|
115
143
|
end
|
|
144
|
+
|
|
145
|
+
puts strings.uniq.sort.join("\n")
|
|
116
146
|
end
|
|
117
147
|
|
|
118
148
|
return
|
|
@@ -123,40 +153,36 @@ module Fig::Command::Listing
|
|
|
123
153
|
return @package.config_names
|
|
124
154
|
end
|
|
125
155
|
|
|
126
|
-
return [
|
|
127
|
-
@descriptor && @descriptor.config || Fig::Package::DEFAULT_CONFIG
|
|
128
|
-
]
|
|
156
|
+
return [ base_config() ]
|
|
129
157
|
end
|
|
130
158
|
|
|
131
|
-
def
|
|
159
|
+
def gather_package_dependency_configurations()
|
|
132
160
|
packages = {}
|
|
161
|
+
starting_config_names = derive_base_display_config_names()
|
|
133
162
|
|
|
134
|
-
if ! @package.
|
|
163
|
+
if ! @package.name.nil?
|
|
135
164
|
packages[@package] = starting_config_names.to_set
|
|
136
165
|
end
|
|
137
166
|
|
|
138
|
-
starting_config_names
|
|
139
|
-
|config_name|
|
|
167
|
+
walk_dependency_tree(@package, starting_config_names, nil, 0) do
|
|
168
|
+
|package, config_name, depth|
|
|
140
169
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
packages[package] << statement.name
|
|
152
|
-
end
|
|
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
|
|
153
180
|
end
|
|
154
181
|
end
|
|
155
182
|
|
|
156
183
|
if ! @options.list_all_configs? && @descriptor
|
|
157
|
-
packages.reject! do
|
|
158
|
-
|
|
159
|
-
package.package_name == @descriptor.name
|
|
184
|
+
packages.reject! do |package, config_names|
|
|
185
|
+
package.name == @descriptor.name
|
|
160
186
|
end
|
|
161
187
|
end
|
|
162
188
|
|
|
@@ -178,7 +204,148 @@ module Fig::Command::Listing
|
|
|
178
204
|
return
|
|
179
205
|
end
|
|
180
206
|
|
|
181
|
-
|
|
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(@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(@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()
|
|
182
349
|
register_package_with_environment()
|
|
183
350
|
|
|
184
351
|
variables = @environment.variables()
|
|
@@ -193,5 +360,4 @@ module Fig::Command::Listing
|
|
|
193
360
|
|
|
194
361
|
return
|
|
195
362
|
end
|
|
196
|
-
|
|
197
363
|
end
|
|
@@ -0,0 +1,137 @@
|
|
|
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 primary 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_config_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 not found: "#{config_file}".>)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def load_package_config_file_contents()
|
|
26
|
+
package_config_file = @options.package_config_file()
|
|
27
|
+
|
|
28
|
+
if package_config_file == :none
|
|
29
|
+
return nil
|
|
30
|
+
elsif package_config_file == '-'
|
|
31
|
+
@package_loaded_from_path = '<standard input>'
|
|
32
|
+
|
|
33
|
+
return $stdin.read
|
|
34
|
+
elsif package_config_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_config_file(package_config_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
|
+
@package.retrieves.each do |var, path|
|
|
58
|
+
@environment.add_retrieve(var, path)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
@environment.register_package(@package)
|
|
63
|
+
|
|
64
|
+
config = base_config()
|
|
65
|
+
begin
|
|
66
|
+
@environment.apply_config(@package, config, nil)
|
|
67
|
+
rescue Fig::NoSuchPackageConfigError => exception
|
|
68
|
+
raise exception if not @descriptor
|
|
69
|
+
|
|
70
|
+
descriptor = exception.descriptor
|
|
71
|
+
|
|
72
|
+
raise exception if
|
|
73
|
+
descriptor.name && descriptor.name != @descriptor.name
|
|
74
|
+
raise exception if
|
|
75
|
+
descriptor.version && descriptor.version != @descriptor.version
|
|
76
|
+
raise exception if descriptor.config != config
|
|
77
|
+
|
|
78
|
+
source = nil
|
|
79
|
+
if @package_loaded_from_path
|
|
80
|
+
source = @package_loaded_from_path
|
|
81
|
+
else
|
|
82
|
+
source =
|
|
83
|
+
Fig::PackageDescriptor.format(@descriptor.name, @descriptor.version, nil)
|
|
84
|
+
end
|
|
85
|
+
source_component = source ? %Q< in #{source}> : ''
|
|
86
|
+
|
|
87
|
+
message = %Q<There's no "#{config}" configuration#{source_component}.>
|
|
88
|
+
message += %q< Specify one that does like this: ">
|
|
89
|
+
message +=
|
|
90
|
+
Fig::PackageDescriptor.format(@descriptor.name, @descriptor.version, 'some_existing_config')
|
|
91
|
+
message += %q<".>
|
|
92
|
+
|
|
93
|
+
if @options.publishing?
|
|
94
|
+
message += ' (Yes, this does work with --publish.)'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
raise Fig::UserInputError.new(message)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
return
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def parse_package_config_file(config_raw_text)
|
|
104
|
+
if config_raw_text.nil?
|
|
105
|
+
@package = Fig::Package.new(nil, nil, '.', [])
|
|
106
|
+
return
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
@package =
|
|
110
|
+
Fig::Parser.new(@configuration, :check_include_versions).parse_package(
|
|
111
|
+
Fig::PackageDescriptor.new(nil, nil, nil), '.', config_raw_text
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
register_package_with_environment_if_not_listing_or_publishing()
|
|
115
|
+
|
|
116
|
+
return
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def load_package_file()
|
|
120
|
+
config_raw_text = load_package_config_file_contents()
|
|
121
|
+
|
|
122
|
+
parse_package_config_file(config_raw_text)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def load_package_object()
|
|
126
|
+
if @descriptor.nil?
|
|
127
|
+
load_package_file()
|
|
128
|
+
else
|
|
129
|
+
# TODO: complain if config file was specified on the command-line.
|
|
130
|
+
@package = @repository.get_package(@descriptor)
|
|
131
|
+
|
|
132
|
+
register_package_with_environment_if_not_listing_or_publishing()
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
return
|
|
136
|
+
end
|
|
137
|
+
end
|