fig 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/Changes +94 -0
  2. data/lib/fig.rb +1 -1
  3. data/lib/fig/command.rb +18 -7
  4. data/lib/fig/command/action/dump_package_definition_for_command_line.rb +2 -2
  5. data/lib/fig/command/action/dump_package_definition_parsed.rb +2 -2
  6. data/lib/fig/command/action/dump_package_definition_text.rb +2 -2
  7. data/lib/fig/command/action/source_package.rb +65 -0
  8. data/lib/fig/command/options.rb +64 -15
  9. data/lib/fig/command/options/parser.rb +24 -14
  10. data/lib/fig/command/package_applier.rb +32 -7
  11. data/lib/fig/command/package_loader.rb +16 -7
  12. data/lib/fig/external_program.rb +72 -0
  13. data/lib/fig/figrc.rb +1 -1
  14. data/lib/fig/grammar/v0.rb +2 -2
  15. data/lib/fig/grammar/v0.treetop +2 -2
  16. data/lib/fig/grammar/v1.rb +17 -1737
  17. data/lib/fig/grammar/v1.treetop +6 -217
  18. data/lib/fig/grammar/v1_base.rb +1750 -0
  19. data/lib/fig/grammar/v1_base.treetop +229 -0
  20. data/lib/fig/grammar/v2.rb +508 -0
  21. data/lib/fig/grammar/v2.treetop +65 -0
  22. data/lib/fig/grammar_monkey_patches.rb +7 -0
  23. data/lib/fig/no_such_package_config_error.rb +3 -1
  24. data/lib/fig/not_yet_parsed_package.rb +27 -0
  25. data/lib/fig/operating_system.rb +5 -5
  26. data/lib/fig/package.rb +20 -2
  27. data/lib/fig/package_definition_text_assembler.rb +2 -1
  28. data/lib/fig/package_descriptor.rb +11 -4
  29. data/lib/fig/parser.rb +44 -58
  30. data/lib/fig/parser_package_build_state.rb +39 -4
  31. data/lib/fig/protocol/file.rb +2 -2
  32. data/lib/fig/protocol/ftp.rb +15 -10
  33. data/lib/fig/protocol/http.rb +1 -1
  34. data/lib/fig/protocol/netrc_enabled.rb +29 -16
  35. data/lib/fig/protocol/sftp.rb +19 -12
  36. data/lib/fig/repository.rb +33 -21
  37. data/lib/fig/repository_package_publisher.rb +129 -8
  38. data/lib/fig/runtime_environment.rb +114 -28
  39. data/lib/fig/statement/include.rb +21 -4
  40. data/lib/fig/statement/include_file.rb +94 -0
  41. data/lib/fig/unparser.rb +15 -7
  42. data/lib/fig/unparser/v1.rb +2 -80
  43. data/lib/fig/unparser/v1_base.rb +85 -0
  44. data/lib/fig/unparser/v2.rb +55 -0
  45. data/lib/fig/working_directory_maintainer.rb +12 -0
  46. metadata +61 -51
@@ -1,4 +1,5 @@
1
1
  require 'fig/unparser'
2
+ require 'fig/unparser/v1_base'
2
3
 
3
4
  module Fig; end
4
5
  module Fig::Unparser; end
@@ -6,6 +7,7 @@ module Fig::Unparser; end
6
7
  # Handles serializing of statements in the v1 grammar.
7
8
  class Fig::Unparser::V1
8
9
  include Fig::Unparser
10
+ include Fig::Unparser::V1Base
9
11
 
10
12
  def initialize(
11
13
  emit_as_input_or_to_be_published_values,
@@ -20,25 +22,6 @@ class Fig::Unparser::V1
20
22
  return
21
23
  end
22
24
 
23
- def command(statement)
24
- add_indent
25
- @text << %Q<command\n>
26
-
27
- add_indent(@indent_level + 1)
28
- statement.command.each do
29
- |argument|
30
-
31
- emit_tokenized_value argument
32
- @text << ' '
33
- end
34
-
35
- @text << %Q<\n>
36
- add_indent
37
- @text << %Q<end\n>
38
-
39
- return
40
- end
41
-
42
25
  def grammar_version(statement)
43
26
  add_indent
44
27
 
@@ -47,68 +30,7 @@ class Fig::Unparser::V1
47
30
  return
48
31
  end
49
32
 
50
- def retrieve(statement)
51
- add_indent
52
-
53
- @text << 'retrieve '
54
- @text << statement.variable
55
- @text << '->'
56
-
57
- emit_tokenized_value statement.tokenized_path
58
-
59
- @text << "\n"
60
-
61
- return
62
- end
63
-
64
33
  def grammar_description()
65
34
  return 'v1'
66
35
  end
67
-
68
- private
69
-
70
- def asset(keyword, statement)
71
- quote = statement.glob_if_not_url? ? %q<"> : %q<'>
72
- path =
73
- asset_path(statement).gsub('\\', ('\\' * 4)).gsub(quote, "\\#{quote}")
74
-
75
- add_indent
76
- @text << keyword
77
- @text << ' '
78
- @text << quote
79
- @text << path
80
- @text << quote
81
- @text << "\n"
82
-
83
- return
84
- end
85
-
86
- def environment_variable(statement, keyword)
87
- add_indent
88
-
89
- @text << keyword
90
- @text << ' '
91
- @text << statement.name
92
- @text << '='
93
-
94
- emit_tokenized_value statement.tokenized_value
95
-
96
- @text << "\n"
97
-
98
- return
99
- end
100
-
101
- def emit_tokenized_value(tokenized_value)
102
- if tokenized_value.can_be_single_quoted?
103
- @text << %q<'>
104
- @text << tokenized_value.to_single_quoted_string
105
- @text << %q<'>
106
- else
107
- @text << %q<">
108
- @text << tokenized_value.to_escaped_string
109
- @text << %q<">
110
- end
111
-
112
- return
113
- end
114
36
  end
@@ -0,0 +1,85 @@
1
+ module Fig; end
2
+ module Fig::Unparser; end
3
+
4
+ # Handles serializing of statements in the v1 grammar.
5
+ module Fig::Unparser::V1Base
6
+ def command(statement)
7
+ add_indent
8
+ @text << %Q<command\n>
9
+
10
+ add_indent(@indent_level + 1)
11
+ statement.command.each do
12
+ |argument|
13
+
14
+ emit_tokenized_value argument
15
+ @text << ' '
16
+ end
17
+
18
+ @text << %Q<\n>
19
+ add_indent
20
+ @text << %Q<end\n>
21
+
22
+ return
23
+ end
24
+
25
+ def retrieve(statement)
26
+ add_indent
27
+
28
+ @text << 'retrieve '
29
+ @text << statement.variable
30
+ @text << '->'
31
+
32
+ emit_tokenized_value statement.tokenized_path
33
+
34
+ @text << "\n"
35
+
36
+ return
37
+ end
38
+
39
+ private
40
+
41
+ def asset(keyword, statement)
42
+ quote = statement.glob_if_not_url? ? %q<"> : %q<'>
43
+ path =
44
+ asset_path(statement).gsub('\\', ('\\' * 4)).gsub(quote, "\\\\#{quote}")
45
+
46
+ add_indent
47
+ @text << keyword
48
+ @text << ' '
49
+ @text << quote
50
+ @text << path
51
+ @text << quote
52
+ @text << "\n"
53
+
54
+ return
55
+ end
56
+
57
+ def environment_variable(statement, keyword)
58
+ add_indent
59
+
60
+ @text << keyword
61
+ @text << ' '
62
+ @text << statement.name
63
+ @text << '='
64
+
65
+ emit_tokenized_value statement.tokenized_value
66
+
67
+ @text << "\n"
68
+
69
+ return
70
+ end
71
+
72
+ def emit_tokenized_value(tokenized_value)
73
+ if tokenized_value.can_be_single_quoted?
74
+ @text << %q<'>
75
+ @text << tokenized_value.to_single_quoted_string
76
+ @text << %q<'>
77
+ else
78
+ @text << %q<">
79
+ @text << tokenized_value.to_escaped_string
80
+ @text << %q<">
81
+ end
82
+
83
+ return
84
+ end
85
+ end
@@ -0,0 +1,55 @@
1
+ require 'fig/unparser'
2
+ require 'fig/unparser/v1_base'
3
+
4
+ module Fig; end
5
+ module Fig::Unparser; end
6
+
7
+ # Handles serializing of statements in the v2 grammar.
8
+ class Fig::Unparser::V2
9
+ include Fig::Unparser
10
+ include Fig::Unparser::V1Base
11
+
12
+ def initialize(
13
+ emit_as_input_or_to_be_published_values,
14
+ indent_string = ' ' * 2,
15
+ initial_indent_level = 0
16
+ )
17
+ @emit_as_input_or_to_be_published_values =
18
+ emit_as_input_or_to_be_published_values
19
+ @indent_string = indent_string
20
+ @initial_indent_level = initial_indent_level
21
+
22
+ return
23
+ end
24
+
25
+ def grammar_version(statement)
26
+ add_indent
27
+
28
+ @text << "grammar v2\n"
29
+
30
+ return
31
+ end
32
+
33
+ def include_file(statement)
34
+ path = statement.path
35
+ quote = (path.include?(%q<'>) && ! path.include?(%q<">)) ? %q<"> : %q<'>
36
+
37
+ add_indent
38
+
39
+ @text << 'include-file '
40
+ @text << quote
41
+ @text << path.gsub('\\', ('\\' * 4)).gsub(quote, "\\\\#{quote}")
42
+ @text << quote
43
+ if ! statement.config_name.nil?
44
+ @text << ':'
45
+ @text << statement.config_name
46
+ end
47
+ @text << "\n"
48
+
49
+ return
50
+ end
51
+
52
+ def grammar_description()
53
+ return 'v2'
54
+ end
55
+ end
@@ -69,6 +69,18 @@ class Fig::WorkingDirectoryMaintainer
69
69
  return
70
70
  end
71
71
 
72
+ def find_package_version_for_file(file)
73
+ @package_metadata_by_name.each do |name, package_meta|
74
+ package_meta.each_file do |target|
75
+ if File.identical? file, target
76
+ return formatted_meta(package_meta)
77
+ end
78
+ end
79
+ end
80
+
81
+ return nil
82
+ end
83
+
72
84
  def prepare_for_shutdown(purged_unused_packages)
73
85
  if purged_unused_packages
74
86
  clean_up_unused_packages()
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fig
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-11 00:00:00.000000000 Z
12
+ date: 2013-02-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
16
- requirement: &9988500 !ruby/object:Gem::Requirement
16
+ requirement: &16367000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.5.8
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *9988500
24
+ version_requirements: *16367000
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: highline
27
- requirement: &9987980 !ruby/object:Gem::Requirement
27
+ requirement: &16366480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.6.2
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *9987980
35
+ version_requirements: *16366480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &9987520 !ruby/object:Gem::Requirement
38
+ requirement: &16365980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *9987520
46
+ version_requirements: *16365980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: libarchive-static
49
- requirement: &9987040 !ruby/object:Gem::Requirement
49
+ requirement: &16365480 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *9987040
57
+ version_requirements: *16365480
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: log4r
60
- requirement: &9986420 !ruby/object:Gem::Requirement
60
+ requirement: &16364880 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.1.5
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *9986420
68
+ version_requirements: *16364880
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: net-netrc
71
- requirement: &9985920 !ruby/object:Gem::Requirement
71
+ requirement: &16364380 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.2.2
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *9985920
79
+ version_requirements: *16364380
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: net-sftp
82
- requirement: &10064440 !ruby/object:Gem::Requirement
82
+ requirement: &16363920 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 2.0.4
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *10064440
90
+ version_requirements: *16363920
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: net-ssh
93
- requirement: &10063900 !ruby/object:Gem::Requirement
93
+ requirement: &16471780 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,54 +98,54 @@ dependencies:
98
98
  version: 2.0.15
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *10063900
101
+ version_requirements: *16471780
102
102
  - !ruby/object:Gem::Dependency
103
- name: rdoc
104
- requirement: &10063360 !ruby/object:Gem::Requirement
103
+ name: open4
104
+ requirement: &16471280 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
- version: '3.12'
109
+ version: 1.0.1
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *10063360
112
+ version_requirements: *16471280
113
113
  - !ruby/object:Gem::Dependency
114
- name: sys-admin
115
- requirement: &10062780 !ruby/object:Gem::Requirement
114
+ name: rdoc
115
+ requirement: &16470760 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
119
119
  - !ruby/object:Gem::Version
120
- version: 1.5.6
120
+ version: '3.12'
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *10062780
123
+ version_requirements: *16470760
124
124
  - !ruby/object:Gem::Dependency
125
- name: treetop
126
- requirement: &10062040 !ruby/object:Gem::Requirement
125
+ name: sys-admin
126
+ requirement: &16470220 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
130
130
  - !ruby/object:Gem::Version
131
- version: 1.4.2
131
+ version: 1.5.6
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *10062040
134
+ version_requirements: *16470220
135
135
  - !ruby/object:Gem::Dependency
136
- name: open4
137
- requirement: &10061480 !ruby/object:Gem::Requirement
136
+ name: treetop
137
+ requirement: &16469680 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
141
141
  - !ruby/object:Gem::Version
142
- version: 1.0.1
143
- type: :development
142
+ version: 1.4.2
143
+ type: :runtime
144
144
  prerelease: false
145
- version_requirements: *10061480
145
+ version_requirements: *16469680
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: bundler
148
- requirement: &10060940 !ruby/object:Gem::Requirement
148
+ requirement: &16469140 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 1.0.15
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *10060940
156
+ version_requirements: *16469140
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rake
159
- requirement: &10060400 !ruby/object:Gem::Requirement
159
+ requirement: &16468620 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: 0.8.7
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *10060400
167
+ version_requirements: *16468620
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rspec
170
- requirement: &10059900 !ruby/object:Gem::Requirement
170
+ requirement: &16468100 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '2'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *10059900
178
+ version_requirements: *16468100
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: rspec-core
181
- requirement: &10059440 !ruby/object:Gem::Requirement
181
+ requirement: &16467580 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,10 +186,10 @@ dependencies:
186
186
  version: 2.7.1
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *10059440
189
+ version_requirements: *16467580
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: rspec-expectations
192
- requirement: &10058980 !ruby/object:Gem::Requirement
192
+ requirement: &16467100 !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
195
195
  - - ! '>='
@@ -197,10 +197,10 @@ dependencies:
197
197
  version: 2.7.0
198
198
  type: :development
199
199
  prerelease: false
200
- version_requirements: *10058980
200
+ version_requirements: *16467100
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: rspec-mocks
203
- requirement: &10058380 !ruby/object:Gem::Requirement
203
+ requirement: &16466520 !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
206
206
  - - ! '>='
@@ -208,10 +208,10 @@ dependencies:
208
208
  version: 2.7.0
209
209
  type: :development
210
210
  prerelease: false
211
- version_requirements: *10058380
211
+ version_requirements: *16466520
212
212
  - !ruby/object:Gem::Dependency
213
213
  name: simplecov
214
- requirement: &10057620 !ruby/object:Gem::Requirement
214
+ requirement: &16465740 !ruby/object:Gem::Requirement
215
215
  none: false
216
216
  requirements:
217
217
  - - ! '>='
@@ -219,10 +219,10 @@ dependencies:
219
219
  version: 0.6.2
220
220
  type: :development
221
221
  prerelease: false
222
- version_requirements: *10057620
222
+ version_requirements: *16465740
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: simplecov-html
225
- requirement: &10057020 !ruby/object:Gem::Requirement
225
+ requirement: &16465240 !ruby/object:Gem::Requirement
226
226
  none: false
227
227
  requirements:
228
228
  - - ! '>='
@@ -230,7 +230,7 @@ dependencies:
230
230
  version: 0.5.3
231
231
  type: :development
232
232
  prerelease: false
233
- version_requirements: *10057020
233
+ version_requirements: *16465240
234
234
  description: Fig is a utility for configuring environments and managing dependencies
235
235
  across a team of developers. Given a list of packages and a command to run, Fig
236
236
  builds environment variables named in those packages (e.g., CLASSPATH), then executes
@@ -292,6 +292,7 @@ files:
292
292
  - lib/fig/command/action/role/update.rb
293
293
  - lib/fig/command/action/run_command_line.rb
294
294
  - lib/fig/command/action/run_command_statement.rb
295
+ - lib/fig/command/action/source_package.rb
295
296
  - lib/fig/command/action/update.rb
296
297
  - lib/fig/command/action/update_if_missing.rb
297
298
  - lib/fig/command/action/version.rb
@@ -306,11 +307,14 @@ files:
306
307
  - lib/fig/environment_variables.rb
307
308
  - lib/fig/environment_variables/case_insensitive.rb
308
309
  - lib/fig/environment_variables/case_sensitive.rb
310
+ - lib/fig/external_program.rb
309
311
  - lib/fig/figrc.rb
310
312
  - lib/fig/file_not_found_error.rb
311
313
  - lib/fig/grammar/base.treetop
312
314
  - lib/fig/grammar/v0.treetop
313
315
  - lib/fig/grammar/v1.treetop
316
+ - lib/fig/grammar/v1_base.treetop
317
+ - lib/fig/grammar/v2.treetop
314
318
  - lib/fig/grammar/version.treetop
315
319
  - lib/fig/grammar/version_identification.treetop
316
320
  - lib/fig/grammar_monkey_patches.rb
@@ -321,6 +325,7 @@ files:
321
325
  - lib/fig/logging/colorizable.rb
322
326
  - lib/fig/network_error.rb
323
327
  - lib/fig/no_such_package_config_error.rb
328
+ - lib/fig/not_yet_parsed_package.rb
324
329
  - lib/fig/operating_system.rb
325
330
  - lib/fig/package.rb
326
331
  - lib/fig/package_cache.rb
@@ -348,6 +353,7 @@ files:
348
353
  - lib/fig/statement/environment_variable.rb
349
354
  - lib/fig/statement/grammar_version.rb
350
355
  - lib/fig/statement/include.rb
356
+ - lib/fig/statement/include_file.rb
351
357
  - lib/fig/statement/override.rb
352
358
  - lib/fig/statement/path.rb
353
359
  - lib/fig/statement/resource.rb
@@ -361,6 +367,8 @@ files:
361
367
  - lib/fig/unparser.rb
362
368
  - lib/fig/unparser/v0.rb
363
369
  - lib/fig/unparser/v1.rb
370
+ - lib/fig/unparser/v1_base.rb
371
+ - lib/fig/unparser/v2.rb
364
372
  - lib/fig/update_lock.rb
365
373
  - lib/fig/url.rb
366
374
  - lib/fig/url_access_disallowed_error.rb
@@ -372,6 +380,8 @@ files:
372
380
  - lib/fig/grammar/base.rb
373
381
  - lib/fig/grammar/v0.rb
374
382
  - lib/fig/grammar/v1.rb
383
+ - lib/fig/grammar/v1_base.rb
384
+ - lib/fig/grammar/v2.rb
375
385
  - lib/fig/grammar/version.rb
376
386
  - lib/fig/grammar/version_identification.rb
377
387
  homepage: http://github.com/mfoemmel/fig