Merge pull request #12820 from branchvincent/shebang

shebang: raise error if no rewriting
This commit is contained in:
Mike McQuaid 2022-02-01 08:37:34 +00:00 committed by GitHub
commit 955292d666
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 0 deletions

View File

@ -0,0 +1,30 @@
# typed: false
# frozen_string_literal: true
require "utils/shebang"
describe Utils::Shebang do
let(:file) { Tempfile.new("shebang") }
before do
file.write "#!/usr/bin/python"
file.flush
end
after { file.unlink }
describe "rewrite_shebang" do
it "rewrites a shebang" do
rewrite_info = Utils::Shebang::RewriteInfo.new(/^#!.*python$/, 25, "new_shebang")
described_class.rewrite_shebang rewrite_info, file
expect(File.read(file)).to eq "#!new_shebang"
end
it "raises an error if no rewriting occurs" do
rewrite_info = Utils::Shebang::RewriteInfo.new(/^#!.*perl$/, 25, "new_shebang")
expect {
described_class.rewrite_shebang rewrite_info, file
}.to raise_error("No matching files found to rewrite shebang")
end
end
end

View File

@ -34,13 +34,17 @@ module Utils
# @api public # @api public
sig { params(rewrite_info: RewriteInfo, paths: T::Array[T.any(String, Pathname)]).void } sig { params(rewrite_info: RewriteInfo, paths: T::Array[T.any(String, Pathname)]).void }
def rewrite_shebang(rewrite_info, *paths) def rewrite_shebang(rewrite_info, *paths)
found = T.let(false, T::Boolean)
paths.each do |f| paths.each do |f|
f = Pathname(f) f = Pathname(f)
next unless f.file? next unless f.file?
next unless rewrite_info.regex.match?(f.read(rewrite_info.max_length)) next unless rewrite_info.regex.match?(f.read(rewrite_info.max_length))
Utils::Inreplace.inreplace f.to_s, rewrite_info.regex, "#!#{rewrite_info.replacement}" Utils::Inreplace.inreplace f.to_s, rewrite_info.regex, "#!#{rewrite_info.replacement}"
found = true
end end
raise "No matching files found to rewrite shebang" unless found
end end
end end
end end