fig 0.1.57 → 0.1.59
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 +80 -0
- data/VERSION +1 -1
- data/bin/fig-debug +12 -0
- data/bin/fig.bat +1 -0
- data/lib/fig/applicationconfiguration.rb +41 -41
- data/lib/fig/backtrace.rb +28 -30
- data/lib/fig/command.rb +52 -112
- data/lib/fig/command/listing.rb +207 -41
- data/lib/fig/command/packageload.rb +137 -0
- data/lib/fig/environment.rb +59 -72
- data/lib/fig/environmentvariables.rb +44 -0
- data/lib/fig/environmentvariables/caseinsensitive.rb +49 -0
- data/lib/fig/environmentvariables/casesensitive.rb +30 -0
- data/lib/fig/grammar.treetop +60 -35
- data/lib/fig/log4r/outputter.rb +96 -0
- data/lib/fig/logging.rb +2 -1
- data/lib/fig/logging/colorizable.rb +14 -0
- data/lib/fig/nosuchpackageconfigerror.rb +15 -0
- data/lib/fig/operatingsystem.rb +24 -13
- data/lib/fig/options.rb +70 -20
- data/lib/fig/package.rb +25 -26
- data/lib/fig/packagecache.rb +3 -3
- data/lib/fig/packagedescriptor.rb +36 -19
- data/lib/fig/packageparseerror.rb +7 -0
- data/lib/fig/parser.rb +76 -39
- data/lib/fig/repository.rb +131 -93
- data/lib/fig/retriever.rb +61 -39
- data/lib/fig/statement.rb +24 -2
- data/lib/fig/statement/archive.rb +4 -6
- data/lib/fig/statement/command.rb +4 -6
- data/lib/fig/statement/configuration.rb +7 -9
- data/lib/fig/statement/include.rb +49 -32
- data/lib/fig/statement/override.rb +7 -8
- data/lib/fig/statement/path.rb +4 -6
- data/lib/fig/statement/publish.rb +4 -11
- data/lib/fig/statement/resource.rb +4 -6
- data/lib/fig/statement/retrieve.rb +4 -6
- data/lib/fig/statement/set.rb +4 -6
- data/lib/fig/urlaccesserror.rb +4 -5
- metadata +52 -215
- data/LICENSE +0 -27
- data/README.md +0 -526
- data/TODO +0 -4
- data/lib/fig/packageerror.rb +0 -8
- data/lib/fig/windows.rb +0 -44
data/lib/fig/retriever.rb
CHANGED
|
@@ -2,6 +2,8 @@ require 'ostruct'
|
|
|
2
2
|
require 'set'
|
|
3
3
|
|
|
4
4
|
require 'fig/logging'
|
|
5
|
+
require 'fig/logging/colorizable'
|
|
6
|
+
require 'fig/packagedescriptor'
|
|
5
7
|
|
|
6
8
|
module Fig; end
|
|
7
9
|
|
|
@@ -13,31 +15,37 @@ module Fig; end
|
|
|
13
15
|
class Fig::Retriever
|
|
14
16
|
def initialize(base_dir)
|
|
15
17
|
@base_dir = base_dir
|
|
16
|
-
@
|
|
17
|
-
@
|
|
18
|
+
@package_metadata_by_name = {}
|
|
19
|
+
@local_fig_data_directory = File.join(@base_dir, '.fig')
|
|
18
20
|
|
|
19
|
-
file = File.join(@
|
|
21
|
+
file = File.join(@local_fig_data_directory, 'retrieve')
|
|
20
22
|
if File.exist?(file)
|
|
21
|
-
|
|
23
|
+
load_metadata(file)
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
def
|
|
27
|
+
def with_package_version(name, version)
|
|
26
28
|
if name and version
|
|
27
|
-
@
|
|
28
|
-
if @
|
|
29
|
-
@
|
|
30
|
-
Fig::Logging.info
|
|
29
|
+
@package_meta = @package_metadata_by_name[name]
|
|
30
|
+
if @package_meta && @package_meta.version != version
|
|
31
|
+
@package_meta.files.each do |relpath|
|
|
32
|
+
Fig::Logging.info(
|
|
33
|
+
Fig::Logging::Colorizable.new(
|
|
34
|
+
"- [#{formatted_meta()}] #{relpath}",
|
|
35
|
+
:magenta,
|
|
36
|
+
nil
|
|
37
|
+
)
|
|
38
|
+
)
|
|
31
39
|
FileUtils.rm_f(File.join(@base_dir, relpath))
|
|
32
40
|
end
|
|
33
|
-
@
|
|
41
|
+
@package_meta = nil
|
|
34
42
|
end
|
|
35
|
-
if not @
|
|
36
|
-
@
|
|
37
|
-
@
|
|
43
|
+
if not @package_meta
|
|
44
|
+
@package_meta = new_package_metadata(name, version)
|
|
45
|
+
@package_metadata_by_name[name] = @package_meta
|
|
38
46
|
end
|
|
39
47
|
else
|
|
40
|
-
@
|
|
48
|
+
@package_meta = nil
|
|
41
49
|
end
|
|
42
50
|
yield
|
|
43
51
|
end
|
|
@@ -46,12 +54,12 @@ class Fig::Retriever
|
|
|
46
54
|
copy(source, relpath)
|
|
47
55
|
end
|
|
48
56
|
|
|
49
|
-
def
|
|
50
|
-
FileUtils.mkdir_p(@
|
|
51
|
-
File.open(File.join(@
|
|
52
|
-
@
|
|
53
|
-
|
|
54
|
-
f << target << '=' <<
|
|
57
|
+
def save_metadata
|
|
58
|
+
FileUtils.mkdir_p(@local_fig_data_directory)
|
|
59
|
+
File.open(File.join(@local_fig_data_directory, 'retrieve'), 'w') do |f|
|
|
60
|
+
@package_metadata_by_name.each do |name, package_meta|
|
|
61
|
+
package_meta.files.each do |target|
|
|
62
|
+
f << target << '=' << formatted_meta(package_meta) << "\n"
|
|
55
63
|
end
|
|
56
64
|
end
|
|
57
65
|
end
|
|
@@ -59,35 +67,36 @@ class Fig::Retriever
|
|
|
59
67
|
|
|
60
68
|
private
|
|
61
69
|
|
|
62
|
-
def
|
|
70
|
+
def load_metadata(file)
|
|
63
71
|
File.open(file).each_line do |line|
|
|
64
72
|
line = line.strip()
|
|
65
73
|
if line =~ /^(.+)=(.+)\/(.+)$/
|
|
66
74
|
target = $1
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if
|
|
71
|
-
if
|
|
75
|
+
package_name = $2
|
|
76
|
+
package_version = $3
|
|
77
|
+
package_meta = @package_metadata_by_name[package_name]
|
|
78
|
+
if package_meta
|
|
79
|
+
if package_meta.version != package_version
|
|
72
80
|
raise 'version mismatch in .figretrieve'
|
|
73
81
|
end
|
|
74
82
|
else
|
|
75
|
-
|
|
76
|
-
@
|
|
83
|
+
package_meta = new_package_metadata(package_name, package_version)
|
|
84
|
+
@package_metadata_by_name[package_name] = package_meta
|
|
77
85
|
end
|
|
78
|
-
|
|
86
|
+
package_meta.files << target
|
|
79
87
|
else
|
|
80
88
|
raise "parse error in #{file}: #{line}"
|
|
81
89
|
end
|
|
82
90
|
end
|
|
83
91
|
end
|
|
84
92
|
|
|
85
|
-
def
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
def new_package_metadata(name, version)
|
|
94
|
+
package_meta = OpenStruct.new
|
|
95
|
+
package_meta.name = name
|
|
96
|
+
package_meta.version = version
|
|
97
|
+
package_meta.files = Set.new()
|
|
98
|
+
|
|
99
|
+
return package_meta
|
|
91
100
|
end
|
|
92
101
|
|
|
93
102
|
def copy(source, relpath)
|
|
@@ -103,17 +112,30 @@ class Fig::Retriever
|
|
|
103
112
|
end
|
|
104
113
|
end
|
|
105
114
|
else
|
|
106
|
-
if !File.exist?(target) || File.mtime(source) > File.mtime(target)
|
|
115
|
+
if ! File.exist?(target) || File.mtime(source) > File.mtime(target)
|
|
107
116
|
if Fig::Logging.debug?
|
|
108
|
-
Fig::Logging.debug
|
|
117
|
+
Fig::Logging.debug \
|
|
118
|
+
"Copying package [#{formatted_meta()}] from #{source} to #{target}."
|
|
109
119
|
else
|
|
110
|
-
Fig::Logging.info
|
|
120
|
+
Fig::Logging.info(
|
|
121
|
+
Fig::Logging::Colorizable.new(
|
|
122
|
+
"+ [#{formatted_meta()}] #{relpath}",
|
|
123
|
+
:green,
|
|
124
|
+
nil
|
|
125
|
+
)
|
|
126
|
+
)
|
|
111
127
|
end
|
|
112
128
|
FileUtils.mkdir_p(File.dirname(target))
|
|
113
129
|
|
|
114
130
|
FileUtils.cp(source, target, :preserve => true)
|
|
115
131
|
end
|
|
116
|
-
@
|
|
132
|
+
@package_meta.files << relpath if @package_meta
|
|
117
133
|
end
|
|
118
134
|
end
|
|
135
|
+
|
|
136
|
+
def formatted_meta(package_meta = @package_meta)
|
|
137
|
+
return Fig::PackageDescriptor.format(
|
|
138
|
+
package_meta.name, package_meta.version, nil
|
|
139
|
+
)
|
|
140
|
+
end
|
|
119
141
|
end
|
data/lib/fig/statement.rb
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
1
|
module Fig; end
|
|
2
2
|
|
|
3
3
|
# A statement within a package configuration file (package.fig).
|
|
4
|
-
|
|
4
|
+
class Fig::Statement
|
|
5
|
+
attr_reader :line, :column
|
|
6
|
+
|
|
7
|
+
# This mess of getting these as a single array necessary is due to
|
|
8
|
+
# limitations of the "*" array splat operator in ruby v1.8.
|
|
9
|
+
def initialize(line_column)
|
|
10
|
+
if line_column
|
|
11
|
+
@line, @column = *line_column
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
5
15
|
# Block will receive a Statement.
|
|
6
16
|
def walk_statements(&block)
|
|
7
17
|
return
|
|
8
18
|
end
|
|
9
19
|
|
|
10
20
|
# Block will receive a Package and a Statement.
|
|
11
|
-
def walk_statements_following_package_dependencies(repository, package, &block)
|
|
21
|
+
def walk_statements_following_package_dependencies(repository, package, configuration, &block)
|
|
12
22
|
return
|
|
13
23
|
end
|
|
14
24
|
|
|
15
25
|
def urls
|
|
16
26
|
return []
|
|
17
27
|
end
|
|
28
|
+
|
|
29
|
+
# Returns a representation of the position of this statement, if the position
|
|
30
|
+
# is known, empty string otherwise. This is written with the idea that you
|
|
31
|
+
# can do something like "puts %Q<Found a
|
|
32
|
+
# statement%{statement.position_string()}.>" and get nice looking output
|
|
33
|
+
# regardless of whether the position is actually known or not.
|
|
34
|
+
def position_string
|
|
35
|
+
return '' if not @line
|
|
36
|
+
return '' if not @column
|
|
37
|
+
|
|
38
|
+
return " (line #{@line}, column #{@column})"
|
|
39
|
+
end
|
|
18
40
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'fig/logging'
|
|
2
|
-
require 'fig/packageerror'
|
|
3
1
|
require 'fig/statement'
|
|
4
2
|
|
|
5
3
|
module Fig; end
|
|
@@ -7,12 +5,12 @@ module Fig; end
|
|
|
7
5
|
# Specifies an archive file (possibly via a URL) that is part of the current package.
|
|
8
6
|
#
|
|
9
7
|
# Differs from a Resource in that the contents will be extracted.
|
|
10
|
-
class Fig::Statement::Archive
|
|
11
|
-
include Fig::Statement
|
|
12
|
-
|
|
8
|
+
class Fig::Statement::Archive < Fig::Statement
|
|
13
9
|
attr_reader :url
|
|
14
10
|
|
|
15
|
-
def initialize(url)
|
|
11
|
+
def initialize(line_column, url)
|
|
12
|
+
super(line_column)
|
|
13
|
+
|
|
16
14
|
@url = url
|
|
17
15
|
end
|
|
18
16
|
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
require 'fig/logging'
|
|
2
|
-
require 'fig/packageerror'
|
|
3
1
|
require 'fig/statement'
|
|
4
2
|
|
|
5
3
|
module Fig; end
|
|
6
4
|
|
|
7
5
|
# Specifies a default command that will be executed for a given Configuration
|
|
8
6
|
# if no command is specified on the command-line.
|
|
9
|
-
class Fig::Statement::Command
|
|
10
|
-
include Fig::Statement
|
|
11
|
-
|
|
7
|
+
class Fig::Statement::Command < Fig::Statement
|
|
12
8
|
attr_reader :command
|
|
13
9
|
|
|
14
|
-
def initialize(command)
|
|
10
|
+
def initialize(line_column, command)
|
|
11
|
+
super(line_column)
|
|
12
|
+
|
|
15
13
|
@command = command
|
|
16
14
|
end
|
|
17
15
|
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
require 'fig/logging'
|
|
2
|
-
require 'fig/packageerror'
|
|
3
1
|
require 'fig/statement'
|
|
4
2
|
require 'fig/statement/command'
|
|
5
3
|
|
|
6
4
|
module Fig; end
|
|
7
5
|
|
|
8
6
|
# A grouping of statements within a configuration. May not be nested.
|
|
9
|
-
class Fig::Statement::Configuration
|
|
10
|
-
include Fig::Statement
|
|
11
|
-
|
|
7
|
+
class Fig::Statement::Configuration < Fig::Statement
|
|
12
8
|
attr_reader :name, :statements
|
|
13
9
|
|
|
14
|
-
def initialize(name, statements)
|
|
10
|
+
def initialize(line_column, name, statements)
|
|
11
|
+
super(line_column)
|
|
12
|
+
|
|
15
13
|
@name = name
|
|
16
14
|
@statements = statements
|
|
17
15
|
end
|
|
@@ -35,11 +33,11 @@ class Fig::Statement::Configuration
|
|
|
35
33
|
end
|
|
36
34
|
|
|
37
35
|
# Block will receive a Package and a Statement.
|
|
38
|
-
def walk_statements_following_package_dependencies(repository, package, &block)
|
|
36
|
+
def walk_statements_following_package_dependencies(repository, package, configuration, &block)
|
|
39
37
|
@statements.each do |statement|
|
|
40
|
-
yield package, statement
|
|
38
|
+
yield package, self, statement
|
|
41
39
|
statement.walk_statements_following_package_dependencies(
|
|
42
|
-
repository, package, &block
|
|
40
|
+
repository, package, self, &block
|
|
43
41
|
)
|
|
44
42
|
end
|
|
45
43
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'fig/logging'
|
|
2
1
|
require 'fig/packagedescriptor'
|
|
3
2
|
require 'fig/statement'
|
|
4
3
|
|
|
@@ -6,32 +5,22 @@ module Fig; end
|
|
|
6
5
|
|
|
7
6
|
# Dual role: "include :configname" incorporates one configuration into another;
|
|
8
7
|
# "include package[/version]" declares a dependency upon another package.
|
|
9
|
-
class Fig::Statement::Include
|
|
10
|
-
|
|
8
|
+
class Fig::Statement::Include < Fig::Statement
|
|
9
|
+
attr_reader :descriptor, :overrides, :containing_package_descriptor
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
def initialize(line_column, descriptor, overrides, containing_package_descriptor)
|
|
12
|
+
super(line_column)
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
%Q<No version in the package descriptor of "#{descriptor.name}" in an include statement>
|
|
18
|
-
if containing_package_name
|
|
19
|
-
message += %Q< in the .fig file for "#{containing_package_name}">
|
|
20
|
-
end
|
|
21
|
-
message += '. Whether or not the include statement will work is dependent upon the recursive dependency load order.'
|
|
22
|
-
|
|
23
|
-
Fig::Logging.warn(message)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
@descriptor = descriptor
|
|
27
|
-
@overrides = overrides
|
|
14
|
+
@descriptor = descriptor
|
|
15
|
+
@overrides = overrides
|
|
16
|
+
@containing_package_descriptor = containing_package_descriptor
|
|
28
17
|
end
|
|
29
18
|
|
|
30
19
|
def package_name
|
|
31
20
|
return @descriptor.name
|
|
32
21
|
end
|
|
33
22
|
|
|
34
|
-
def
|
|
23
|
+
def version
|
|
35
24
|
return @descriptor.version
|
|
36
25
|
end
|
|
37
26
|
|
|
@@ -39,23 +28,40 @@ class Fig::Statement::Include
|
|
|
39
28
|
return @descriptor.config
|
|
40
29
|
end
|
|
41
30
|
|
|
31
|
+
def complain_if_version_missing()
|
|
32
|
+
if @descriptor.name && ! @descriptor.version
|
|
33
|
+
message =
|
|
34
|
+
%Q<No version in the package descriptor of "#{@descriptor.name}" in an include statement>
|
|
35
|
+
if @containing_package_descriptor
|
|
36
|
+
package_string = @containing_package_descriptor.to_string()
|
|
37
|
+
if package_string && package_string != ''
|
|
38
|
+
message += %Q< in the .fig file for "#{package_string}">
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
message += %Q<#{position_string()}. Whether or not the include statement will work is dependent upon the recursive dependency load order.>
|
|
42
|
+
|
|
43
|
+
Fig::Logging.warn(message)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
42
47
|
# Assume that this statement is part of the parameter and return a descriptor
|
|
43
|
-
# that represents the fully resolved dependency
|
|
44
|
-
|
|
48
|
+
# that represents the fully resolved dependency, taking into account that the
|
|
49
|
+
# version might have been overridden.
|
|
50
|
+
def resolved_dependency_descriptor(containing_package, backtrace)
|
|
45
51
|
return Fig::PackageDescriptor.new(
|
|
46
|
-
referenced_package_name(
|
|
47
|
-
|
|
52
|
+
referenced_package_name(containing_package),
|
|
53
|
+
referenced_version(containing_package, backtrace),
|
|
48
54
|
referenced_config_name()
|
|
49
55
|
)
|
|
50
56
|
end
|
|
51
57
|
|
|
52
58
|
# Block will receive a Package and a Statement.
|
|
53
59
|
def walk_statements_following_package_dependencies(
|
|
54
|
-
repository, package, &block
|
|
60
|
+
repository, package, configuration, &block
|
|
55
61
|
)
|
|
56
62
|
referenced_package = nil
|
|
57
63
|
if package_name()
|
|
58
|
-
referenced_package = repository.get_package(
|
|
64
|
+
referenced_package = repository.get_package(descriptor())
|
|
59
65
|
else
|
|
60
66
|
referenced_package = package
|
|
61
67
|
end
|
|
@@ -64,7 +70,7 @@ class Fig::Statement::Include
|
|
|
64
70
|
|
|
65
71
|
yield referenced_package, configuration
|
|
66
72
|
configuration.walk_statements_following_package_dependencies(
|
|
67
|
-
repository, referenced_package, &block
|
|
73
|
+
repository, referenced_package, nil, &block
|
|
68
74
|
)
|
|
69
75
|
|
|
70
76
|
return
|
|
@@ -73,7 +79,7 @@ class Fig::Statement::Include
|
|
|
73
79
|
def unparse(indent)
|
|
74
80
|
text = ''
|
|
75
81
|
text += package_name() if package_name()
|
|
76
|
-
text += "/#{
|
|
82
|
+
text += "/#{version()}" if version()
|
|
77
83
|
text += ":#{config_name()}" if config_name()
|
|
78
84
|
@overrides.each do |override|
|
|
79
85
|
text += override.unparse
|
|
@@ -83,16 +89,27 @@ class Fig::Statement::Include
|
|
|
83
89
|
|
|
84
90
|
private
|
|
85
91
|
|
|
86
|
-
def referenced_package_name(
|
|
87
|
-
return package_name() ||
|
|
92
|
+
def referenced_package_name(containing_package)
|
|
93
|
+
return package_name() || containing_package.name()
|
|
88
94
|
end
|
|
89
95
|
|
|
90
|
-
def
|
|
96
|
+
def referenced_version(containing_package, backtrace)
|
|
97
|
+
overrides().each do
|
|
98
|
+
|override|
|
|
99
|
+
backtrace.add_override(override.package_name(), override.version())
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
package_name = nil
|
|
103
|
+
original_version = nil
|
|
91
104
|
if package_name()
|
|
92
|
-
|
|
105
|
+
package_name = package_name()
|
|
106
|
+
original_version = version()
|
|
107
|
+
else
|
|
108
|
+
package_name = containing_package.name()
|
|
109
|
+
original_version = containing_package.version()
|
|
93
110
|
end
|
|
94
111
|
|
|
95
|
-
return
|
|
112
|
+
return backtrace.get_override(package_name, original_version)
|
|
96
113
|
end
|
|
97
114
|
|
|
98
115
|
def referenced_config_name()
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
require 'fig/
|
|
2
|
-
require 'fig/packageerror'
|
|
1
|
+
require 'fig/packagedescriptor'
|
|
3
2
|
require 'fig/statement'
|
|
4
3
|
|
|
5
4
|
module Fig; end
|
|
@@ -11,17 +10,17 @@ module Fig; end
|
|
|
11
10
|
#
|
|
12
11
|
# indicates that, regardless of which version of somedependency the blah
|
|
13
12
|
# package says it needs, the blah package will actually use v3.2.6.
|
|
14
|
-
class Fig::Statement::Override
|
|
15
|
-
|
|
13
|
+
class Fig::Statement::Override < Fig::Statement
|
|
14
|
+
attr_reader :package_name, :version
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
def initialize(line_column, package_name, version)
|
|
17
|
+
super(line_column)
|
|
18
18
|
|
|
19
|
-
def initialize(package_name, version_name)
|
|
20
19
|
@package_name = package_name
|
|
21
|
-
@
|
|
20
|
+
@version = version
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
def unparse()
|
|
25
|
-
return ' override ' + @package_name
|
|
24
|
+
return ' override ' + Fig::PackageDescriptor.format(@package_name, @version, nil)
|
|
26
25
|
end
|
|
27
26
|
end
|