Skip to content

Commit edca6cb

Browse files
committed
Restore environment after launching bundled Ruby. This allows us to run Ruby sub-processes from the Runfile without interference.
1 parent 341457d commit edca6cb

File tree

4 files changed

+48
-11
lines changed

4 files changed

+48
-11
lines changed

runx.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,34 @@ def run(*args, &block)
103103
attr_accessor :tasks
104104
end
105105

106+
def restore_env
107+
map = {
108+
'LD_LIBRARY_PATH' => 'RUNX_LD_LIBRARY_PATH',
109+
'DYLD_LIBRARY_PATH' => 'RUNX_DYLD_LIBRARY_PATH',
110+
'TERMINFO' => 'RUNX_TERMINFO',
111+
'SSL_CERT_DIR' => 'RUNX_SSL_CERT_DIR',
112+
'SSL_CERT_FILE' => 'RUNX_SSL_CERT_FILE',
113+
'RUBYOPT' => 'RUNX_RUBYOPT',
114+
'RUBYLIB' => 'RUNX_RUBYLIB',
115+
'DYLD_LIBRARY_PATH' => 'RUNX_DYLD_LIBRARY_PATH',
116+
'GEM_HOME' => 'RUNX_GEM_HOME',
117+
'GEM_PATH' => 'RUNX_GEM_PATH'
118+
}
119+
120+
map.each do |real, temp|
121+
orig = ENV[temp]
122+
if orig.nil? || orig.strip.empty?
123+
ENV.delete(real)
124+
else
125+
ENV[real] = orig.strip
126+
end
127+
end
128+
129+
map.values.each do |temp|
130+
ENV.delete(temp)
131+
end
132+
end
133+
106134
def find_runfile
107135
Pathname.getwd.ascend do |path|
108136
runfile = File.join(path.to_s, 'Runfile')
@@ -114,6 +142,9 @@ def find_runfile
114142
return nil
115143
end
116144

145+
# Restore environment to match original.
146+
restore_env
147+
117148
runfile = find_runfile
118149
if runfile.nil?
119150
$stderr.puts '[runx] No Runfile found.'

setup_darwin.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ func setupRuntime(dir string) string {
1313
version := "2.1.0"
1414
arch := "x86_64-darwin13.0"
1515

16-
os.Setenv("ORIG_DYLD_LIBRARY_PATH", os.Getenv("LD_LIBRARY_PATH"))
17-
os.Setenv("ORIG_TERMINFO", os.Getenv("TERMINFO"))
18-
os.Setenv("ORIG_SSL_CERT_DIR", os.Getenv("SSL_CERT_DIR"))
19-
os.Setenv("ORIG_SSL_CERT_FILE", os.Getenv("SSL_CERT_FILE"))
20-
os.Setenv("ORIG_RUBYOPT", os.Getenv("RUBYOPT"))
21-
os.Setenv("ORIG_RUBYLIB", os.Getenv("RUBYLIB"))
16+
os.Setenv("RUNX_DYLD_LIBRARY_PATH", os.Getenv("DYLD_LIBRARY_PATH"))
17+
os.Setenv("RUNX_TERMINFO", os.Getenv("TERMINFO"))
18+
os.Setenv("RUNX_SSL_CERT_DIR", os.Getenv("SSL_CERT_DIR"))
19+
os.Setenv("RUNX_SSL_CERT_FILE", os.Getenv("SSL_CERT_FILE"))
20+
os.Setenv("RUNX_RUBYOPT", os.Getenv("RUBYOPT"))
21+
os.Setenv("RUNX_RUBYLIB", os.Getenv("RUBYLIB"))
22+
os.Setenv("RUNX_GEM_HOME", os.Getenv("GEM_HOME"))
23+
os.Setenv("RUNX_GEM_PATH", os.Getenv("GEM_PATH"))
2224
os.Unsetenv("DYLD_LIBRARY_PATH")
2325
os.Setenv("TERMINFO", "/usr/share/terminfo")
2426
os.Unsetenv("SSL_CERT_DIR")

setup_linux.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ func setupRuntime(dir string) string {
1313
version := "2.1.0"
1414
arch := "x86_64-linux"
1515

16-
os.Setenv("ORIG_LD_LIBRARY_PATH", os.Getenv("LD_LIBRARY_PATH"))
17-
os.Setenv("ORIG_SSL_CERT_DIR", os.Getenv("SSL_CERT_DIR"))
18-
os.Setenv("ORIG_SSL_CERT_FILE", os.Getenv("SSL_CERT_FILE"))
19-
os.Setenv("ORIG_RUBYOPT", os.Getenv("RUBYOPT"))
20-
os.Setenv("ORIG_RUBYLIB", os.Getenv("RUBYLIB"))
16+
os.Setenv("RUNX_LD_LIBRARY_PATH", os.Getenv("LD_LIBRARY_PATH"))
17+
os.Setenv("RUNX_SSL_CERT_DIR", os.Getenv("SSL_CERT_DIR"))
18+
os.Setenv("RUNX_SSL_CERT_FILE", os.Getenv("SSL_CERT_FILE"))
19+
os.Setenv("RUNX_RUBYOPT", os.Getenv("RUBYOPT"))
20+
os.Setenv("RUNX_RUBYLIB", os.Getenv("RUBYLIB"))
21+
os.Setenv("RUNX_GEM_HOME", os.Getenv("GEM_HOME"))
22+
os.Setenv("RUNX_GEM_PATH", os.Getenv("GEM_PATH"))
2123
os.Setenv("LD_LIBRARY_PATH", os.Getenv("LD_LIBRARY_PATH") + ":" + path.Join(root, "lib"))
2224
os.Unsetenv("SSL_CERT_DIR")
2325
os.Setenv("SSL_CERT_FILE", path.Join(root, "lib", "ca-bundle.crt"))

setup_windows.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ func setupRuntime(dir string) string {
1313
version := "2.1.0"
1414
arch := "i386-mingw32"
1515

16+
os.Setenv("RUNX_RUBYLIB", os.Getenv("RUBYLIB"))
17+
1618
rubyLib := strings.Join([]string{
1719
path.Join(root, "lib", "ruby", "site_ruby", version),
1820
path.Join(root, "lib", "ruby", "site_ruby", version, arch),

0 commit comments

Comments
 (0)