fig 0.1.81 → 0.2.1
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 +87 -0
- data/lib/fig.rb +1 -1
- data/lib/fig/command.rb +5 -0
- data/lib/fig/command/action/dump_package_definition_for_command_line.rb +62 -0
- data/lib/fig/command/action/dump_package_definition_parsed.rb +19 -2
- data/lib/fig/command/action/list_local.rb +9 -1
- data/lib/fig/command/action/list_remote.rb +9 -1
- data/lib/fig/command/action/role/list_variables_in_a_tree.rb +1 -1
- data/lib/fig/command/action/run_command_line.rb +1 -1
- data/lib/fig/command/action/run_command_statement.rb +4 -2
- data/lib/fig/command/options.rb +50 -18
- data/lib/fig/command/options/parser.rb +16 -15
- data/lib/fig/command/package_applier.rb +5 -3
- data/lib/fig/grammar/v0.rb +287 -289
- data/lib/fig/grammar/v0.treetop +66 -42
- data/lib/fig/grammar/v1.rb +629 -533
- data/lib/fig/grammar/v1.treetop +102 -39
- data/lib/fig/grammar_monkey_patches.rb +21 -0
- data/lib/fig/operating_system.rb +53 -36
- data/lib/fig/package_descriptor.rb +1 -12
- data/lib/fig/parser.rb +8 -33
- data/lib/fig/parser_package_build_state.rb +92 -31
- data/lib/fig/repository_package_publisher.rb +2 -2
- data/lib/fig/runtime_environment.rb +54 -120
- data/lib/fig/statement.rb +6 -6
- data/lib/fig/statement/asset.rb +1 -13
- data/lib/fig/statement/command.rb +47 -0
- data/lib/fig/statement/environment_variable.rb +64 -3
- data/lib/fig/statement/grammar_version.rb +4 -0
- data/lib/fig/statement/include.rb +4 -0
- data/lib/fig/statement/override.rb +4 -0
- data/lib/fig/statement/path.rb +40 -16
- data/lib/fig/statement/retrieve.rb +61 -5
- data/lib/fig/statement/set.rb +16 -19
- data/lib/fig/string_tokenizer.rb +63 -25
- data/lib/fig/tokenized_string.rb +31 -5
- data/lib/fig/tokenized_string/plain_segment.rb +32 -2
- data/lib/fig/tokenized_string/token.rb +12 -0
- data/lib/fig/unparser.rb +27 -12
- data/lib/fig/unparser/v0.rb +4 -5
- data/lib/fig/unparser/v1.rb +43 -6
- data/lib/fig/url.rb +13 -0
- metadata +44 -42
data/lib/fig/grammar/v1.treetop
CHANGED
@@ -21,7 +21,11 @@ module Fig
|
|
21
21
|
include Fig::Grammar::Version
|
22
22
|
|
23
23
|
rule package
|
24
|
-
optional_ws_or_comment
|
24
|
+
optional_ws_or_comment
|
25
|
+
grammar_version:grammar_version?
|
26
|
+
statements:(package_statement_with_ws*)
|
27
|
+
optional_ws_or_comment
|
28
|
+
{
|
25
29
|
def to_package(directory, build_state)
|
26
30
|
return build_state.new_package_statement(
|
27
31
|
directory, grammar_version, statements
|
@@ -45,7 +49,10 @@ module Fig
|
|
45
49
|
end
|
46
50
|
|
47
51
|
rule archive
|
48
|
-
statement_start:'archive'
|
52
|
+
statement_start:'archive'
|
53
|
+
ws_or_comment+
|
54
|
+
location:quoted_or_bare_string
|
55
|
+
{
|
49
56
|
def to_package_statement(build_state)
|
50
57
|
return build_state.new_asset_statement(
|
51
58
|
Statement::Archive, statement_start, location
|
@@ -55,7 +62,10 @@ module Fig
|
|
55
62
|
end
|
56
63
|
|
57
64
|
rule resource
|
58
|
-
statement_start:'resource'
|
65
|
+
statement_start:'resource'
|
66
|
+
ws_or_comment+
|
67
|
+
location:quoted_or_bare_string
|
68
|
+
{
|
59
69
|
def to_package_statement(build_state)
|
60
70
|
return build_state.new_asset_statement(
|
61
71
|
Statement::Resource, statement_start, location
|
@@ -64,28 +74,27 @@ module Fig
|
|
64
74
|
}
|
65
75
|
end
|
66
76
|
|
67
|
-
rule asset_location
|
68
|
-
'"' ( [^"\\] / '\\' . )* '"' /
|
69
|
-
"'" ( [^'\\] / '\\' . )* "'" /
|
70
|
-
[^\s#]+
|
71
|
-
end
|
72
|
-
|
73
77
|
rule retrieve
|
74
|
-
statement_start:'retrieve'
|
78
|
+
statement_start:'retrieve'
|
79
|
+
ws_or_comment+
|
80
|
+
variable:environment_variable_name '->' path:quoted_or_bare_string
|
81
|
+
{
|
75
82
|
def to_package_statement(build_state)
|
76
|
-
return build_state.new_retrieve_statement(
|
83
|
+
return build_state.new_retrieve_statement(
|
84
|
+
statement_start, variable, path
|
85
|
+
)
|
77
86
|
end
|
78
87
|
}
|
79
88
|
end
|
80
89
|
|
81
|
-
rule retrieve_path
|
82
|
-
# TODO: this should match asset location rules, but handling of
|
83
|
-
# "[package]" substitution is going to be interesting.
|
84
|
-
[a-zA-Z0-9_/.\[\]-]+
|
85
|
-
end
|
86
|
-
|
87
90
|
rule config
|
88
|
-
statement_start:'config'
|
91
|
+
statement_start:'config'
|
92
|
+
ws_or_comment+
|
93
|
+
config_name
|
94
|
+
ws_or_comment+
|
95
|
+
statements:config_statement_with_ws*
|
96
|
+
'end'
|
97
|
+
{
|
89
98
|
def to_package_statement(build_state)
|
90
99
|
return build_state.new_configuration_statement(
|
91
100
|
statement_start, config_name, statements
|
@@ -94,10 +103,6 @@ module Fig
|
|
94
103
|
}
|
95
104
|
end
|
96
105
|
|
97
|
-
rule config_name
|
98
|
-
[a-zA-Z0-9_.-]+
|
99
|
-
end
|
100
|
-
|
101
106
|
# Shim between "config" and "config_statement" rules to allow the
|
102
107
|
# compiled v0 and v1 grammars to have the same interface.
|
103
108
|
rule config_statement_with_ws
|
@@ -132,10 +137,6 @@ module Fig
|
|
132
137
|
}
|
133
138
|
end
|
134
139
|
|
135
|
-
rule environment_variable_name
|
136
|
-
[a-zA-Z0-9_]+
|
137
|
-
end
|
138
|
-
|
139
140
|
rule set
|
140
141
|
statement_start:'set' ws_or_comment+ environment_variable_name_value {
|
141
142
|
def to_config_statement(build_state)
|
@@ -147,7 +148,10 @@ module Fig
|
|
147
148
|
end
|
148
149
|
|
149
150
|
rule path
|
150
|
-
statement_start:('add' / 'append' / 'path')
|
151
|
+
statement_start:('add' / 'append' / 'path')
|
152
|
+
ws_or_comment+
|
153
|
+
environment_variable_name_value
|
154
|
+
{
|
151
155
|
def to_config_statement(build_state)
|
152
156
|
return build_state.new_environment_variable_statement(
|
153
157
|
Statement::Path, statement_start, environment_variable_name_value
|
@@ -156,31 +160,90 @@ module Fig
|
|
156
160
|
}
|
157
161
|
end
|
158
162
|
|
159
|
-
rule environment_variable_name_value
|
160
|
-
# Should result in somewhat reasonable handling by Treetop when
|
161
|
-
# encountering mis-quoted constructs.
|
162
|
-
[^\s#\\"]* '"' ( [^"\\] / '\\' . )* '"' /
|
163
|
-
[^\s#\\']* "'" ( [^'\\] / '\\' . )* "'" /
|
164
|
-
[^\s#]+
|
165
|
-
end
|
166
|
-
|
167
163
|
rule command
|
168
|
-
statement_start:'command'
|
164
|
+
statement_start:'command'
|
165
|
+
ws_or_comment+
|
166
|
+
command_line
|
167
|
+
ws_or_comment+
|
168
|
+
'end'
|
169
|
+
{
|
169
170
|
def to_config_statement(build_state)
|
170
|
-
return build_state.
|
171
|
-
statement_start, command_line
|
171
|
+
return build_state.new_v1_command_statement(
|
172
|
+
statement_start, gather_command_argument_nodes(command_line)
|
172
173
|
)
|
173
174
|
end
|
175
|
+
|
176
|
+
def gather_command_argument_nodes(node, arguments = [])
|
177
|
+
if node.respond_to? 'quoted_or_bare_string?'
|
178
|
+
arguments << node
|
179
|
+
return arguments
|
180
|
+
end
|
181
|
+
|
182
|
+
return arguments if not node.elements
|
183
|
+
|
184
|
+
node.elements.each do
|
185
|
+
|element|
|
186
|
+
gather_command_argument_nodes(element, arguments)
|
187
|
+
end
|
188
|
+
|
189
|
+
return arguments
|
190
|
+
end
|
174
191
|
}
|
175
192
|
end
|
176
193
|
|
177
194
|
rule command_line
|
178
|
-
|
195
|
+
quoted_or_bare_string
|
196
|
+
! { |sequence| sequence[-1].text_value == 'end' }
|
197
|
+
(
|
198
|
+
ws_or_comment+
|
199
|
+
quoted_or_bare_string
|
200
|
+
! { |sequence| sequence[-1].text_value == 'end' }
|
201
|
+
)*
|
179
202
|
end
|
180
203
|
|
204
|
+
# Terminals
|
205
|
+
|
181
206
|
rule descriptor_string
|
182
207
|
[^\s#]+
|
183
208
|
end
|
209
|
+
|
210
|
+
rule config_name
|
211
|
+
[a-zA-Z0-9_.-]+
|
212
|
+
end
|
213
|
+
|
214
|
+
rule quoted_or_bare_string
|
215
|
+
# In order to deal with the hierarchy of nodes that the command_line
|
216
|
+
# rule above generates, we tag each of the expressions here so that
|
217
|
+
# they can be found in the syntax tree.
|
218
|
+
[^\s#\\"]* '"' ( [^"\\] / '\\' . )* '"'
|
219
|
+
{ def quoted_or_bare_string?() return true end }
|
220
|
+
|
221
|
+
/
|
222
|
+
|
223
|
+
[^\s#\\']* "'" ( [^'\\] / '\\' . )* "'"
|
224
|
+
{ def quoted_or_bare_string?() return true end }
|
225
|
+
|
226
|
+
/
|
227
|
+
|
228
|
+
[^\s#]+
|
229
|
+
{ def quoted_or_bare_string?() return true end }
|
230
|
+
end
|
231
|
+
|
232
|
+
rule environment_variable_name
|
233
|
+
[a-zA-Z0-9_]+
|
234
|
+
end
|
235
|
+
|
236
|
+
rule environment_variable_name_value
|
237
|
+
# This is like quoted_or_bare_string, but allows for the unquoted
|
238
|
+
# variable name followed by equals sign prior to the quotation marks
|
239
|
+
# coming in.
|
240
|
+
#
|
241
|
+
# Should result in somewhat reasonable handling by Treetop when
|
242
|
+
# encountering mis-quoted constructs.
|
243
|
+
[^\s#\\'"]* '"' ( [^"\\] / '\\' . )* '"' /
|
244
|
+
[^\s#\\'"]* "'" ( [^'\\] / '\\' . )* "'" /
|
245
|
+
[^\s#]+
|
246
|
+
end
|
184
247
|
end
|
185
248
|
end
|
186
249
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# The existence of this &!#%)(*!&% file makes me want to hurl, but it's the
|
2
|
+
# simplest way to modify the classes generated by Treetop: the Treetop grammar
|
3
|
+
# doesn't allow extensions at the grammar level, only the rule level.
|
4
|
+
|
5
|
+
require 'fig/grammar/v0'
|
6
|
+
require 'fig/grammar/v1'
|
7
|
+
|
8
|
+
module Fig; end
|
9
|
+
module Fig::Grammar; end
|
10
|
+
|
11
|
+
class Fig::Grammar::V0Parser
|
12
|
+
def version()
|
13
|
+
return 0
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Fig::Grammar::V1Parser
|
18
|
+
def version()
|
19
|
+
return 1
|
20
|
+
end
|
21
|
+
end
|
data/lib/fig/operating_system.rb
CHANGED
@@ -10,7 +10,6 @@ require 'net/sftp'
|
|
10
10
|
require 'net/netrc'
|
11
11
|
require 'rbconfig'
|
12
12
|
require 'tempfile'
|
13
|
-
require 'uri'
|
14
13
|
|
15
14
|
require 'highline/import'
|
16
15
|
|
@@ -20,6 +19,8 @@ require 'fig/environment_variables/case_sensitive'
|
|
20
19
|
require 'fig/file_not_found_error'
|
21
20
|
require 'fig/logging'
|
22
21
|
require 'fig/network_error'
|
22
|
+
require 'fig/url'
|
23
|
+
require 'fig/user_input_error'
|
23
24
|
|
24
25
|
module Fig; end
|
25
26
|
|
@@ -119,40 +120,49 @@ class Fig::OperatingSystem
|
|
119
120
|
|
120
121
|
def download_list(url)
|
121
122
|
begin
|
122
|
-
uri =
|
123
|
+
uri = Fig::URL.parse(url)
|
123
124
|
rescue
|
124
125
|
Fig::Logging.fatal %Q<Unable to parse url: "#{url}">
|
125
126
|
raise Fig::NetworkError.new
|
126
127
|
end
|
127
|
-
case uri.scheme
|
128
|
-
when 'ftp'
|
129
|
-
ftp = Net::FTP.new(uri.host)
|
130
|
-
ftp_login(ftp, uri.host)
|
131
|
-
ftp.chdir(uri.path)
|
132
|
-
dirs = ftp.nlst
|
133
|
-
ftp.close
|
134
128
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
when 'file'
|
144
|
-
packages = []
|
145
|
-
unescaped_path = CGI.unescape uri.path
|
146
|
-
return packages if ! File.exist?(unescaped_path)
|
129
|
+
begin
|
130
|
+
case uri.scheme
|
131
|
+
when 'ftp'
|
132
|
+
ftp = Net::FTP.new(uri.host)
|
133
|
+
ftp_login(ftp, uri.host)
|
134
|
+
ftp.chdir(uri.path)
|
135
|
+
dirs = ftp.nlst
|
136
|
+
ftp.close
|
147
137
|
|
148
|
-
|
149
|
-
|
138
|
+
download_ftp_list(uri, dirs)
|
139
|
+
when 'ssh'
|
140
|
+
packages = []
|
141
|
+
Net::SSH.start(uri.host, uri.user) do |ssh|
|
142
|
+
ls = ssh.exec!("[ -d #{uri.path} ] && find #{uri.path}")
|
143
|
+
strip_paths_for_list(ls, packages, uri.path)
|
144
|
+
end
|
145
|
+
packages
|
146
|
+
when 'file'
|
147
|
+
packages = []
|
148
|
+
unescaped_path = CGI.unescape uri.path
|
149
|
+
return packages if ! File.exist?(unescaped_path)
|
150
150
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
151
|
+
ls = ''
|
152
|
+
Find.find(unescaped_path) { |file| ls << file.to_s; ls << "\n" }
|
153
|
+
|
154
|
+
strip_paths_for_list(ls, packages, unescaped_path)
|
155
|
+
return packages
|
156
|
+
else
|
157
|
+
Fig::Logging.fatal "Protocol not supported: #{url}"
|
158
|
+
raise Fig::NetworkError.new "Protocol not supported: #{url}"
|
159
|
+
end
|
160
|
+
rescue SocketError => error
|
161
|
+
Fig::Logging.debug error.message
|
162
|
+
raise Fig::NetworkError.new "#{url}: #{error.message}"
|
163
|
+
rescue Errno::ETIMEDOUT => error
|
164
|
+
Fig::Logging.debug error.message
|
165
|
+
raise Fig::NetworkError.new "#{url}: #{error.message}"
|
156
166
|
end
|
157
167
|
end
|
158
168
|
|
@@ -200,7 +210,7 @@ class Fig::OperatingSystem
|
|
200
210
|
def path_up_to_date?(url, path)
|
201
211
|
return false if ! File.exist? path
|
202
212
|
|
203
|
-
uri =
|
213
|
+
uri = Fig::URL.parse(url)
|
204
214
|
case uri.scheme
|
205
215
|
when 'ftp'
|
206
216
|
begin
|
@@ -242,7 +252,7 @@ class Fig::OperatingSystem
|
|
242
252
|
# exists and is already up-to-date.
|
243
253
|
def download(url, path)
|
244
254
|
FileUtils.mkdir_p(File.dirname(path))
|
245
|
-
uri =
|
255
|
+
uri = Fig::URL.parse(url)
|
246
256
|
case uri.scheme
|
247
257
|
when 'ftp'
|
248
258
|
begin
|
@@ -263,6 +273,9 @@ class Fig::OperatingSystem
|
|
263
273
|
rescue SocketError => error
|
264
274
|
Fig::Logging.debug error.message
|
265
275
|
raise Fig::FileNotFoundError.new error.message, url
|
276
|
+
rescue Errno::ETIMEDOUT => error
|
277
|
+
Fig::Logging.debug error.message
|
278
|
+
raise Fig::FileNotFoundError.new error.message, url
|
266
279
|
end
|
267
280
|
when 'http'
|
268
281
|
log_download(url, path)
|
@@ -303,7 +316,7 @@ class Fig::OperatingSystem
|
|
303
316
|
def download_resource(url, download_directory)
|
304
317
|
FileUtils.mkdir_p(download_directory)
|
305
318
|
|
306
|
-
basename = CGI.unescape
|
319
|
+
basename = CGI.unescape Fig::URL.parse(url).path.split('/').last
|
307
320
|
path = File.join(download_directory, basename)
|
308
321
|
|
309
322
|
download(url, path)
|
@@ -333,14 +346,14 @@ class Fig::OperatingSystem
|
|
333
346
|
|
334
347
|
def upload(local_file, remote_file)
|
335
348
|
Fig::Logging.debug "Uploading #{local_file} to #{remote_file}."
|
336
|
-
uri =
|
349
|
+
uri = Fig::URL.parse(remote_file)
|
337
350
|
case uri.scheme
|
338
351
|
when 'ssh'
|
339
352
|
ssh_upload(uri.user, uri.host, local_file, remote_file)
|
340
353
|
when 'ftp'
|
341
354
|
# fail unless system "curl -T #{local_file} --create-dirs --ftp-create-dirs #{remote_file}"
|
342
355
|
require 'net/ftp'
|
343
|
-
ftp_uri =
|
356
|
+
ftp_uri = Fig::URL.parse(ENV['FIG_REMOTE_URL'])
|
344
357
|
ftp_root_path = ftp_uri.path
|
345
358
|
ftp_root_dirs = ftp_uri.path.split('/')
|
346
359
|
remote_publish_path = uri.path[0, uri.path.rindex('/')]
|
@@ -465,7 +478,11 @@ class Fig::OperatingSystem
|
|
465
478
|
SimpleCov.at_exit.call
|
466
479
|
end
|
467
480
|
|
468
|
-
|
481
|
+
begin
|
482
|
+
Kernel.exec(*command)
|
483
|
+
rescue SystemCallError => exception
|
484
|
+
raise Fig::UserInputError.new exception
|
485
|
+
end
|
469
486
|
end
|
470
487
|
|
471
488
|
# *sigh* Apparently Ruby < v1.9.3 does some wacko thing with single argument
|
@@ -520,7 +537,7 @@ class Fig::OperatingSystem
|
|
520
537
|
end
|
521
538
|
|
522
539
|
def ssh_upload(user, host, local_file, remote_file)
|
523
|
-
uri =
|
540
|
+
uri = Fig::URL.parse(remote_file)
|
524
541
|
dir = uri.path[0, uri.path.rindex('/')]
|
525
542
|
Net::SSH.start(host, user) do |ssh|
|
526
543
|
ssh.exec!("mkdir -p #{dir}")
|
@@ -544,7 +561,7 @@ class Fig::OperatingSystem
|
|
544
561
|
when Net::HTTPRedirection then
|
545
562
|
location = response['location']
|
546
563
|
Fig::Logging.debug "Redirecting to #{location}."
|
547
|
-
download_via_http_get(location, file,
|
564
|
+
download_via_http_get(location, file, redirection_limit - 1)
|
548
565
|
else
|
549
566
|
Fig::Logging.debug "Download failed: #{response.code} #{response.message}."
|
550
567
|
raise Fig::FileNotFoundError.new(
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'fig/package_descriptor_parse_error'
|
2
|
+
require 'fig/statement'
|
2
3
|
|
3
4
|
module Fig; end
|
4
5
|
|
@@ -64,7 +65,6 @@ class Fig::PackageDescriptor
|
|
64
65
|
validate_component name, 'name', :name, options
|
65
66
|
validate_component version, 'version', :version, options
|
66
67
|
validate_component config, 'config', :config, options
|
67
|
-
validate_name options
|
68
68
|
validate_across_components options
|
69
69
|
end
|
70
70
|
|
@@ -113,17 +113,6 @@ class Fig::PackageDescriptor
|
|
113
113
|
)
|
114
114
|
end
|
115
115
|
|
116
|
-
def validate_name(options)
|
117
|
-
return if @name.nil?
|
118
|
-
|
119
|
-
return if ! Fig::Parser.strict_keyword? @name
|
120
|
-
|
121
|
-
raise Fig::PackageDescriptorParseError.new(
|
122
|
-
%Q<Invalid package name; "#{@name}" is a keyword#{standard_exception_suffix(options)}>,
|
123
|
-
@original_string
|
124
|
-
)
|
125
|
-
end
|
126
|
-
|
127
116
|
def throw_presence_exception(name, presence_requirement_symbol, options)
|
128
117
|
presence = options[presence_requirement_symbol]
|
129
118
|
raise Fig::PackageDescriptorParseError.new(
|
data/lib/fig/parser.rb
CHANGED
@@ -3,6 +3,7 @@ require 'set'
|
|
3
3
|
require 'fig/grammar/version_identification'
|
4
4
|
require 'fig/grammar/v0'
|
5
5
|
require 'fig/grammar/v1'
|
6
|
+
require 'fig/grammar_monkey_patches'
|
6
7
|
require 'fig/logging'
|
7
8
|
require 'fig/package_parse_error'
|
8
9
|
require 'fig/parser_package_build_state'
|
@@ -16,19 +17,6 @@ module Fig; end
|
|
16
17
|
# Parses .fig files (wrapping the Treetop-generated parser object) and deals
|
17
18
|
# with a few restrictions on them.
|
18
19
|
class Fig::Parser
|
19
|
-
# Keywords that we really want to lock down.
|
20
|
-
def self.strict_keyword?(string)
|
21
|
-
# "config" is considered too useful for users, so we allow that where we
|
22
|
-
# restrict other keywords.
|
23
|
-
return false if string == 'config'
|
24
|
-
|
25
|
-
return keyword? string
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.keyword?(string)
|
29
|
-
return KEYWORDS.include? string
|
30
|
-
end
|
31
|
-
|
32
20
|
def initialize(application_config, check_include_versions)
|
33
21
|
@application_config = application_config
|
34
22
|
@check_include_versions = check_include_versions
|
@@ -48,21 +36,6 @@ class Fig::Parser
|
|
48
36
|
|
49
37
|
private
|
50
38
|
|
51
|
-
KEYWORDS = Set.new
|
52
|
-
KEYWORDS << 'add'
|
53
|
-
KEYWORDS << 'append'
|
54
|
-
KEYWORDS << 'archive'
|
55
|
-
KEYWORDS << 'command'
|
56
|
-
KEYWORDS << 'config'
|
57
|
-
KEYWORDS << 'end'
|
58
|
-
KEYWORDS << 'include'
|
59
|
-
KEYWORDS << 'override'
|
60
|
-
KEYWORDS << 'path'
|
61
|
-
KEYWORDS << 'resource'
|
62
|
-
KEYWORDS << 'retrieve'
|
63
|
-
KEYWORDS << 'set'
|
64
|
-
|
65
|
-
|
66
39
|
def get_grammar_version(
|
67
40
|
descriptor, directory, source_description, unparsed_text
|
68
41
|
)
|
@@ -77,7 +50,7 @@ class Fig::Parser
|
|
77
50
|
end
|
78
51
|
|
79
52
|
statement = result.get_grammar_version(
|
80
|
-
Fig::ParserPackageBuildState.new(descriptor, extended_description)
|
53
|
+
Fig::ParserPackageBuildState.new(nil, descriptor, extended_description)
|
81
54
|
)
|
82
55
|
return 0 if not statement
|
83
56
|
|
@@ -96,7 +69,7 @@ class Fig::Parser
|
|
96
69
|
|
97
70
|
v0_parser = Fig::Grammar::V0Parser.new
|
98
71
|
|
99
|
-
return
|
72
|
+
return drive_treetop_parser(
|
100
73
|
v0_parser,
|
101
74
|
descriptor,
|
102
75
|
directory,
|
@@ -109,7 +82,7 @@ class Fig::Parser
|
|
109
82
|
def parse_v1(descriptor, directory, source_description, unparsed_text)
|
110
83
|
v1_parser = Fig::Grammar::V1Parser.new
|
111
84
|
|
112
|
-
return
|
85
|
+
return drive_treetop_parser(
|
113
86
|
v1_parser,
|
114
87
|
descriptor,
|
115
88
|
directory,
|
@@ -119,7 +92,7 @@ class Fig::Parser
|
|
119
92
|
)
|
120
93
|
end
|
121
94
|
|
122
|
-
def
|
95
|
+
def drive_treetop_parser(
|
123
96
|
parser,
|
124
97
|
descriptor,
|
125
98
|
directory,
|
@@ -140,7 +113,9 @@ class Fig::Parser
|
|
140
113
|
|
141
114
|
package = result.to_package(
|
142
115
|
directory,
|
143
|
-
Fig::ParserPackageBuildState.new(
|
116
|
+
Fig::ParserPackageBuildState.new(
|
117
|
+
parser.version, descriptor, extended_description
|
118
|
+
)
|
144
119
|
)
|
145
120
|
package.unparsed_text = unparsed_text
|
146
121
|
|