isolate 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ === 1.6.0 / 2009-10-03
2
+
3
+ * Add Rake helpers.
4
+ * Expose the bin path to subshells.
5
+
1
6
  === 1.5.1 / 2009-10-02
2
7
 
3
8
  * Fix passthrough for explicitly false conditions.
@@ -5,6 +5,7 @@ README.rdoc
5
5
  Rakefile
6
6
  lib/hoe/isolate.rb
7
7
  lib/isolate.rb
8
+ lib/isolate/rake.rb
8
9
  test/fixtures/with-hoe/specifications/hoe-2.3.3.gemspec
9
10
  test/fixtures/with-hoe/specifications/rake-0.8.7.gemspec
10
11
  test/fixtures/with-hoe/specifications/rubyforge-1.0.4.gemspec
@@ -118,6 +118,33 @@ and <tt>:verbose</tt> options to control things:
118
118
  ...
119
119
  end
120
120
 
121
+ === Interaction and Rake
122
+
123
+ You don't strictly need them, but Isolate provides a set of Rake tasks
124
+ that make a few common thing easier. To use them, just drop a
125
+ <tt>require</tt> in your <tt>Rakefile</tt>:
126
+
127
+ require "isolate/rake"
128
+
129
+ ==== Running Shell Commands
130
+
131
+ When you're in an isolated subshell, the command-line tools provided
132
+ by any of your gems are available on your PATH.
133
+
134
+ # run a single command in an isolated subshell
135
+ $ rake isolate:sh['gem list']
136
+
137
+ # run a new isolated subshell
138
+ $ rake isolate:sh
139
+
140
+ ==== Exporting
141
+
142
+ Isolate can generate a <tt>.gems</tt> manifest file in the root
143
+ directory of your project. <tt>.gems</tt> is used (among other things)
144
+ to specify project dependencies on Heroku.
145
+
146
+ $ rake isolate:dotgems
147
+
121
148
  === A Rails Example
122
149
 
123
150
  Here's a quick example (extracted from a real project) of how to use
@@ -21,7 +21,7 @@ class Isolate
21
21
  end
22
22
  end
23
23
 
24
- VERSION = "1.5.1" # :nodoc:
24
+ VERSION = "1.6.0" # :nodoc:
25
25
 
26
26
  attr_reader :entries # :nodoc:
27
27
 
@@ -72,7 +72,7 @@ class Isolate
72
72
  @entries = []
73
73
  @environments = []
74
74
  @passthrough = false
75
- @path = path
75
+ @path = File.expand_path path
76
76
 
77
77
  @install = options.fetch :install, true
78
78
  @verbose = options.fetch :verbose, true
@@ -131,6 +131,7 @@ class Isolate
131
131
 
132
132
  ENV["GEM_PATH"] = @old_gem_path
133
133
  ENV["GEM_HOME"] = @old_gem_home
134
+ ENV["PATH"] = @old_path
134
135
  ENV["RUBYOPT"] = @old_ruby_opt
135
136
 
136
137
  $LOAD_PATH.replace @old_load_path
@@ -146,6 +147,7 @@ class Isolate
146
147
 
147
148
  @old_gem_path = ENV["GEM_PATH"]
148
149
  @old_gem_home = ENV["GEM_HOME"]
150
+ @old_path = ENV["PATH"]
149
151
  @old_ruby_opt = ENV["RUBYOPT"]
150
152
  @old_load_path = $LOAD_PATH.dup
151
153
 
@@ -158,6 +160,9 @@ class Isolate
158
160
  ENV["RUBYOPT"] = "#{ENV['RUBYOPT']} -I#{File.dirname(__FILE__)}"
159
161
  ENV["GEM_PATH"] = ENV["GEM_HOME"] = path
160
162
 
163
+ bin = File.join path, "bin"
164
+ ENV["PATH"]= [bin, ENV["PATH"]].join File::PATH_SEPARATOR
165
+
161
166
  self.class.refresh
162
167
 
163
168
  @enabled = true
@@ -0,0 +1,25 @@
1
+ namespace :isolate do
2
+ desc "Generate a .gems manifest for your isolated gems."
3
+ task :dotgems do
4
+ File.open ".gems", "wb" do |f|
5
+ Isolate.instance.entries.each do |entry|
6
+ next unless entry.environments.empty?
7
+
8
+ gems = [entry.name]
9
+ gems << "--version '#{entry.requirement}'"
10
+ gems << "--source #{entry.options[:source]}" if entry.options[:source]
11
+
12
+ f.puts gems.join " "
13
+ end
14
+
15
+ # this above all: to thine own self be true
16
+ f.puts "isolate --version '#{Isolate::VERSION}'"
17
+ end
18
+ end
19
+
20
+ desc "Start an isolated subshell. Run 'command' and exit if specified."
21
+ task :sh, [:command] do |t, args|
22
+ exec ENV["SHELL"] unless args.command
23
+ sh args.command
24
+ end
25
+ end
@@ -26,7 +26,7 @@ class TestIsolate < MiniTest::Unit::TestCase
26
26
  end
27
27
 
28
28
  refute_nil Isolate.instance
29
- assert_equal WITH_HOE, Isolate.instance.path
29
+ assert_equal File.expand_path(WITH_HOE), Isolate.instance.path
30
30
  assert_equal "hoe", Isolate.instance.entries.first.name
31
31
  end
32
32
 
@@ -109,19 +109,22 @@ class TestIsolate < MiniTest::Unit::TestCase
109
109
  end
110
110
 
111
111
  def test_disable
112
- home, path = ENV.values_at "GEM_HOME", "GEM_PATH"
112
+ home, path, bin = ENV.values_at "GEM_HOME", "GEM_PATH", "PATH"
113
113
  load_path = $LOAD_PATH.dup
114
114
 
115
115
  @isolate.enable
116
116
 
117
117
  refute_equal home, ENV["GEM_HOME"]
118
118
  refute_equal path, ENV["GEM_PATH"]
119
+ refute_equal bin, ENV["PATH"]
120
+
119
121
  refute_equal load_path, $LOAD_PATH
120
122
 
121
123
  @isolate.disable
122
124
 
123
125
  assert_equal home, ENV["GEM_HOME"]
124
126
  assert_equal path, ENV["GEM_PATH"]
127
+ assert_equal bin, ENV["PATH"]
125
128
  assert_equal load_path, $LOAD_PATH
126
129
  end
127
130
 
@@ -137,6 +140,7 @@ class TestIsolate < MiniTest::Unit::TestCase
137
140
 
138
141
  assert_equal @isolate.path, ENV["GEM_PATH"]
139
142
  assert_equal @isolate.path, ENV["GEM_HOME"]
143
+ assert ENV["PATH"].include?(File.join(@isolate.path, "bin")), "in path"
140
144
 
141
145
  assert_equal [], Gem.find_files("minitest/unit.rb"),
142
146
  "Can't find minitest/unit now, 'cause we're activated!"
@@ -187,7 +191,7 @@ class TestIsolate < MiniTest::Unit::TestCase
187
191
 
188
192
  def test_initialize
189
193
  i = Isolate.new "foo/gems"
190
- assert_equal "foo/gems", i.path
194
+ assert_equal File.expand_path("foo/gems"), i.path
191
195
  end
192
196
 
193
197
  def test_initialize_options
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isolate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Barnette
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-10-02 00:00:00 -07:00
13
+ date: 2009-10-03 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -74,6 +74,7 @@ files:
74
74
  - Rakefile
75
75
  - lib/hoe/isolate.rb
76
76
  - lib/isolate.rb
77
+ - lib/isolate/rake.rb
77
78
  - test/fixtures/with-hoe/specifications/hoe-2.3.3.gemspec
78
79
  - test/fixtures/with-hoe/specifications/rake-0.8.7.gemspec
79
80
  - test/fixtures/with-hoe/specifications/rubyforge-1.0.4.gemspec