fig 0.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Changes +50 -0
- data/bin/fig +3 -0
- data/bin/fig-debug +3 -0
- data/bin/fig-download +4 -1
- data/lib/fig.rb +1 -1
- data/lib/fig/command.rb +10 -6
- data/lib/fig/command/action.rb +1 -1
- data/lib/fig/command/action/dump_package_definition_for_command_line.rb +7 -3
- data/lib/fig/command/action/role/list_walking_dependency_tree.rb +2 -1
- data/lib/fig/command/action/role/publish.rb +9 -9
- data/lib/fig/command/options.rb +9 -9
- data/lib/fig/command/package_applier.rb +7 -2
- data/lib/fig/command/package_loader.rb +15 -8
- data/lib/fig/include_backtrace.rb +1 -1
- data/lib/fig/operating_system.rb +33 -31
- data/lib/fig/package.rb +6 -10
- data/lib/fig/package_descriptor.rb +17 -5
- data/lib/fig/parser_package_build_state.rb +1 -0
- data/lib/fig/repository.rb +10 -3
- data/lib/fig/repository_package_publisher.rb +29 -4
- data/lib/fig/runtime_environment.rb +14 -12
- data/lib/fig/statement/configuration.rb +7 -1
- data/lib/fig/statement/synthetic_raw_text.rb +30 -0
- data/lib/fig/unparser.rb +6 -0
- metadata +125 -124
data/Changes
CHANGED
@@ -1,3 +1,53 @@
|
|
1
|
+
v0.2.3
|
2
|
+
|
3
|
+
Backwards incompatibilities:
|
4
|
+
|
5
|
+
- Now requires Ruby v1.9.2.
|
6
|
+
|
7
|
+
Miscellaneous:
|
8
|
+
|
9
|
+
- Warns about environment variables that refer to non-existent paths after
|
10
|
+
publishing.
|
11
|
+
|
12
|
+
fig --publish package/version --set foo=@/bar
|
13
|
+
|
14
|
+
Checking status of package/version...
|
15
|
+
Publishing package/version.
|
16
|
+
Publishing using the v0 grammar.
|
17
|
+
The foo variable points to a path that does not exist
|
18
|
+
(/tmp/fig-testing/home/repos/package/version/bar); retrieve statements
|
19
|
+
that are active when this package is included may fail.
|
20
|
+
|
21
|
+
Note that this check is done after the package has been successfully
|
22
|
+
published; it does not prevent problems, but only detects potential ones.
|
23
|
+
Due to the indirect and inexact relationship between paths from asset
|
24
|
+
statements and environment variable statements, the check cannot be done
|
25
|
+
before publishing.
|
26
|
+
|
27
|
+
- Warning about unused retrieve no longer appears when there is a problem
|
28
|
+
with the variable itself.
|
29
|
+
|
30
|
+
- Stack traces of includes contain file names and "command-line" if the
|
31
|
+
includes came from package definition files or from "--include" options.
|
32
|
+
E.g.
|
33
|
+
|
34
|
+
fig --update --list-variables --include thingy/1.0.0.30 --file some-dependencies.fig --config blahblahblah
|
35
|
+
|
36
|
+
Version mismatch for package thingy (1.0.0.30 vs 1.0.0.81).
|
37
|
+
<command-line>:default
|
38
|
+
thingy/1.0.0.30:default
|
39
|
+
<command-line>:default
|
40
|
+
<some-dependencies.fig>:blahblahblah
|
41
|
+
thingy/1.0.0.81:default
|
42
|
+
|
43
|
+
- Other error message clarifications.
|
44
|
+
|
45
|
+
v0.2.2.beta.3
|
46
|
+
v0.2.2.beta.2
|
47
|
+
v0.2.2.beta.1
|
48
|
+
|
49
|
+
- Test releases
|
50
|
+
|
1
51
|
v0.2.1
|
2
52
|
|
3
53
|
Backwards incompatibilities:
|
data/bin/fig
CHANGED
data/bin/fig-debug
CHANGED
data/bin/fig-download
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
( [1, 9, 2] <=> ( RUBY_VERSION.split(".").collect {|x| x.to_i} ) ) <= 0 or
|
4
|
+
abort "Ruby v1.9.2 is required; this is v#{RUBY_VERSION}."
|
5
|
+
|
3
6
|
# todo copied from os.rb
|
4
7
|
NOT_MODIFIED = 3
|
5
8
|
NOT_FOUND = 4
|
@@ -17,4 +20,4 @@ File.open(path) do |file|
|
|
17
20
|
end
|
18
21
|
end
|
19
22
|
|
20
|
-
exit SUCCESS
|
23
|
+
exit SUCCESS
|
data/lib/fig.rb
CHANGED
data/lib/fig/command.rb
CHANGED
@@ -58,7 +58,7 @@ class Fig::Command
|
|
58
58
|
if actions.any? {|action| not action.allow_both_descriptor_and_file? }
|
59
59
|
ensure_descriptor_and_file_were_not_both_specified()
|
60
60
|
end
|
61
|
-
|
61
|
+
check_asset_options()
|
62
62
|
|
63
63
|
configure()
|
64
64
|
set_up_base_package()
|
@@ -71,7 +71,8 @@ class Fig::Command
|
|
71
71
|
@environment,
|
72
72
|
@repository,
|
73
73
|
@operating_system,
|
74
|
-
@package_source_description
|
74
|
+
@package_source_description,
|
75
|
+
@package_loaded_from_path
|
75
76
|
)
|
76
77
|
|
77
78
|
actions.each do
|
@@ -130,7 +131,8 @@ class Fig::Command
|
|
130
131
|
:environment,
|
131
132
|
:repository,
|
132
133
|
:operating_system,
|
133
|
-
:package_source_description
|
134
|
+
:package_source_description,
|
135
|
+
:package_loaded_from_path
|
134
136
|
)
|
135
137
|
|
136
138
|
def handle_nothing_to_do()
|
@@ -149,6 +151,7 @@ class Fig::Command
|
|
149
151
|
end
|
150
152
|
|
151
153
|
$stderr.puts %q<Run "fig --help" for a full list of commands.>
|
154
|
+
check_asset_options
|
152
155
|
|
153
156
|
return Fig::Command::Action::EXIT_FAILURE
|
154
157
|
end
|
@@ -296,6 +299,7 @@ class Fig::Command
|
|
296
299
|
@base_package = package_loader.load_package_object_from_file()
|
297
300
|
end
|
298
301
|
@package_source_description = package_loader.package_source_description()
|
302
|
+
@package_loaded_from_path = package_loader.package_loaded_from_path()
|
299
303
|
|
300
304
|
return
|
301
305
|
end
|
@@ -380,12 +384,12 @@ class Fig::Command
|
|
380
384
|
return
|
381
385
|
end
|
382
386
|
|
383
|
-
def
|
384
|
-
statements = @options.
|
387
|
+
def check_asset_options()
|
388
|
+
statements = @options.asset_statements
|
385
389
|
return if statements.empty?
|
386
390
|
|
387
391
|
return if @options.actions.any? \
|
388
|
-
{|action| action.
|
392
|
+
{|action| action.cares_about_asset_options?}
|
389
393
|
|
390
394
|
statements.each do
|
391
395
|
|statement|
|
data/lib/fig/command/action.rb
CHANGED
@@ -18,6 +18,10 @@ class Fig::Command::Action::DumpPackageDefinitionForCommandLine
|
|
18
18
|
return nil
|
19
19
|
end
|
20
20
|
|
21
|
+
def cares_about_asset_options?()
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
|
21
25
|
def modifies_repository?()
|
22
26
|
return false
|
23
27
|
end
|
@@ -35,15 +39,15 @@ class Fig::Command::Action::DumpPackageDefinitionForCommandLine
|
|
35
39
|
end
|
36
40
|
|
37
41
|
def configure(options)
|
38
|
-
@environment_statements
|
39
|
-
@
|
42
|
+
@environment_statements = options.environment_statements
|
43
|
+
@asset_statements = options.asset_statements
|
40
44
|
|
41
45
|
return
|
42
46
|
end
|
43
47
|
|
44
48
|
def execute()
|
45
49
|
text_assembler = Fig::PackageDefinitionTextAssembler.new :emit_as_input
|
46
|
-
text_assembler.add_output @
|
50
|
+
text_assembler.add_output @asset_statements
|
47
51
|
text_assembler.add_output [
|
48
52
|
Fig::Statement::Configuration.new(
|
49
53
|
nil,
|
@@ -19,7 +19,7 @@ module Fig::Command::Action::Role::Publish
|
|
19
19
|
return true
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def cares_about_asset_options?()
|
23
23
|
return true
|
24
24
|
end
|
25
25
|
|
@@ -48,10 +48,10 @@ module Fig::Command::Action::Role::Publish
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def configure(options)
|
51
|
-
@descriptor
|
52
|
-
@environment_statements
|
53
|
-
@
|
54
|
-
@force
|
51
|
+
@descriptor = options.descriptor
|
52
|
+
@environment_statements = options.environment_statements
|
53
|
+
@asset_statements = options.asset_statements
|
54
|
+
@force = options.force?
|
55
55
|
|
56
56
|
return
|
57
57
|
end
|
@@ -70,7 +70,7 @@ module Fig::Command::Action::Role::Publish
|
|
70
70
|
|
71
71
|
if not @environment_statements.empty?
|
72
72
|
derive_publish_statements_from_environment_statements
|
73
|
-
elsif not @
|
73
|
+
elsif not @asset_statements.empty?
|
74
74
|
raise Fig::UserInputError.new(
|
75
75
|
'--resource/--archive options were specified, but no --set/--append option was given. Will not publish.'
|
76
76
|
)
|
@@ -86,9 +86,9 @@ module Fig::Command::Action::Role::Publish
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def derive_publish_statements_from_environment_statements
|
89
|
-
if @execution_context.
|
89
|
+
if @execution_context.package_loaded_from_path
|
90
90
|
message = 'Cannot publish based upon both a package definition file ('
|
91
|
-
message << @execution_context.
|
91
|
+
message << @execution_context.package_loaded_from_path
|
92
92
|
message << ') and --set/--append options.'
|
93
93
|
|
94
94
|
if @execution_context.package_source_description ==
|
@@ -104,7 +104,7 @@ module Fig::Command::Action::Role::Publish
|
|
104
104
|
end
|
105
105
|
|
106
106
|
@publish_statements =
|
107
|
-
@
|
107
|
+
@asset_statements +
|
108
108
|
[
|
109
109
|
Fig::Statement::Configuration.new(
|
110
110
|
nil,
|
data/lib/fig/command/options.rb
CHANGED
@@ -51,7 +51,7 @@ class Fig::Command::Options
|
|
51
51
|
attr_reader :home
|
52
52
|
attr_reader :log_config
|
53
53
|
attr_reader :log_level
|
54
|
-
attr_reader :
|
54
|
+
attr_reader :asset_statements
|
55
55
|
attr_reader :package_definition_file
|
56
56
|
attr_reader :parser
|
57
57
|
attr_reader :shell_command
|
@@ -191,7 +191,7 @@ class Fig::Command::Options
|
|
191
191
|
set_up_remote_repository_access()
|
192
192
|
set_up_commands()
|
193
193
|
set_up_environment_statements()
|
194
|
-
|
194
|
+
set_up_asset_statements()
|
195
195
|
set_up_queries()
|
196
196
|
set_up_program_configuration()
|
197
197
|
|
@@ -459,15 +459,15 @@ class Fig::Command::Options
|
|
459
459
|
return
|
460
460
|
end
|
461
461
|
|
462
|
-
def
|
463
|
-
@
|
462
|
+
def set_up_asset_statements()
|
463
|
+
@asset_statements = []
|
464
464
|
@parser.on(
|
465
465
|
'--archive PATH',
|
466
466
|
STARTS_WITH_NON_HYPHEN,
|
467
467
|
'include PATH archive in package (when using --publish)'
|
468
468
|
) do |path|
|
469
|
-
@
|
470
|
-
|
469
|
+
@asset_statements <<
|
470
|
+
new_asset_statement('--archive', path, Fig::Statement::Archive)
|
471
471
|
end
|
472
472
|
|
473
473
|
@parser.on(
|
@@ -475,8 +475,8 @@ class Fig::Command::Options
|
|
475
475
|
STARTS_WITH_NON_HYPHEN,
|
476
476
|
'include PATH resource in package (when using --publish)'
|
477
477
|
) do |path|
|
478
|
-
@
|
479
|
-
|
478
|
+
@asset_statements <<
|
479
|
+
new_asset_statement('--resource', path, Fig::Statement::Resource)
|
480
480
|
end
|
481
481
|
|
482
482
|
return
|
@@ -608,7 +608,7 @@ class Fig::Command::Options
|
|
608
608
|
return statement_class.new(nil, "#{option} option", variable, value)
|
609
609
|
end
|
610
610
|
|
611
|
-
def
|
611
|
+
def new_asset_statement(option, raw_path, statement_class)
|
612
612
|
tokenized_path =
|
613
613
|
statement_class.validate_and_process_escapes_in_location(raw_path) do
|
614
614
|
|error_description|
|
@@ -66,7 +66,10 @@ class Fig::Command::PackageApplier
|
|
66
66
|
nil,
|
67
67
|
%Q<[synthetic statement created in #{__FILE__} line #{__LINE__}]>,
|
68
68
|
Fig::PackageDescriptor.new(
|
69
|
-
@base_package.name(),
|
69
|
+
@base_package.name(),
|
70
|
+
@base_package.version(),
|
71
|
+
@base_config,
|
72
|
+
:description => @base_package.description
|
70
73
|
),
|
71
74
|
nil
|
72
75
|
)
|
@@ -82,7 +85,9 @@ class Fig::Command::PackageApplier
|
|
82
85
|
configuration_statements.flatten()
|
83
86
|
)
|
84
87
|
|
85
|
-
return Fig::Package.new(
|
88
|
+
return Fig::Package.new(
|
89
|
+
nil, nil, 'command-line', '.', [configuration_statement]
|
90
|
+
)
|
86
91
|
end
|
87
92
|
|
88
93
|
def make_no_such_package_exception_descriptive(exception)
|
@@ -5,6 +5,8 @@ module Fig; end
|
|
5
5
|
class Fig::Command; end
|
6
6
|
|
7
7
|
class Fig::Command::PackageLoader
|
8
|
+
attr_reader :package_loaded_from_path
|
9
|
+
|
8
10
|
DEFAULT_FIG_FILE = 'package.fig'
|
9
11
|
|
10
12
|
def initialize(
|
@@ -43,8 +45,9 @@ class Fig::Command::PackageLoader
|
|
43
45
|
if @package_loaded_from_path
|
44
46
|
return @package_loaded_from_path
|
45
47
|
elsif @descriptor
|
46
|
-
return
|
47
|
-
|
48
|
+
return Fig::PackageDescriptor.format(
|
49
|
+
@descriptor.name, @descriptor.version, nil
|
50
|
+
)
|
48
51
|
end
|
49
52
|
|
50
53
|
return nil
|
@@ -92,14 +95,17 @@ class Fig::Command::PackageLoader
|
|
92
95
|
|
93
96
|
source_description = package_source_description()
|
94
97
|
|
98
|
+
descriptor = Fig::PackageDescriptor.new(
|
99
|
+
nil,
|
100
|
+
nil,
|
101
|
+
nil,
|
102
|
+
:description => source_description,
|
103
|
+
:source_description => source_description
|
104
|
+
)
|
105
|
+
|
95
106
|
@base_package =
|
96
107
|
Fig::Parser.new(@application_configuration, :check_include_versions).parse_package(
|
97
|
-
|
98
|
-
nil, nil, nil, :source_description => source_description
|
99
|
-
),
|
100
|
-
'.',
|
101
|
-
source_description,
|
102
|
-
definition_text
|
108
|
+
descriptor, '.', source_description, definition_text
|
103
109
|
)
|
104
110
|
|
105
111
|
return
|
@@ -109,6 +115,7 @@ class Fig::Command::PackageLoader
|
|
109
115
|
@base_package = Fig::Package.new(
|
110
116
|
nil,
|
111
117
|
nil,
|
118
|
+
'synthetic',
|
112
119
|
'.',
|
113
120
|
[
|
114
121
|
Fig::Statement::Configuration.new(
|
@@ -51,7 +51,7 @@ class Fig::IncludeBacktrace
|
|
51
51
|
for descriptor in stack
|
52
52
|
indent=''
|
53
53
|
i.times { indent += ' ' }
|
54
|
-
out.puts indent + descriptor.to_string(:use_default_config)
|
54
|
+
out.puts indent + descriptor.to_string(:use_default_config, :use_description)
|
55
55
|
i += 1
|
56
56
|
end
|
57
57
|
end
|
data/lib/fig/operating_system.rb
CHANGED
@@ -3,7 +3,7 @@ require 'fileutils'
|
|
3
3
|
require 'find'
|
4
4
|
# Must specify absolute path of ::Archive when using
|
5
5
|
# this module to avoid conflicts with Fig::Statement::Archive
|
6
|
-
require 'libarchive_ruby'
|
6
|
+
require 'libarchive_ruby'
|
7
7
|
require 'net/http'
|
8
8
|
require 'net/ssh'
|
9
9
|
require 'net/sftp'
|
@@ -19,6 +19,7 @@ require 'fig/environment_variables/case_sensitive'
|
|
19
19
|
require 'fig/file_not_found_error'
|
20
20
|
require 'fig/logging'
|
21
21
|
require 'fig/network_error'
|
22
|
+
require 'fig/repository_error'
|
22
23
|
require 'fig/url'
|
23
24
|
require 'fig/user_input_error'
|
24
25
|
|
@@ -34,10 +35,6 @@ class Fig::OperatingSystem
|
|
34
35
|
RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
35
36
|
end
|
36
37
|
|
37
|
-
def self.java?
|
38
|
-
RUBY_PLATFORM == 'java'
|
39
|
-
end
|
40
|
-
|
41
38
|
def self.unix?
|
42
39
|
!windows?
|
43
40
|
end
|
@@ -418,26 +415,22 @@ class Fig::OperatingSystem
|
|
418
415
|
|
419
416
|
# Expects files_to_archive as an Array of filenames.
|
420
417
|
def create_archive(archive_name, files_to_archive)
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
entry.
|
432
|
-
|
433
|
-
|
434
|
-
entry.symlink = linked
|
435
|
-
end
|
436
|
-
writer.write_header(entry)
|
418
|
+
# TODO: Need to verify files_to_archive exists.
|
419
|
+
::Archive.write_open_filename(
|
420
|
+
archive_name, ::Archive::COMPRESSION_GZIP, ::Archive::FORMAT_TAR
|
421
|
+
) do |writer|
|
422
|
+
files_to_archive.each do |file_name|
|
423
|
+
writer.new_entry do |entry|
|
424
|
+
entry.copy_lstat(file_name)
|
425
|
+
entry.pathname = file_name
|
426
|
+
if entry.symbolic_link?
|
427
|
+
linked = File.readlink(file_name)
|
428
|
+
entry.symlink = linked
|
429
|
+
end
|
430
|
+
writer.write_header(entry)
|
437
431
|
|
438
|
-
|
439
|
-
|
440
|
-
end
|
432
|
+
if entry.regular?
|
433
|
+
writer.write_data(open(file_name) {|f| f.binmode; f.read })
|
441
434
|
end
|
442
435
|
end
|
443
436
|
end
|
@@ -451,12 +444,21 @@ class Fig::OperatingSystem
|
|
451
444
|
# .zip
|
452
445
|
def unpack_archive(dir, file)
|
453
446
|
Dir.chdir(dir) do
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
::Archive.read_open_filename(file) do |reader|
|
458
|
-
while entry = reader.next_header
|
447
|
+
::Archive.read_open_filename(file) do |reader|
|
448
|
+
while entry = reader.next_header
|
449
|
+
begin
|
459
450
|
reader.extract(entry)
|
451
|
+
rescue Archive::Error => exception
|
452
|
+
# Nice how the error message doesn't include any information about
|
453
|
+
# what was having the problem.
|
454
|
+
message = exception.message.sub /^Extract archive failed: /, ''
|
455
|
+
new_exception =
|
456
|
+
Fig::RepositoryError.new(
|
457
|
+
"Could not extract #{entry.pathname} from #{file}: #{message}"
|
458
|
+
)
|
459
|
+
|
460
|
+
new_exception.set_backtrace exception.backtrace
|
461
|
+
raise new_exception
|
460
462
|
end
|
461
463
|
end
|
462
464
|
end
|
@@ -465,9 +467,9 @@ class Fig::OperatingSystem
|
|
465
467
|
|
466
468
|
def shell_exec(command)
|
467
469
|
if Fig::OperatingSystem.windows?
|
468
|
-
plain_exec
|
470
|
+
plain_exec [ ENV['ComSpec'], '/c', command ]
|
469
471
|
else
|
470
|
-
plain_exec
|
472
|
+
plain_exec [ ENV['SHELL'], '-c', command ]
|
471
473
|
end
|
472
474
|
end
|
473
475
|
|