From 6ea621fc2fb33122913691c9534277ba812f3dba Mon Sep 17 00:00:00 2001 From: Levi Bard Date: Mon, 11 Apr 2016 15:36:48 +0200 Subject: [PATCH] Restrict mercurial-ruby command override to windows, workaround ruby 1.8 api difference --- lib/core_ext/mercurial-ruby/command.rb | 45 +++++++++++++++----------- lib/lolcommits.rb | 4 ++- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/lib/core_ext/mercurial-ruby/command.rb b/lib/core_ext/mercurial-ruby/command.rb index beed1c8f..7c916ea0 100644 --- a/lib/core_ext/mercurial-ruby/command.rb +++ b/lib/core_ext/mercurial-ruby/command.rb @@ -1,28 +1,35 @@ # need to use popen3 on windows - popen4 always eventually calls fork -module Mercurial - class Command - private +if Lolcommits::Platform.platform_windows? - def execution_proc - proc do - debug(command) - result = '' - error = '' - status = nil - Open3.popen3(command) do |_stdin, stdout, stderr, wait_thread| - Timeout.timeout(timeout) do - while (tmp = stdout.read(102_400)) - result += tmp + module Mercurial + class Command + private + + def execution_proc + proc do + debug(command) + result = '' + error = '' + status = nil + Open3.popen3(command) do |_stdin, stdout, stderr, wait_thread| + Timeout.timeout(timeout) do + while (tmp = stdout.read(102_400)) + result += tmp + end end - end - while (tmp = stderr.read(1024)) - error += tmp + while (tmp = stderr.read(1024)) + error += tmp + end + status = if RUBY_VERSION =~ /^1\.8/ + error.empty? ? 0 : 1 + else + wait_thread.value + end end - status = wait_thread.value + raise_error_if_needed(status, error) + result end - raise_error_if_needed(status, error) - result end end end diff --git a/lib/lolcommits.rb b/lib/lolcommits.rb index eff55a50..43212068 100644 --- a/lib/lolcommits.rb +++ b/lib/lolcommits.rb @@ -11,7 +11,6 @@ require 'methadone' require 'date' require 'mercurial-ruby' -require 'core_ext/mercurial-ruby/command' require 'core_ext/mercurial-ruby/shell' require 'lolcommits/version' @@ -22,6 +21,9 @@ require 'lolcommits/plugin' require 'lolcommits/platform' +# after lolcommits/platform, so that we can do platform-conditional override +require 'core_ext/mercurial-ruby/command' + # backends require 'lolcommits/backends/installation_git' require 'lolcommits/backends/installation_mercurial'