fig 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +15 -3
- data/bin/fig +3 -1
- data/lib/fig/grammar.treetop +1 -1
- data/lib/fig/options.rb +1 -0
- data/lib/fig/os.rb +9 -2
- data/lib/fig/package.rb +4 -3
- data/lib/fig/repository.rb +26 -3
- data/spec/fig_spec.rb +20 -4
- metadata +2 -2
data/README.md
CHANGED
@@ -71,7 +71,7 @@ Fig lets you modify environment variables three ways:
|
|
71
71
|
|
72
72
|
### Command Line ###
|
73
73
|
|
74
|
-
So to get started, let's trying defining an environment variable via the command line and executing a command in the newly created environment. We'll set the "
|
74
|
+
So to get started, let's trying defining an environment variable via the command line and executing a command in the newly created environment. We'll set the "GREETING" variable to "Hello", then run "echo $GREETING, World" to ensure that the variable was updated:
|
75
75
|
|
76
76
|
$ fig -s GREETING=Hello -- echo "\$GREETING, World"
|
77
77
|
Hello, World
|
@@ -126,9 +126,21 @@ Configurations other than "default" can be specified using the "-c" option:
|
|
126
126
|
|
127
127
|
Now let's say we want to share our little script with the rest of the team by bundling it into a package. The first thing you'll need to do is specify the location of your remote repository by defining the FIG_REMOTE_URL environment variable. If you just want to play around with fig, you can have it point to localhost:
|
128
128
|
|
129
|
-
$ export FIG_REMOTE_URL=ssh://localhost
|
129
|
+
$ export FIG_REMOTE_URL=ssh://localhost`pwd`/remote
|
130
130
|
|
131
|
-
|
131
|
+
Before we publish our package, we'll need to tell fig which files we want to include. We do this by using the "resource" statement in our ".fig" file:
|
132
|
+
|
133
|
+
resource bin/hello
|
134
|
+
|
135
|
+
config default...
|
136
|
+
|
137
|
+
Now we can share the package with the rest of the team by using the "--publish" option:
|
138
|
+
|
139
|
+
$ fig --publish hello/1.0.0
|
140
|
+
|
141
|
+
The "hello/1.0.0" string represents the name of the package and the version number. Once the package has been published, we can include it in other environments by using the "-i" option (we'll use the "--no-file" option here, to tell fig not to parse the ".fig" file in the current directory):
|
142
|
+
|
143
|
+
$ fig --no-file -i hello/1.0.0 -- hello
|
132
144
|
|
133
145
|
Community
|
134
146
|
=========
|
data/bin/fig
CHANGED
@@ -73,7 +73,9 @@ end
|
|
73
73
|
DEFAULT_FIG_FILE = '.fig'
|
74
74
|
|
75
75
|
input = nil
|
76
|
-
if options[:input] ==
|
76
|
+
if options[:input] == :none
|
77
|
+
# ignore
|
78
|
+
elsif options[:input] == '-'
|
77
79
|
input = $stdin.read
|
78
80
|
elsif options[:input].nil?
|
79
81
|
input = os.read(DEFAULT_FIG_FILE) if os.exist?(DEFAULT_FIG_FILE)
|
data/lib/fig/grammar.treetop
CHANGED
data/lib/fig/options.rb
CHANGED
@@ -41,6 +41,7 @@ module Fig
|
|
41
41
|
|
42
42
|
options[:input] = nil
|
43
43
|
opts.on('--input FILE', 'fig file to read (use - for stdin)') { |path| options[:input] = path }
|
44
|
+
opts.on('--no-file', 'fig file to read (use - for stdin)') { |path| options[:input] = :none }
|
44
45
|
|
45
46
|
options[:home] = ENV['FIG_HOME'] || File.expand_path("~/.fighome")
|
46
47
|
end
|
data/lib/fig/os.rb
CHANGED
@@ -48,8 +48,15 @@ module Fig
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
when "ssh"
|
51
|
-
|
52
|
-
|
51
|
+
# TODO need better way to do conditional download
|
52
|
+
timestamp = `ssh #{uri.user + '@' if uri.user}#{uri.host} "ruby -e 'puts File.mtime(\\"#{uri.path}\\").to_i'"`.to_i
|
53
|
+
if File.exist?(path) && File.mtime(path).to_i > timestamp
|
54
|
+
return false
|
55
|
+
else
|
56
|
+
$stderr.puts "downloading #{url}"
|
57
|
+
fail unless system "ssh #{uri.user + '@' if uri.user}#{uri.host} cat #{uri.path} > #{path}"
|
58
|
+
return true
|
59
|
+
end
|
53
60
|
else
|
54
61
|
raise "Unknown protocol: #{url}"
|
55
62
|
end
|
data/lib/fig/package.rb
CHANGED
@@ -30,9 +30,10 @@ module Fig
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def publish_statements
|
33
|
-
statements = []
|
34
|
-
@statements.each{ |s| statements += s.statements if s.is_a?(Publish) }
|
35
33
|
statements
|
34
|
+
# statements = []
|
35
|
+
# @statements.each{ |s| statements += s.statements if s.is_a?(Publish) }
|
36
|
+
# statements
|
36
37
|
end
|
37
38
|
|
38
39
|
def unparse
|
@@ -64,7 +65,7 @@ module Fig
|
|
64
65
|
end
|
65
66
|
|
66
67
|
def unparse(indent)
|
67
|
-
"#{indent}resource
|
68
|
+
"#{indent}resource #{url}"
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
data/lib/fig/repository.rb
CHANGED
@@ -24,10 +24,15 @@ module Fig
|
|
24
24
|
temp_dir = temp_dir_for_package(package_name, version_name)
|
25
25
|
@os.clear_directory(temp_dir)
|
26
26
|
fig_file = File.join(temp_dir, ".fig")
|
27
|
-
content = package_statements.map do |statement|
|
27
|
+
content = bundle_resources(package_statements).map do |statement|
|
28
28
|
if statement.is_a?(Archive) || statement.is_a?(Resource)
|
29
|
-
|
30
|
-
|
29
|
+
if statement.is_a?(Resource) && !is_url?(statement.url)
|
30
|
+
archive_name = statement.url
|
31
|
+
archive_remote = "#{remote_dir_for_package(package_name, version_name)}/#{statement.url}"
|
32
|
+
else
|
33
|
+
archive_name = statement.url.split("/").last
|
34
|
+
archive_remote = "#{remote_dir_for_package(package_name, version_name)}/#{archive_name}"
|
35
|
+
end
|
31
36
|
if is_url?(statement.url)
|
32
37
|
archive_local = File.join(temp_dir, archive_name)
|
33
38
|
@os.download(statement.url, archive_local)
|
@@ -45,6 +50,24 @@ module Fig
|
|
45
50
|
update_package(package_name, version_name)
|
46
51
|
end
|
47
52
|
|
53
|
+
def bundle_resources(package_statements)
|
54
|
+
resources = []
|
55
|
+
new_package_statements = package_statements.reject do |statement|
|
56
|
+
if statement.is_a?(Resource) && !is_url?(statement.url)
|
57
|
+
resources << statement.url
|
58
|
+
true
|
59
|
+
else
|
60
|
+
false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
if resources.size > 0
|
64
|
+
file = "resources.tar.gz"
|
65
|
+
file unless system "tar -zcf #{file} #{resources.join(' ')}"
|
66
|
+
new_package_statements.unshift(Archive.new(file))
|
67
|
+
end
|
68
|
+
new_package_statements
|
69
|
+
end
|
70
|
+
|
48
71
|
def load_package(package_name, version_name)
|
49
72
|
update_package(package_name, version_name) if @remote_repository_url
|
50
73
|
read_local_package(package_name, version_name)
|
data/spec/fig_spec.rb
CHANGED
@@ -57,14 +57,30 @@ describe "Fig" do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "publish to remote repository" do
|
60
|
+
FileUtils.rm_rf(FIG_HOME)
|
61
|
+
FileUtils.rm_rf(FIG_REMOTE_DIR)
|
60
62
|
input = <<-END
|
61
|
-
|
62
|
-
|
63
|
-
set FOO=BAR
|
64
|
-
end
|
63
|
+
config default
|
64
|
+
set FOO=BAR
|
65
65
|
end
|
66
66
|
END
|
67
67
|
puts fig('--publish foo/1.2.3', input)
|
68
68
|
fig('-i foo/1.2.3 -g FOO').should == ['BAR','']
|
69
69
|
end
|
70
|
+
|
71
|
+
it "publish resource to remote repository" do
|
72
|
+
FileUtils.rm_rf(FIG_HOME)
|
73
|
+
FileUtils.rm_rf(FIG_REMOTE_DIR)
|
74
|
+
FileUtils.mkdir_p("bin")
|
75
|
+
File.open("bin/hello", "w") { |f| f << "echo bar" }
|
76
|
+
fail unless system "chmod +x bin/hello"
|
77
|
+
input = <<-END
|
78
|
+
resource bin/hello
|
79
|
+
config default
|
80
|
+
append PATH=@/bin
|
81
|
+
end
|
82
|
+
END
|
83
|
+
puts fig('--publish foo/1.2.3', input)
|
84
|
+
fig('-u -i foo/1.2.3 -- hello')[0].should == 'bar'
|
85
|
+
end
|
70
86
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Foemmel
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-02 00:00:00 -06:00
|
13
13
|
default_executable: fig
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|