From 823f80ad33a3d06239e473db84e4345365a23318 Mon Sep 17 00:00:00 2001 From: rymut Date: Fri, 29 Oct 2021 09:54:51 +0200 Subject: [PATCH 1/3] Fix encoding of process output under windows Output of commands under windows is not UTF-8 by default, this can lead to "invalid byte sequence in UTF-8" error on sylink check --- lib/overcommit/subprocess.rb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/overcommit/subprocess.rb b/lib/overcommit/subprocess.rb index 07e4fe04..51d7b298 100644 --- a/lib/overcommit/subprocess.rb +++ b/lib/overcommit/subprocess.rb @@ -51,7 +51,7 @@ def spawn(args, options = {}) err.rewind out.rewind - Result.new(process.exit_code, out.read, err.read) + Result.new(process.exit_code, to_utf8(out.read), to_utf8(err.read)) end # Spawns a new process in the background using the given array of @@ -83,6 +83,20 @@ def win32_prepare_args(args) %w[cmd.exe /c] + [args.join(' ')] end + # Convert string from current locale to utf-8 + # + # When running commands under windows the command output is using + # current system locale (depends on system lanuage) not UTF-8 + # + # @param process [String] + # @return [String] + def to_utf8(string) + ec = Encoding::Converter.new(Encoding.locale_charmap, "UTF-8") + # Convert encoding, alternatively simple: string.scrub will suffice + ec.convert(string) + end + + # @param process [ChildProcess] # @return [Array] def assign_output_streams(process) From 667ad05b97f944f6464c6f5f949ad889520451f1 Mon Sep 17 00:00:00 2001 From: rymut Date: Tue, 2 Nov 2021 07:34:08 +0100 Subject: [PATCH 2/3] Fix coding style --- lib/overcommit/subprocess.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/overcommit/subprocess.rb b/lib/overcommit/subprocess.rb index 51d7b298..8f4f4273 100644 --- a/lib/overcommit/subprocess.rb +++ b/lib/overcommit/subprocess.rb @@ -91,11 +91,10 @@ def win32_prepare_args(args) # @param process [String] # @return [String] def to_utf8(string) - ec = Encoding::Converter.new(Encoding.locale_charmap, "UTF-8") + ec = Encoding::Converter.new(Encoding.locale_charmap, 'UTF-8') # Convert encoding, alternatively simple: string.scrub will suffice ec.convert(string) end - # @param process [ChildProcess] # @return [Array] From 82c2028678139e73c5e602b0b7211099fbd1846d Mon Sep 17 00:00:00 2001 From: rymut Date: Wed, 3 Nov 2021 10:16:17 +0100 Subject: [PATCH 3/3] Fix invalid converter setting (UTF-8 to UTF-8) --- lib/overcommit/subprocess.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/overcommit/subprocess.rb b/lib/overcommit/subprocess.rb index 8f4f4273..3be06388 100644 --- a/lib/overcommit/subprocess.rb +++ b/lib/overcommit/subprocess.rb @@ -91,6 +91,10 @@ def win32_prepare_args(args) # @param process [String] # @return [String] def to_utf8(string) + if Encoding.locale_charmap == 'UTF-8' + return string + end + ec = Encoding::Converter.new(Encoding.locale_charmap, 'UTF-8') # Convert encoding, alternatively simple: string.scrub will suffice ec.convert(string)