fig 0.1.73 → 0.1.75

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.
Files changed (50) hide show
  1. data/Changes +75 -0
  2. data/lib/fig.rb +1 -1
  3. data/lib/fig/command.rb +36 -12
  4. data/lib/fig/command/action.rb +1 -1
  5. data/lib/fig/command/action/dump_package_definition_parsed.rb +4 -6
  6. data/lib/fig/command/action/run_command_statement.rb +3 -2
  7. data/lib/fig/command/options.rb +12 -3
  8. data/lib/fig/command/options/parser.rb +2 -0
  9. data/lib/fig/command/package_loader.rb +1 -0
  10. data/lib/fig/config_file_error.rb +1 -1
  11. data/lib/fig/grammar/base.rb +214 -0
  12. data/lib/fig/grammar/base.treetop +29 -0
  13. data/lib/fig/grammar/v0.rb +1493 -0
  14. data/lib/fig/grammar/v0.treetop +167 -0
  15. data/lib/fig/grammar/v1.rb +1478 -0
  16. data/lib/fig/grammar/v1.treetop +174 -0
  17. data/lib/fig/grammar/version.rb +144 -0
  18. data/lib/fig/grammar/version.treetop +22 -0
  19. data/lib/fig/grammar/version_identification.rb +113 -0
  20. data/lib/fig/grammar/version_identification.treetop +27 -0
  21. data/lib/fig/log4r_config_error.rb +1 -1
  22. data/lib/fig/no_such_package_config_error.rb +1 -1
  23. data/lib/fig/not_found_error.rb +7 -0
  24. data/lib/fig/operating_system.rb +31 -20
  25. data/lib/fig/package.rb +8 -3
  26. data/lib/fig/package_definition_text_assembler.rb +88 -0
  27. data/lib/fig/package_descriptor_parse_error.rb +1 -1
  28. data/lib/fig/parser.rb +115 -29
  29. data/lib/fig/parser_package_build_state.rb +38 -11
  30. data/lib/fig/repository.rb +5 -8
  31. data/lib/fig/repository_package_publisher.rb +114 -96
  32. data/lib/fig/runtime_environment.rb +42 -14
  33. data/lib/fig/statement.rb +133 -0
  34. data/lib/fig/statement/archive.rb +6 -4
  35. data/lib/fig/statement/asset.rb +28 -34
  36. data/lib/fig/statement/command.rb +6 -2
  37. data/lib/fig/statement/configuration.rb +4 -12
  38. data/lib/fig/statement/grammar_version.rb +22 -0
  39. data/lib/fig/statement/include.rb +5 -6
  40. data/lib/fig/statement/override.rb +6 -3
  41. data/lib/fig/statement/path.rb +12 -2
  42. data/lib/fig/statement/resource.rb +8 -8
  43. data/lib/fig/statement/retrieve.rb +11 -3
  44. data/lib/fig/statement/set.rb +12 -2
  45. data/lib/fig/unparser.rb +127 -0
  46. data/lib/fig/unparser/v0.rb +84 -0
  47. data/lib/fig/unparser/v1.rb +77 -0
  48. data/lib/fig/url.rb +7 -0
  49. metadata +139 -25
  50. data/lib/fig/grammar.treetop +0 -147
data/Changes CHANGED
@@ -1,3 +1,78 @@
1
+ v0.1.75
2
+
3
+ Backwards incompatibilities:
4
+
5
+ - Unquoted archive statements now have their values globbed if they don't
6
+ look like URLs. If you happen to have a statement like
7
+
8
+ archive some/path/foo?bar*.tar.gz
9
+
10
+ then this will match files that it did not previously find.
11
+
12
+ New features:
13
+
14
+ - Asset statements now behave identically, with the exception of the
15
+ extraction of archive statements and the path preservation of resource
16
+ statements. Previously, archives weren't globbed, i.e. you couldn't say
17
+
18
+ archive yadda/*.tar.gz
19
+
20
+ You had to specify all archives individually.
21
+
22
+ - New --run-command-statement option that allows you to run command
23
+ statements in unpublished packages. (No more need to publish to test
24
+ whether they work!) Say you have a package.fig file in the current
25
+ directory that looks like
26
+
27
+ config default
28
+ command "echo hello!"
29
+ end
30
+
31
+ If you just run "fig", it still says that there's nothing to do, but it
32
+ additionally warns you about the situation. You can get non-default
33
+ commands to run using the --config option, e.g. "fig
34
+ --run-command-statement --config run-chrome":
35
+
36
+ config run-chrome
37
+ command "chrome ..."
38
+ end
39
+
40
+ - New grammar statement to allow for future expansion. Syntax:
41
+
42
+ grammar v<number>
43
+
44
+ This statement is only valid as the first statement in a package
45
+ definition. In other words
46
+
47
+ grammar v0
48
+ config default
49
+ end
50
+
51
+ is valid, but
52
+
53
+ config default
54
+ end
55
+ grammar v0
56
+
57
+ is not. The only valid version right now is 0, but this means that we can
58
+ change the syntax in the future without breaking any existing packages.
59
+
60
+ Note that this statement will be emitted for all published packages, but
61
+ will be commented out so that older versions of Fig can still read them.
62
+ For example, the significant parts of the package definition generated by
63
+ "fig --publish foo/5 --set variable=value" are:
64
+
65
+ # grammar v0
66
+ config default
67
+ set variable=value
68
+ end
69
+
70
+ v0.1.74.beta.3
71
+ v0.1.74.beta.2
72
+ v0.1.74.beta.1
73
+
74
+ - Test releases
75
+
1
76
  v0.1.73
2
77
 
3
78
  Backwards incompatibilities:
data/lib/fig.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fig
2
- VERSION = '0.1.73'
2
+ VERSION = '0.1.75'
3
3
  end
@@ -37,11 +37,11 @@ class Fig::Command
37
37
  return @options.exit_code
38
38
  end
39
39
 
40
+ Fig::Logging.initialize_pre_configuration(@options.log_level())
41
+
40
42
  actions = @options.actions()
41
43
  if actions.empty?
42
- $stderr.puts "Nothing to do.\n\n"
43
- $stderr.puts %q<Run "fig --help" for a full list of commands.>
44
- return Fig::Command::Action::EXIT_FAILURE
44
+ return handle_nothing_to_do
45
45
  end
46
46
 
47
47
  actions.each do
@@ -53,8 +53,6 @@ class Fig::Command
53
53
  end
54
54
  end
55
55
 
56
- Fig::Logging.initialize_pre_configuration(@options.log_level())
57
-
58
56
  @descriptor = @options.descriptor
59
57
  check_descriptor_requirement()
60
58
  if actions.any? {|action| not action.allow_both_descriptor_and_file? }
@@ -133,6 +131,26 @@ class Fig::Command
133
131
  :package_source_description
134
132
  )
135
133
 
134
+ def handle_nothing_to_do()
135
+ command_statement = nil
136
+ if ! @descriptor && @options.package_definition_file != :none
137
+ load_base_package()
138
+ config = base_config
139
+ command_statement = @base_package[config].command_statement
140
+ end
141
+
142
+ $stderr.puts "Nothing to do.\n\n"
143
+
144
+ if command_statement
145
+ $stderr.puts \
146
+ %Q<You have a command statement in the "#{config}" config. If you want to run it, use the "--run-command-statement" option.\n\n>
147
+ end
148
+
149
+ $stderr.puts %q<Run "fig --help" for a full list of commands.>
150
+
151
+ return Fig::Command::Action::EXIT_FAILURE
152
+ end
153
+
136
154
  def check_include_statements_versions?()
137
155
  return false if @options.suppress_warning_include_statement_missing_version?
138
156
 
@@ -248,13 +266,7 @@ class Fig::Command
248
266
  apply_config = apply_config?
249
267
  apply_base_config = apply_config ? apply_base_config? : nil
250
268
 
251
- package_loader = new_package_loader()
252
- if @options.actions.all? {|action| action.base_package_can_come_from_descriptor?}
253
- @base_package = package_loader.load_package_object()
254
- else
255
- @base_package = package_loader.load_package_object_from_file()
256
- end
257
- @package_source_description = package_loader.package_source_description()
269
+ load_base_package()
258
270
 
259
271
  applier = new_package_applier()
260
272
 
@@ -271,6 +283,18 @@ class Fig::Command
271
283
  return
272
284
  end
273
285
 
286
+ def load_base_package()
287
+ package_loader = new_package_loader()
288
+ if @options.actions.all? {|action| action.base_package_can_come_from_descriptor?}
289
+ @base_package = package_loader.load_package_object()
290
+ else
291
+ @base_package = package_loader.load_package_object_from_file()
292
+ end
293
+ @package_source_description = package_loader.package_source_description()
294
+
295
+ return
296
+ end
297
+
274
298
  def invoke_post_set_up_actions()
275
299
  @post_set_up_actions.each do
276
300
  |action|
@@ -44,7 +44,7 @@ module Fig::Command::Action
44
44
  end
45
45
 
46
46
  def modifies_repository?()
47
- return NotImplementedError
47
+ raise NotImplementedError
48
48
  end
49
49
 
50
50
  def prepare_repository(repository)
@@ -1,5 +1,6 @@
1
1
  require 'fig/command/action'
2
2
  require 'fig/command/action/role/has_no_sub_action'
3
+ require 'fig/unparser/v0'
3
4
 
4
5
  module Fig; end
5
6
  class Fig::Command; end
@@ -34,13 +35,10 @@ class Fig::Command::Action::DumpPackageDefinitionParsed
34
35
  end
35
36
 
36
37
  def execute()
37
- lines = @execution_context.base_package.statements.map do
38
- |statement|
38
+ unparser = Fig::Unparser::V0.new :emit_as_to_be_published
39
+ text = unparser.unparse(@execution_context.base_package.statements)
39
40
 
40
- statement.unparse('')
41
- end
42
-
43
- print lines.join("\n").strip
41
+ print text.gsub(/\n{3,}/, "\n\n").strip
44
42
 
45
43
  return EXIT_SUCCESS
46
44
  end
@@ -14,7 +14,7 @@ class Fig::Command::Action::RunCommandStatement
14
14
  end
15
15
 
16
16
  def descriptor_requirement()
17
- return :required
17
+ return nil
18
18
  end
19
19
 
20
20
  def modifies_repository?()
@@ -47,9 +47,10 @@ class Fig::Command::Action::RunCommandStatement
47
47
  def execute()
48
48
  environment = @execution_context.environment
49
49
  base_package = @execution_context.base_package
50
+ base_config = @execution_context.base_config
50
51
 
51
52
  environment.execute_config(
52
- base_package, @descriptor, @extra_argv || []
53
+ base_package, base_config, @descriptor, @extra_argv || []
53
54
  ) { |command| @execution_context.operating_system.shell_exec command }
54
55
 
55
56
  return EXIT_SUCCESS
@@ -299,6 +299,12 @@ class Fig::Command::Options
299
299
  set_base_action(Fig::Command::Action::Clean)
300
300
  end
301
301
 
302
+ @parser.on(
303
+ '--run-command-statement', 'run the command in even in local file'
304
+ ) do
305
+ set_base_action(Fig::Command::Action::RunCommandStatement)
306
+ end
307
+
302
308
  @parser.on(
303
309
  '--publish', 'install package in $FIG_HOME and in remote repo'
304
310
  ) do |publish|
@@ -544,7 +550,10 @@ class Fig::Command::Options
544
550
  return
545
551
  end
546
552
 
547
- return if @base_action && @base_action == Fig::Command::Action::Help
553
+ if @base_action
554
+ return if @base_action.class == Fig::Command::Action::Help
555
+ return if @base_action.class == action_class
556
+ end
548
557
 
549
558
  if @base_action
550
559
  raise Fig::Command::OptionError.new(
@@ -577,13 +586,13 @@ class Fig::Command::Options
577
586
  end
578
587
 
579
588
  def new_content_statement(option, path, statement_class)
580
- statement_class.validate_url(path) {
589
+ need_to_glob = statement_class.validate_and_process_escapes_in_url!(path) {
581
590
  |error_description|
582
591
 
583
592
  @parser.raise_invalid_argument(option, path, error_description)
584
593
  }
585
594
 
586
- return statement_class.new(nil, "#{option} option", path)
595
+ return statement_class.new(nil, "#{option} option", path, need_to_glob)
587
596
  end
588
597
 
589
598
  def set_up_sub_actions()
@@ -16,6 +16,7 @@ Short usage summary (use --help-long for everything):
16
16
  Running under Fig:
17
17
  fig [...] [DESCRIPTOR] [-- COMMAND]
18
18
  fig [...] [DESCRIPTOR] --command-extra-args VALUES
19
+ fig [...] [DESCRIPTOR] --run-command-statement
19
20
 
20
21
  Querying:
21
22
  fig {-g | --get} VARIABLE [DESCRIPTOR] [...]
@@ -42,6 +43,7 @@ Running under Fig:
42
43
 
43
44
  fig [...] [DESCRIPTOR] [-- COMMAND]
44
45
  fig [...] [DESCRIPTOR] --command-extra-args VALUES
46
+ fig [...] [DESCRIPTOR] --run-command-statement
45
47
 
46
48
  Querying:
47
49
 
@@ -91,6 +91,7 @@ class Fig::Command::PackageLoader
91
91
  end
92
92
 
93
93
  source_description = package_source_description()
94
+
94
95
  @base_package =
95
96
  Fig::Parser.new(@application_configuration, :check_include_versions).parse_package(
96
97
  Fig::PackageDescriptor.new(
@@ -4,7 +4,7 @@ module Fig
4
4
  # Could not determine some kind of information from a configuration file,
5
5
  # whether .figrc, log4r, package.fig, etc.
6
6
  class ConfigFileError < UserInputError
7
- attr_accessor :file
7
+ attr_reader :file
8
8
 
9
9
  def initialize(message, file)
10
10
  super(message)
@@ -0,0 +1,214 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ # Treetop (http://treetop.rubyforge.org/) grammar for common definitions.
5
+
6
+ require 'treetop'
7
+
8
+ module Fig
9
+ module Grammar
10
+ module Base
11
+ include Treetop::Runtime
12
+
13
+ def root
14
+ @root ||= :ws
15
+ end
16
+
17
+ def _nt_ws
18
+ start_index = index
19
+ if node_cache[:ws].has_key?(index)
20
+ cached = node_cache[:ws][index]
21
+ if cached
22
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
23
+ @index = cached.interval.end
24
+ end
25
+ return cached
26
+ end
27
+
28
+ s0, i0 = [], index
29
+ loop do
30
+ if has_terminal?('\G[ \\n\\r\\t]', true, index)
31
+ r1 = true
32
+ @index += 1
33
+ else
34
+ r1 = nil
35
+ end
36
+ if r1
37
+ s0 << r1
38
+ else
39
+ break
40
+ end
41
+ end
42
+ if s0.empty?
43
+ @index = i0
44
+ r0 = nil
45
+ else
46
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
47
+ end
48
+
49
+ node_cache[:ws][start_index] = r0
50
+
51
+ r0
52
+ end
53
+
54
+ def _nt_optional_ws
55
+ start_index = index
56
+ if node_cache[:optional_ws].has_key?(index)
57
+ cached = node_cache[:optional_ws][index]
58
+ if cached
59
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
60
+ @index = cached.interval.end
61
+ end
62
+ return cached
63
+ end
64
+
65
+ s0, i0 = [], index
66
+ loop do
67
+ if has_terminal?('\G[ \\n\\r\\t]', true, index)
68
+ r1 = true
69
+ @index += 1
70
+ else
71
+ r1 = nil
72
+ end
73
+ if r1
74
+ s0 << r1
75
+ else
76
+ break
77
+ end
78
+ end
79
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
80
+
81
+ node_cache[:optional_ws][start_index] = r0
82
+
83
+ r0
84
+ end
85
+
86
+ module Comment0
87
+ end
88
+
89
+ def _nt_comment
90
+ start_index = index
91
+ if node_cache[:comment].has_key?(index)
92
+ cached = node_cache[:comment][index]
93
+ if cached
94
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
95
+ @index = cached.interval.end
96
+ end
97
+ return cached
98
+ end
99
+
100
+ i0, s0 = index, []
101
+ if has_terminal?('#', false, index)
102
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
103
+ @index += 1
104
+ else
105
+ terminal_parse_failure('#')
106
+ r1 = nil
107
+ end
108
+ s0 << r1
109
+ if r1
110
+ s2, i2 = [], index
111
+ loop do
112
+ if has_terminal?('\G[^\\n]', true, index)
113
+ r3 = true
114
+ @index += 1
115
+ else
116
+ r3 = nil
117
+ end
118
+ if r3
119
+ s2 << r3
120
+ else
121
+ break
122
+ end
123
+ end
124
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
125
+ s0 << r2
126
+ if r2
127
+ if has_terminal?("\n", false, index)
128
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
129
+ @index += 1
130
+ else
131
+ terminal_parse_failure("\n")
132
+ r4 = nil
133
+ end
134
+ s0 << r4
135
+ end
136
+ end
137
+ if s0.last
138
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
139
+ r0.extend(Comment0)
140
+ else
141
+ @index = i0
142
+ r0 = nil
143
+ end
144
+
145
+ node_cache[:comment][start_index] = r0
146
+
147
+ r0
148
+ end
149
+
150
+ def _nt_ws_or_comment
151
+ start_index = index
152
+ if node_cache[:ws_or_comment].has_key?(index)
153
+ cached = node_cache[:ws_or_comment][index]
154
+ if cached
155
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
156
+ @index = cached.interval.end
157
+ end
158
+ return cached
159
+ end
160
+
161
+ i0 = index
162
+ r1 = _nt_ws
163
+ if r1
164
+ r0 = r1
165
+ else
166
+ r2 = _nt_comment
167
+ if r2
168
+ r0 = r2
169
+ else
170
+ @index = i0
171
+ r0 = nil
172
+ end
173
+ end
174
+
175
+ node_cache[:ws_or_comment][start_index] = r0
176
+
177
+ r0
178
+ end
179
+
180
+ def _nt_optional_ws_or_comment
181
+ start_index = index
182
+ if node_cache[:optional_ws_or_comment].has_key?(index)
183
+ cached = node_cache[:optional_ws_or_comment][index]
184
+ if cached
185
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
186
+ @index = cached.interval.end
187
+ end
188
+ return cached
189
+ end
190
+
191
+ s0, i0 = [], index
192
+ loop do
193
+ r1 = _nt_ws_or_comment
194
+ if r1
195
+ s0 << r1
196
+ else
197
+ break
198
+ end
199
+ end
200
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
201
+
202
+ node_cache[:optional_ws_or_comment][start_index] = r0
203
+
204
+ r0
205
+ end
206
+
207
+ end
208
+
209
+ class BaseParser < Treetop::Runtime::CompiledParser
210
+ include Base
211
+ end
212
+
213
+ end
214
+ end