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)