mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Remove Ruby <2.2 support from tool/lib/vcs.rb
BASERUBY now requires at least Ruby 2.2, so there is no point trying to support older ruby versions here.
This commit is contained in:
		
							parent
							
								
									9a3371be8f
								
							
						
					
					
						commit
						07b2102a88
					
				
				
				Notes:
				
					git
				
				2020-05-28 23:57:53 +09:00 
				
			
			
			
		
		
					 1 changed files with 27 additions and 93 deletions
				
			
		
							
								
								
									
										120
									
								
								tool/lib/vcs.rb
									
										
									
									
									
								
							
							
						
						
									
										120
									
								
								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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue