shebang: raise error if no rewriting
This commit is contained in:
parent
397afb6204
commit
7e6be5eb44
30
Library/Homebrew/test/utils/shebang_spec.rb
Normal file
30
Library/Homebrew/test/utils/shebang_spec.rb
Normal 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
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user