summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-03-22 12:18:46 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2020-03-22 12:19:24 -0700
commitdec0f582e41c84fd24be7b0f1633bf8979ee2db7 (patch)
tree86d1e4e34bffa3d748ec90e0e474fe828871578b
parent9ebf74fd7843c34eda59f228fc34ab73f2cc458d (diff)
Workaround an encoding problem in run_without_tabs
It's to be fixed properly later. But this should be able to avoid the failure. https://travis-ci.org/github/ruby/ruby/jobs/665580361 https://rubyci.org/logs/rubyci.s3.amazonaws.com/solaris10-gcc/ruby-master/log/20200322T190003Z.fail.html.gz
-rw-r--r--tool/run_without_tabs.rb29
1 files changed, 19 insertions, 10 deletions
diff --git a/tool/run_without_tabs.rb b/tool/run_without_tabs.rb
index bf74468..54252c5 100644
--- a/tool/run_without_tabs.rb
+++ b/tool/run_without_tabs.rb
@@ -21,27 +21,36 @@ targets = Dir.glob(File.join(srcdir, 'vm*.*')) - SKIPPED_FILES.map { |f| File.jo
sources = {}
mtimes = {}
-if skip = targets.any? { |target| !File.writable?(target) }
- puts "tool/run_without_tabs.rb: srcdir has non-writable files. Skipping tab expansion."
-end
-
targets.each do |target|
- sources[target] = File.read(target)
+ unless File.writable?(target)
+ puts "tool/run_without_tabs.rb: Skipping #{target.dump} as it's not writable."
+ next
+ end
+ source = File.read(target)
+ begin
+ expanded = source.gsub(/^\t+/) { |tab| ' ' * 8 * tab.length }
+ rescue ArgumentError # invalid byte sequence in UTF-8 (Travis, RubyCI)
+ puts "tool/run_without_tabs.rb: Skipping #{target.dump} as the encoding is #{source.encoding}."
+ next
+ end
+
+ sources[target] = source
mtimes[target] = File.mtime(target)
- expanded = sources[target].force_encoding('UTF-8').gsub(/^\t+/) { |tab| ' ' * 8 * tab.length }
if sources[target] == expanded
puts "#{target.dump} has no hard tab indentation. This should be ignored in tool/run_without_tabs.rb."
end
File.write(target, expanded)
FileUtils.touch(target, mtime: mtimes[target])
-end unless skip
+end
result = system(*ARGV)
targets.each do |target|
- File.write(target, sources.fetch(target))
- FileUtils.touch(target, mtime: mtimes.fetch(target))
-end unless skip
+ if sources.key?(target)
+ File.write(target, sources[target])
+ FileUtils.touch(target, mtime: mtimes.fetch(target))
+ end
+end
exit result