Commit 3eaa42770eb3ac6e4a2180de46f08cbdf1f8cfd2
- Date: Fri Jun 29 04:02:14 +0000 2007
- Committer: fbos (fbos@d6c2ea82-c31b-0410-8381-e9c44f9824c5)
- Author: fbos (fbos@d6c2ea82-c31b-0410-8381-e9c44f9824c5)
- Commit SHA1: 3eaa42770eb3ac6e4a2180de46f08cbdf1f8cfd2
- Tree SHA1: 9c6442698e419db3bda29892c07650142221e84e
Use Open3#popen3 on platforms which support it so Subversion's stderr isn't redirected to Ruby's stderr. On other platforms, use the regular Ruby pling method of running processes.
git-svn-id: svn+ssh://rubyforge.org/var/svn/piston/trunk@118 d6c2ea82-c31b-0410-8381-e9c44f9824c5
Commit diff
| |   |
| 14 | 14 | end |
| 15 | 15 | |
| 16 | 16 | def log(&block) |
| 17 | | @logger.debug &block if logger |
| 17 | @logger.debug(&block) if logger |
| 18 | 18 | end |
| 19 | 19 | |
| 20 | 20 | private |
| … | … | |
| 24 | 24 | cmd = %Q|#{executable} #{args.join(' ')}| |
| 25 | 25 | log {cmd} |
| 26 | 26 | ENV["LANGUAGE"] = "C" |
| 27 | | value = `#{cmd}` |
| 27 | value = run_real(cmd) |
| 28 | 28 | log {value} |
| 29 | 29 | value |
| 30 | 30 | end |
| 31 | |
| 32 | begin |
| 33 | raise LoadError, "Not implemented on Win32 machines" if RUBY_PLATFORM =~ /mswin32/ |
| 34 | require "open3" |
| 35 | include Open3 |
| 36 | |
| 37 | def run_real(cmd) |
| 38 | log {"==> Using popen3()"} |
| 39 | popen3(cmd) do |stdin, stdout, stderr| |
| 40 | return stdout.read |
| 41 | end |
| 42 | end |
| 43 | rescue LoadError |
| 44 | def run_real(cmd) |
| 45 | log {"==> Using Kernel::exec()"} |
| 46 | `#{cmd}` |
| 47 | end |
| 48 | end |
| 31 | 49 | end |
| 32 | 50 | end |
| toggle raw diff |
--- a/lib/piston/subversion_client.rb
+++ b/lib/piston/subversion_client.rb
@@ -14,7 +14,7 @@ module Piston
end
def log(&block)
- @logger.debug &block if logger
+ @logger.debug(&block) if logger
end
private
@@ -24,9 +24,27 @@ module Piston
cmd = %Q|#{executable} #{args.join(' ')}|
log {cmd}
ENV["LANGUAGE"] = "C"
- value = `#{cmd}`
+ value = run_real(cmd)
log {value}
value
end
+
+ begin
+ raise LoadError, "Not implemented on Win32 machines" if RUBY_PLATFORM =~ /mswin32/
+ require "open3"
+ include Open3
+
+ def run_real(cmd)
+ log {"==> Using popen3()"}
+ popen3(cmd) do |stdin, stdout, stderr|
+ return stdout.read
+ end
+ end
+ rescue LoadError
+ def run_real(cmd)
+ log {"==> Using Kernel::exec()"}
+ `#{cmd}`
+ end
+ end
end
end
|