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