fig 0.1.38-java
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/LICENSE +27 -0
- data/README.md +229 -0
- data/bin/fig +190 -0
- data/bin/fig-download +20 -0
- data/lib/fig.rb +0 -0
- data/lib/fig/backtrace.rb +50 -0
- data/lib/fig/environment.rb +192 -0
- data/lib/fig/grammar.treetop +157 -0
- data/lib/fig/options.rb +106 -0
- data/lib/fig/os.rb +396 -0
- data/lib/fig/package.rb +220 -0
- data/lib/fig/parser.rb +27 -0
- data/lib/fig/repository.rb +241 -0
- data/lib/fig/retriever.rb +107 -0
- data/lib/fig/windows.rb +46 -0
- metadata +159 -0
data/lib/fig/parser.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'polyglot'
|
2
|
+
require 'treetop'
|
3
|
+
|
4
|
+
require 'fig/grammar'
|
5
|
+
|
6
|
+
module Fig
|
7
|
+
class Parser
|
8
|
+
def initialize
|
9
|
+
@parser = FigParser.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_package(package_name, version_name, directory, input)
|
13
|
+
input = input.gsub(/#.*$/, '')
|
14
|
+
result = @parser.parse(" #{input} ")
|
15
|
+
if result.nil?
|
16
|
+
$stderr.puts "#{directory}: #{@parser.failure_reason}"
|
17
|
+
exit 10
|
18
|
+
end
|
19
|
+
result.to_package(package_name, version_name, directory)
|
20
|
+
end
|
21
|
+
|
22
|
+
# def parse_descriptor(descriptor)
|
23
|
+
# puts @parser.methods.sort
|
24
|
+
# end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
require 'fig/parser'
|
2
|
+
|
3
|
+
module Fig
|
4
|
+
class Repository
|
5
|
+
def initialize(os, local_repository_dir, remote_repository_url, remote_repository_user=nil, update=false, update_if_missing=true)
|
6
|
+
@os = os
|
7
|
+
@local_repository_dir = local_repository_dir
|
8
|
+
@remote_repository_url = remote_repository_url
|
9
|
+
@remote_repository_user = remote_repository_user
|
10
|
+
@update = update
|
11
|
+
@update_if_missing = update_if_missing
|
12
|
+
@parser = Parser.new
|
13
|
+
|
14
|
+
@overrides = {}
|
15
|
+
if File.exist?('fig.properties')
|
16
|
+
File.readlines('fig.properties').each do |line|
|
17
|
+
descriptor, path = line.strip.split('=')
|
18
|
+
@overrides[descriptor] = path
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def clean(package_name, version_name)
|
24
|
+
dir = File.join(@local_repository_dir, package_name)
|
25
|
+
dir = File.join(dir, version_name) if version_name
|
26
|
+
FileUtils.rm_rf(dir)
|
27
|
+
end
|
28
|
+
|
29
|
+
def list_packages
|
30
|
+
results = []
|
31
|
+
if File.exist?(@local_repository_dir)
|
32
|
+
@os.list(@local_repository_dir).each do |package_name|
|
33
|
+
@os.list(File.join(@local_repository_dir, package_name)).each do |version_name|
|
34
|
+
results << "#{package_name}/#{version_name}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
results
|
39
|
+
end
|
40
|
+
|
41
|
+
def list_remote_packages
|
42
|
+
@os.download_list(@remote_repository_url)
|
43
|
+
end
|
44
|
+
|
45
|
+
def publish_package(package_statements, package_name, version_name, local_only)
|
46
|
+
temp_dir = temp_dir_for_package(package_name, version_name)
|
47
|
+
@os.clear_directory(temp_dir)
|
48
|
+
local_dir = local_dir_for_package(package_name, version_name)
|
49
|
+
@os.clear_directory(local_dir)
|
50
|
+
fig_file = File.join(temp_dir, ".fig")
|
51
|
+
content = bundle_resources(package_statements).map do |statement|
|
52
|
+
if statement.is_a?(Publish)
|
53
|
+
nil
|
54
|
+
elsif statement.is_a?(Archive) || statement.is_a?(Resource)
|
55
|
+
if statement.is_a?(Resource) && !is_url?(statement.url)
|
56
|
+
archive_name = statement.url
|
57
|
+
archive_remote = "#{remote_dir_for_package(package_name, version_name)}/#{statement.url}"
|
58
|
+
else
|
59
|
+
archive_name = statement.url.split("/").last
|
60
|
+
archive_remote = "#{remote_dir_for_package(package_name, version_name)}/#{archive_name}"
|
61
|
+
end
|
62
|
+
if is_url?(statement.url)
|
63
|
+
archive_local = File.join(temp_dir, archive_name)
|
64
|
+
@os.download(statement.url, archive_local)
|
65
|
+
else
|
66
|
+
archive_local = statement.url
|
67
|
+
end
|
68
|
+
@os.upload(archive_local, archive_remote, @remote_repository_user) unless local_only
|
69
|
+
@os.copy(archive_local, local_dir + "/" + archive_name)
|
70
|
+
if statement.is_a?(Archive)
|
71
|
+
@os.unpack_archive(local_dir, archive_name)
|
72
|
+
end
|
73
|
+
statement.class.new(archive_name).unparse('')
|
74
|
+
else
|
75
|
+
statement.unparse('')
|
76
|
+
end
|
77
|
+
end.select {|s|not s.nil?}
|
78
|
+
@os.write(fig_file, content.join("\n").strip)
|
79
|
+
@os.upload(fig_file, remote_fig_file_for_package(package_name, version_name), @remote_repository_user) unless local_only
|
80
|
+
@os.copy(fig_file, local_fig_file_for_package(package_name, version_name))
|
81
|
+
end
|
82
|
+
|
83
|
+
def bundle_resources(package_statements)
|
84
|
+
resources = []
|
85
|
+
new_package_statements = package_statements.reject do |statement|
|
86
|
+
if statement.is_a?(Resource) && !is_url?(statement.url)
|
87
|
+
resources << statement.url
|
88
|
+
true
|
89
|
+
else
|
90
|
+
false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
if resources.size > 0
|
94
|
+
resources = expand_globs_from(resources)
|
95
|
+
file = "resources.tar.gz"
|
96
|
+
@os.create_archive(file, resources)
|
97
|
+
new_package_statements.unshift(Archive.new(file))
|
98
|
+
at_exit { File.delete(file) }
|
99
|
+
end
|
100
|
+
new_package_statements
|
101
|
+
end
|
102
|
+
|
103
|
+
def load_package(package_name, version_name)
|
104
|
+
if @update || (@update_if_missing && package_missing?(package_name, version_name))
|
105
|
+
update_package(package_name, version_name)
|
106
|
+
end
|
107
|
+
read_local_package(package_name, version_name)
|
108
|
+
end
|
109
|
+
|
110
|
+
def update_package(package_name, version_name)
|
111
|
+
remote_fig_file = remote_fig_file_for_package(package_name, version_name)
|
112
|
+
local_fig_file = local_fig_file_for_package(package_name, version_name)
|
113
|
+
begin
|
114
|
+
if @os.download(remote_fig_file, local_fig_file)
|
115
|
+
install_package(package_name, version_name)
|
116
|
+
end
|
117
|
+
rescue NotFoundException
|
118
|
+
$stderr.puts "Package not found in remote repository: #{package_name}/#{version_name}"
|
119
|
+
delete_local_package(package_name, version_name)
|
120
|
+
exit 1
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def read_local_package(package_name, version_name)
|
125
|
+
dir = local_dir_for_package(package_name, version_name)
|
126
|
+
read_package_from_directory(dir, package_name, version_name)
|
127
|
+
end
|
128
|
+
|
129
|
+
def read_remote_package(package_name, version_name)
|
130
|
+
url = remote_fig_file_for_package(package_name, version_name)
|
131
|
+
content = @os.read_url(url)
|
132
|
+
@parser.parse_package(package_name, version_name, nil, content)
|
133
|
+
end
|
134
|
+
|
135
|
+
def read_package_from_directory(dir, package_name, version_name)
|
136
|
+
file = File.join(dir, ".fig")
|
137
|
+
if not File.exist?(file)
|
138
|
+
file = File.join(dir, "package.fig")
|
139
|
+
end
|
140
|
+
if not File.exist?(file)
|
141
|
+
$stderr.puts "Fig file not found for package: #{file}"
|
142
|
+
exit 10
|
143
|
+
end
|
144
|
+
read_package_from_file(file, package_name, version_name)
|
145
|
+
end
|
146
|
+
|
147
|
+
def read_package_from_file(file_name, package_name, version_name)
|
148
|
+
if not @os.exist?(file_name)
|
149
|
+
$stderr.puts "Package not found: #{package_name}/#{version_name}"
|
150
|
+
exit 1
|
151
|
+
end
|
152
|
+
modified_time = @os.mtime(file_name)
|
153
|
+
content = @os.read(file_name)
|
154
|
+
@parser.parse_package(package_name, version_name, File.dirname(file_name), content)
|
155
|
+
end
|
156
|
+
|
157
|
+
def local_dir_for_package(package_name, version_name)
|
158
|
+
descriptor = "#{package_name}/#{version_name}"
|
159
|
+
dir = @overrides[descriptor]
|
160
|
+
if dir
|
161
|
+
$stderr.puts "override: #{descriptor}=#{dir}"
|
162
|
+
else
|
163
|
+
dir = File.join(@local_repository_dir, package_name, version_name)
|
164
|
+
end
|
165
|
+
dir
|
166
|
+
end
|
167
|
+
|
168
|
+
private
|
169
|
+
|
170
|
+
def install_package(package_name, version_name)
|
171
|
+
begin
|
172
|
+
package = read_local_package(package_name, version_name)
|
173
|
+
temp_dir = temp_dir_for_package(package_name, version_name)
|
174
|
+
@os.clear_directory(temp_dir)
|
175
|
+
package.archive_urls.each do |archive_url|
|
176
|
+
if not is_url?(archive_url)
|
177
|
+
archive_url = remote_dir_for_package(package_name, version_name) + "/" + archive_url
|
178
|
+
end
|
179
|
+
@os.download_archive(archive_url, File.join(temp_dir))
|
180
|
+
end
|
181
|
+
package.resource_urls.each do |resource_url|
|
182
|
+
if not is_url?(resource_url)
|
183
|
+
resource_url = remote_dir_for_package(package_name, version_name) + "/" + resource_url
|
184
|
+
end
|
185
|
+
@os.download_resource(resource_url, File.join(temp_dir))
|
186
|
+
end
|
187
|
+
local_dir = local_dir_for_package(package_name, version_name)
|
188
|
+
@os.clear_directory(local_dir)
|
189
|
+
# some packages contain no files, only a fig file.
|
190
|
+
if not (package.archive_urls.empty? && package.resource_urls.empty?)
|
191
|
+
FileUtils.mv(Dir.glob(File.join(temp_dir, "*")), local_dir)
|
192
|
+
end
|
193
|
+
write_local_package(package_name, version_name, package)
|
194
|
+
rescue
|
195
|
+
$stderr.puts "Install failed, cleaning up"
|
196
|
+
delete_local_package(package_name, version_name)
|
197
|
+
exit 10
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
# 'resources' is an Array of filenames: ['tmp/foo/file1', 'tmp/foo/*.jar']
|
202
|
+
def expand_globs_from(resources)
|
203
|
+
expanded_files = []
|
204
|
+
resources.each {|f| expanded_files.concat(Dir.glob(f))}
|
205
|
+
expanded_files
|
206
|
+
end
|
207
|
+
|
208
|
+
def is_url?(url)
|
209
|
+
not (/ftp:\/\/|http:\/\/|file:\/\/|ssh:\/\// =~ url).nil?
|
210
|
+
end
|
211
|
+
|
212
|
+
def delete_local_package(package_name, version_name)
|
213
|
+
FileUtils.rm_rf(local_dir_for_package(package_name, version_name))
|
214
|
+
end
|
215
|
+
|
216
|
+
def write_local_package(package_name, version_name, package)
|
217
|
+
file = local_fig_file_for_package(package_name, version_name)
|
218
|
+
@os.write(file, package.unparse)
|
219
|
+
end
|
220
|
+
|
221
|
+
def remote_fig_file_for_package(package_name, version_name)
|
222
|
+
"#{@remote_repository_url}/#{package_name}/#{version_name}/.fig"
|
223
|
+
end
|
224
|
+
|
225
|
+
def local_fig_file_for_package(package_name, version_name)
|
226
|
+
File.join(local_dir_for_package(package_name, version_name), ".fig")
|
227
|
+
end
|
228
|
+
|
229
|
+
def remote_dir_for_package(package_name, version_name)
|
230
|
+
"#{@remote_repository_url}/#{package_name}/#{version_name}"
|
231
|
+
end
|
232
|
+
|
233
|
+
def temp_dir_for_package(package_name, version_name)
|
234
|
+
File.join(@local_repository_dir, "tmp")
|
235
|
+
end
|
236
|
+
|
237
|
+
def package_missing?(package_name, version_name)
|
238
|
+
not File.exist?(local_fig_file_for_package(package_name, version_name))
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
# This class copies files from the project directories in ~/.fighome to the
|
5
|
+
# user's working directory. It keeps track of which files have already been copied, and which
|
6
|
+
# package/versions they came from, and deletes files as necessary to ensure that
|
7
|
+
# we never have files from two different versions of the same package in the user's
|
8
|
+
# working directory.
|
9
|
+
class Retriever
|
10
|
+
def initialize(base_dir)
|
11
|
+
@base_dir = base_dir
|
12
|
+
@configs = {}
|
13
|
+
@fig_dir = File.join(@base_dir, ".fig")
|
14
|
+
|
15
|
+
file = File.join(@fig_dir, "retrieve")
|
16
|
+
if File.exist?(file)
|
17
|
+
load(file)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def with_config(name, version)
|
22
|
+
if name and version
|
23
|
+
@config = @configs[name]
|
24
|
+
if @config && @config.version != version
|
25
|
+
@config.files.each do |relpath|
|
26
|
+
$stderr.puts "\033[31m- [#{@config.name}/#{@config.version}] #{relpath}\033[0m"
|
27
|
+
FileUtils.rm_f(File.join(@base_dir, relpath))
|
28
|
+
end
|
29
|
+
@config = nil
|
30
|
+
end
|
31
|
+
if not @config
|
32
|
+
@config = new_config(name, version)
|
33
|
+
@configs[name] = @config
|
34
|
+
end
|
35
|
+
else
|
36
|
+
@config = nil
|
37
|
+
end
|
38
|
+
yield
|
39
|
+
end
|
40
|
+
|
41
|
+
def retrieve(source, relpath)
|
42
|
+
copy(source, relpath)
|
43
|
+
end
|
44
|
+
|
45
|
+
def save
|
46
|
+
FileUtils.mkdir_p(@fig_dir)
|
47
|
+
File.open(File.join(@fig_dir, "retrieve"), 'w') do |f|
|
48
|
+
@configs.each do |name,config|
|
49
|
+
config.files.each do |target|
|
50
|
+
f << target << "=" << config.name << "/" << config.version << "\n"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def load(file)
|
59
|
+
File.open(file).each_line do |line|
|
60
|
+
line = line.strip()
|
61
|
+
if line =~ /^(.+)=(.+)\/(.+)$/
|
62
|
+
target = $1
|
63
|
+
config_name = $2
|
64
|
+
config_version = $3
|
65
|
+
config = @configs[config_name]
|
66
|
+
if config
|
67
|
+
if config.version != config_version
|
68
|
+
raise "version mismatch in .figretrieve"
|
69
|
+
end
|
70
|
+
else
|
71
|
+
config = new_config(config_name, config_version)
|
72
|
+
@configs[config_name] = config
|
73
|
+
end
|
74
|
+
config.files << target
|
75
|
+
else
|
76
|
+
raise "parse error in #{file}: #{line}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def new_config(name, version)
|
82
|
+
config = OpenStruct.new
|
83
|
+
config.name = name
|
84
|
+
config.version = version
|
85
|
+
config.files = Set.new()
|
86
|
+
return config
|
87
|
+
end
|
88
|
+
|
89
|
+
def copy(source, relpath)
|
90
|
+
target = File.join(@base_dir, relpath)
|
91
|
+
if File.directory?(source)
|
92
|
+
FileUtils.mkdir_p(target)
|
93
|
+
Dir.foreach(source) do |child|
|
94
|
+
if child != "." and child != ".."
|
95
|
+
copy(File.join(source, child), File.join(relpath, child))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
else
|
99
|
+
if !File.exist?(target) || File.mtime(source) > File.mtime(target)
|
100
|
+
$stderr.puts "\033[32m+ [#{@config.name}/#{@config.version}] #{relpath}\033[0m"
|
101
|
+
FileUtils.mkdir_p(File.dirname(target))
|
102
|
+
FileUtils.cp(source, target, :preserve => true)
|
103
|
+
end
|
104
|
+
@config.files << relpath if @config
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/lib/fig/windows.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Keeping Windows-specific implementation details here.
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
# I don't know how to set environment variables so that a sub-shell will
|
7
|
+
# be able to use them. Therefore, I'm punting, and creating a batch script
|
8
|
+
# on the fly to run a user supplied command.
|
9
|
+
|
10
|
+
module Fig
|
11
|
+
class Windows
|
12
|
+
|
13
|
+
BATCH_SCRIPT_TEMPLATE = <<EOF
|
14
|
+
@echo off
|
15
|
+
% ENV.each do |k,v|
|
16
|
+
set <%= k %>=<%= v %>
|
17
|
+
% end
|
18
|
+
|
19
|
+
cmd /C <%= command %>
|
20
|
+
EOF
|
21
|
+
|
22
|
+
|
23
|
+
def self.with_generated_batch_script(cmd)
|
24
|
+
command = cmd.join(' ')
|
25
|
+
template = ERB.new(BATCH_SCRIPT_TEMPLATE, 0, "%")
|
26
|
+
output = template.result(binding)
|
27
|
+
begin
|
28
|
+
tf = File.new("C:/tmp/fig_command.bat", "w")
|
29
|
+
FileUtils.chmod(0755, tf.path)
|
30
|
+
File.open(tf.path, "w") do |fh|
|
31
|
+
fh.puts output
|
32
|
+
end
|
33
|
+
tf.close
|
34
|
+
yield tf.path
|
35
|
+
ensure
|
36
|
+
# tf.delete
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.shell_exec_windows(cmd)
|
41
|
+
with_generated_batch_script(cmd) do |f|
|
42
|
+
Kernel.exec(f)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fig
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.38
|
6
|
+
platform: java
|
7
|
+
authors:
|
8
|
+
- Matthew Foemmel
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-10-06 00:00:00 -05:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: net-ssh
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 2.0.15
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: net-sftp
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 2.0.5
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: net-netrc
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.2.2
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: polyglot
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 0.2.9
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: treetop
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.4.2
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: highline
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.6.2
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "1.3"
|
91
|
+
type: :development
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: open4
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.0.1
|
102
|
+
type: :development
|
103
|
+
version_requirements: *id008
|
104
|
+
description: Fig is a utility for configuring environments and managing dependencies across a team of developers. You give it a list of packages and a shell command to run; it creates an environment that includes those packages, then executes the shell command in it (the caller's environment is not affected).
|
105
|
+
email: git@foemmel.com
|
106
|
+
executables:
|
107
|
+
- fig
|
108
|
+
- fig-download
|
109
|
+
extensions: []
|
110
|
+
|
111
|
+
extra_rdoc_files:
|
112
|
+
- LICENSE
|
113
|
+
- README.md
|
114
|
+
files:
|
115
|
+
- bin/fig
|
116
|
+
- bin/fig-download
|
117
|
+
- lib/fig.rb
|
118
|
+
- lib/fig/backtrace.rb
|
119
|
+
- lib/fig/environment.rb
|
120
|
+
- lib/fig/grammar.treetop
|
121
|
+
- lib/fig/options.rb
|
122
|
+
- lib/fig/os.rb
|
123
|
+
- lib/fig/package.rb
|
124
|
+
- lib/fig/parser.rb
|
125
|
+
- lib/fig/repository.rb
|
126
|
+
- lib/fig/retriever.rb
|
127
|
+
- lib/fig/windows.rb
|
128
|
+
- LICENSE
|
129
|
+
- README.md
|
130
|
+
has_rdoc: true
|
131
|
+
homepage: http://github.com/mfoemmel/fig
|
132
|
+
licenses: []
|
133
|
+
|
134
|
+
post_install_message:
|
135
|
+
rdoc_options: []
|
136
|
+
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: "0"
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: "0"
|
151
|
+
requirements: []
|
152
|
+
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 1.5.3
|
155
|
+
signing_key:
|
156
|
+
specification_version: 3
|
157
|
+
summary: Fig is a utility for configuring environments and managing dependencies across a team of developers..
|
158
|
+
test_files: []
|
159
|
+
|