fig 0.1.57 → 0.1.59
Sign up to get free protection for your applications and to get access to all the features.
- 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
|