aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tool/lib/vcs.rb120
1 files changed, 27 insertions, 93 deletions
diff --git a/tool/lib/vcs.rb b/tool/lib/vcs.rb
index c4d894e107..2f9ba46e55 100644
--- a/tool/lib/vcs.rb
+++ b/tool/lib/vcs.rb
@@ -23,104 +23,38 @@ def IO.pread(*args)
popen(*args) {|f|f.read}
end
-if RUBY_VERSION < "2.0"
- class IO
- @orig_popen = method(:popen)
-
- if defined?(fork)
- def self.popen(command, *rest, &block)
- if command.kind_of?(Hash)
- env = command
- command = rest.shift
- end
- opts = rest.last
- if opts.kind_of?(Hash)
- dir = opts.delete(:chdir)
- rest.pop if opts.empty?
- opts.delete(:external_encoding)
- end
-
- if block
- @orig_popen.call("-", *rest) do |f|
- if f
- yield(f)
- else
- Dir.chdir(dir) if dir
- ENV.replace(env) if env
- exec(*command)
- end
- end
- else
- f = @orig_popen.call("-", *rest)
- unless f
- Dir.chdir(dir) if dir
- ENV.replace(env) if env
- exec(*command)
- end
- f
- end
- end
- else
- require 'shellwords'
- def self.popen(command, *rest, &block)
- if command.kind_of?(Hash)
- env = command
- oldenv = ENV.to_hash
- command = rest.shift
- end
- opts = rest.last
- if opts.kind_of?(Hash)
- dir = opts.delete(:chdir)
- rest.pop if opts.empty?
- opts.delete(:external_encoding)
- end
-
- command = command.shelljoin if Array === command
- Dir.chdir(dir || ".") do
- ENV.replace(env) if env
- @orig_popen.call(command, *rest, &block)
- ENV.replace(oldenv) if oldenv
- end
- end
- end
- end
-else
- module DebugPOpen
- verbose, $VERBOSE = $VERBOSE, nil if RUBY_VERSION < "2.1"
- refine IO.singleton_class do
- def popen(*args)
- VCS::DEBUG_OUT.puts args.inspect if $DEBUG
- super
- end
- end
- ensure
- $VERBOSE = verbose unless verbose.nil?
- end
- using DebugPOpen
- module DebugSystem
- def system(*args)
+module DebugPOpen
+ refine IO.singleton_class do
+ def popen(*args)
VCS::DEBUG_OUT.puts args.inspect if $DEBUG
- exception = false
- opts = Hash.try_convert(args[-1])
- if RUBY_VERSION >= "2.6"
- unless opts
- opts = {}
- args << opts
- end
- exception = opts.fetch(:exception) {opts[:exception] = true}
- elsif opts
- exception = opts.delete(:exception) {true}
- args.pop if opts.empty?
- end
- ret = super(*args)
- raise "Command failed with status (#$?): #{args[0]}" if exception and !ret
- ret
+ super
end
end
- module Kernel
- prepend(DebugSystem)
+end
+using DebugPOpen
+module DebugSystem
+ def system(*args)
+ VCS::DEBUG_OUT.puts args.inspect if $DEBUG
+ exception = false
+ opts = Hash.try_convert(args[-1])
+ if RUBY_VERSION >= "2.6"
+ unless opts
+ opts = {}
+ args << opts
+ end
+ exception = opts.fetch(:exception) {opts[:exception] = true}
+ elsif opts
+ exception = opts.delete(:exception) {true}
+ args.pop if opts.empty?
+ end
+ ret = super(*args)
+ raise "Command failed with status (#$?): #{args[0]}" if exception and !ret
+ ret
end
end
+module Kernel
+ prepend(DebugSystem)
+end
class VCS
prepend(DebugSystem) if defined?(DebugSystem)