fig 0.1.51 → 0.1.52

Sign up to get free protection for your applications and to get access to all the features.
data/lib/fig.rb DELETED
@@ -1,288 +0,0 @@
1
- require 'rubygems'
2
- require 'net/ftp'
3
- require 'log4r'
4
-
5
- require 'fig/environment'
6
- require 'fig/figrc'
7
- require 'fig/logging'
8
- require 'fig/options'
9
- require 'fig/os'
10
- require 'fig/package'
11
- require 'fig/package/configuration'
12
- require 'fig/package/publish'
13
- require 'fig/parser'
14
- require 'fig/repository'
15
- require 'fig/retriever'
16
- require 'fig/userinputerror'
17
- require 'fig/windows'
18
-
19
- # Main program
20
- module Fig
21
- DEFAULT_FIG_FILE = 'package.fig'
22
-
23
- def parse_descriptor(descriptor)
24
- # todo should use treetop for these:
25
- package_name = descriptor =~ %r< ^ ( [^:/]+ ) >x ? $1 : nil
26
- config_name = descriptor =~ %r< : ( [^:/]+ ) >x ? $1 : nil
27
- version_name = descriptor =~ %r< / ( [^:/]+ ) >x ? $1 : nil
28
- return package_name, config_name, version_name
29
- end
30
-
31
- def read_in_package_config_file(options)
32
- if File.exist?(options[:package_config_file])
33
- return File.read(options[:package_config_file])
34
- else
35
- raise UserInputError.new(%Q<File not found: "#{options[:package_config_file]}".>)
36
- end
37
- end
38
-
39
- def initialize_shell_command(argv)
40
- shell_command = nil
41
- argv.each_with_index do |arg, i|
42
- if arg == '--'
43
- shell_command = argv[(i+1)..-1]
44
- argv.slice!(i..-1)
45
- break
46
- end
47
- end
48
-
49
- return shell_command
50
- end
51
-
52
- def initialize_remote_url(options)
53
- if options[:update] || options[:publish] || options[:update_if_missing] || options[:list_remote]
54
- if ENV['FIG_REMOTE_URL'].nil?
55
- raise UserInputError.new 'Please define the FIG_REMOTE_URL environment variable.'
56
- end
57
- return ENV['FIG_REMOTE_URL']
58
- end
59
-
60
- return nil
61
- end
62
-
63
- def load_package_config_file_contents(options)
64
- package_config_file = options[:package_config_file]
65
-
66
- if package_config_file == :none
67
- return nil
68
- elsif package_config_file == '-'
69
- return $stdin.read
70
- elsif package_config_file.nil?
71
- if File.exist?(DEFAULT_FIG_FILE)
72
- return File.read(DEFAULT_FIG_FILE)
73
- end
74
- else
75
- return read_in_package_config_file(options)
76
- end
77
- end
78
-
79
- def display_package_list(repository)
80
- repository.list_packages.sort.each do |item|
81
- puts item
82
- end
83
- end
84
-
85
- def display_remote_package_list(repository)
86
- repository.list_remote_packages.sort.each do |item|
87
- puts item
88
- end
89
- end
90
-
91
- def display_configs_in_local_packages_list(options, repository)
92
- options[:list_configs].each do |descriptor|
93
- package_name, version_name = descriptor.split('/')
94
- repository.read_local_package(package_name, version_name).configs.each do |config|
95
- puts config.name
96
- end
97
- end
98
- end
99
-
100
- def resolve_listing(options, repository)
101
- if options[:list]
102
- display_package_list(repository)
103
- return true
104
- end
105
-
106
- if options[:list_remote]
107
- display_remote_package_list(repository)
108
- return true
109
- end
110
-
111
- if not options[:list_configs].empty?
112
- display_configs_in_local_packages_list(options, repository)
113
- return true
114
- end
115
-
116
- return false
117
- end
118
-
119
- def parse_package_config_file(options, package_config_file, environment, configuration)
120
- if package_config_file
121
- package = Parser.new(configuration).parse_package(nil, nil, '.', package_config_file)
122
- if options[:update] || options[:update_if_missing]
123
- package.retrieves.each do |var, path|
124
- environment.add_retrieve(var, path)
125
- end
126
- end
127
-
128
- unless options[:publish] || options[:list] || options[:publish_local]
129
- environment.register_package(package)
130
- environment.apply_config(package, options[:config], nil)
131
- end
132
- else
133
- package = Package.new(nil, nil, '.', [])
134
- end
135
-
136
- return package, environment
137
- end
138
-
139
- def publish(argv, options, package, repository)
140
- if not argv.empty?
141
- $stderr.puts %Q<Unexpected arguments: #{argv.join(' ')}>
142
- return 10
143
- end
144
-
145
- package_name, config_name, version_name = parse_descriptor(options[:publish] || options[:publish_local])
146
-
147
- if package_name.nil? || version_name.nil?
148
- $stderr.puts 'Please specify a package name and a version name.'
149
- return 10
150
- end
151
-
152
- if not options[:non_command_package_statements].empty?
153
- publish_statements = options[:resources] + options[:archives] + [Package::Configuration.new('default', options[:non_command_package_statements])]
154
- publish_statements << Package::Publish.new('default','default')
155
- elsif not package.statements.empty?
156
- publish_statements = package.statements
157
- else
158
- $stderr.puts 'Nothing to publish.'
159
- return 1
160
- end
161
-
162
- if options[:publish]
163
- Logging.info "Checking status of #{package_name}/#{version_name}..."
164
-
165
- if repository.list_remote_packages.include?("#{package_name}/#{version_name}")
166
- Logging.info "#{package_name}/#{version_name} has already been published."
167
-
168
- if not options[:force]
169
- Logging.fatal 'Use the --force option if you really want to overwrite, or use --publish-local for testing.'
170
- return 1
171
- else
172
- Logging.info 'Overwriting...'
173
- end
174
- end
175
- end
176
-
177
- Logging.info "Publishing #{package_name}/#{version_name}."
178
- repository.publish_package(publish_statements, package_name, version_name, options[:publish_local])
179
-
180
- return 0
181
- end
182
-
183
- def run_fig(argv)
184
- shell_command = initialize_shell_command(argv)
185
-
186
- options, argv, exit_value = parse_options(argv)
187
- if not exit_value.nil?
188
- return exit_value
189
- end
190
-
191
- Logging.initialize_pre_configuration(options[:log_level])
192
-
193
- remote_url = initialize_remote_url(options)
194
-
195
- configuration = FigRC.find(
196
- options[:figrc], remote_url, options[:login], options[:home], options[:no_figrc]
197
- )
198
-
199
- Logging.initialize_post_configuration(options[:log_config] || configuration['log configuration'], options[:log_level])
200
-
201
- os = OS.new(options[:login])
202
- repository = Repository.new(
203
- os,
204
- File.expand_path(File.join(options[:home], 'repos')),
205
- remote_url,
206
- configuration,
207
- nil, # remote_user
208
- options[:update],
209
- options[:update_if_missing]
210
- )
211
-
212
- retriever = Retriever.new('.')
213
- # Check to see if this is still happening with the new layers of abstraction.
214
- at_exit { retriever.save }
215
- environment = Environment.new(os, repository, nil, retriever)
216
-
217
- options[:non_command_package_statements].each do |statement|
218
- environment.apply_config_statement(nil, statement, nil)
219
- end
220
-
221
- package_config_file = load_package_config_file_contents(options)
222
-
223
- options[:cleans].each do |descriptor|
224
- package_name, version_name = descriptor.split('/')
225
- repository.clean(package_name, version_name)
226
- return true
227
- end
228
-
229
- if resolve_listing(options, repository)
230
- return true
231
- end
232
-
233
- package, environment = parse_package_config_file(options, package_config_file, environment, configuration)
234
-
235
- if options[:publish] || options[:publish_local]
236
- return publish(argv, options, package, repository)
237
- elsif options[:get]
238
- puts environment[options[:get]]
239
- elsif shell_command
240
- argv.shift
241
- environment.execute_shell(shell_command) { |cmd| os.shell_exec cmd }
242
- elsif not argv.empty?
243
- package_name, config_name, version_name = parse_descriptor(argv.shift)
244
- environment.include_config(package, package_name, config_name, version_name, {}, nil)
245
- environment.execute_config(package, package_name, config_name, nil, argv) { |cmd| os.shell_exec cmd }
246
- elsif not repository.updating?
247
- $stderr.puts "Nothing to do.\n"
248
- $stderr.puts USAGE
249
- $stderr.puts %q<Run "fig --help" for a full list of commands.>
250
- return 1
251
- end
252
-
253
- return 0
254
- end
255
-
256
- def log_error_message(error)
257
- # If there's no message, we assume that the cause has already been logged.
258
- if error_has_message?(error)
259
- Logging.fatal error.to_s
260
- end
261
- end
262
-
263
- def run_with_exception_handling(argv)
264
- begin
265
- return_code = run_fig(argv)
266
- return return_code
267
- rescue URLAccessError => error
268
- urls = exception.urls.join(', ')
269
- $stderr.puts "Access to #{urls} in #{exception.package}/#{exception.version} not allowed."
270
- return 1
271
- rescue UserInputError => error
272
- log_error_message(error)
273
- return 1
274
- rescue OptionParser::InvalidOption => error
275
- $stderr.puts error.to_s
276
- $stderr.puts USAGE
277
- return 1
278
- rescue RepositoryError => error
279
- log_error_message(error)
280
- return 1
281
- end
282
- end
283
-
284
- def error_has_message?(error)
285
- class_name = error.class.name
286
- return error.message != class_name
287
- end
288
- end
@@ -1,32 +0,0 @@
1
- require 'fig/logging'
2
- require 'fig/packageerror'
3
- require 'fig/package/statement'
4
-
5
- module Fig; end
6
- class Fig::Package; end
7
-
8
- # Dual role: "include :configname" incorporates one configuration into another;
9
- # "include package[/version]" declares a dependency upon another package.
10
- class Fig::Package::Include
11
- include Fig::Package::Statement
12
-
13
- attr_reader :package_name, :config_name, :version_name, :overrides
14
-
15
- def initialize(package_name, config_name, version_name, overrides)
16
- @package_name = package_name
17
- @config_name = config_name
18
- @version_name = version_name
19
- @overrides = overrides
20
- end
21
-
22
- def unparse(indent)
23
- descriptor = ''
24
- descriptor += @package_name if @package_name
25
- descriptor += "/#{@version_name}" if @version_name
26
- descriptor += ":#{@config_name}" if @config_name
27
- @overrides.each do |override|
28
- descriptor += override.unparse
29
- end
30
- return "#{indent}include #{descriptor}"
31
- end
32
- end
@@ -1,22 +0,0 @@
1
- require 'fig/logging'
2
- require 'fig/packageerror'
3
- require 'fig/package/statement'
4
-
5
- module Fig; end
6
- class Fig::Package; end
7
-
8
- # This class appears to be unused, though it is in the grammar.
9
- class Fig::Package::Install
10
- include Fig::Package::Statement
11
-
12
- def initialize(statements)
13
- @statements = statements
14
- end
15
-
16
- def unparse(indent)
17
- prefix = "\n#{indent}install"
18
- body = @statements.map { |statement| statement.unparse(indent+' ') }.join("\n")
19
- suffix = "#{indent}end"
20
- return [prefix, body, suffix].join("\n")
21
- end
22
- end
@@ -1,13 +0,0 @@
1
- module Fig; end
2
- class Fig::Package; end
3
-
4
- # A statement within a package configuration file (package.fig).
5
- module Fig::Package::Statement
6
- def walk_statements(&block)
7
- return
8
- end
9
-
10
- def urls
11
- return []
12
- end
13
- end