From 7e6be5eb4474ed9eaa4b8e9a5a45e3340186840c Mon Sep 17 00:00:00 2001 From: Branch Vincent Date: Tue, 1 Feb 2022 00:05:23 -0500 Subject: [PATCH] shebang: raise error if no rewriting --- Library/Homebrew/test/utils/shebang_spec.rb | 30 +++++++++++++++++++++ Library/Homebrew/utils/shebang.rb | 4 +++ 2 files changed, 34 insertions(+) create mode 100644 Library/Homebrew/test/utils/shebang_spec.rb diff --git a/Library/Homebrew/test/utils/shebang_spec.rb b/Library/Homebrew/test/utils/shebang_spec.rb new file mode 100644 index 0000000000..9c39e97d61 --- /dev/null +++ b/Library/Homebrew/test/utils/shebang_spec.rb @@ -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 diff --git a/Library/Homebrew/utils/shebang.rb b/Library/Homebrew/utils/shebang.rb index edf36e0f0c..1e848ac04f 100644 --- a/Library/Homebrew/utils/shebang.rb +++ b/Library/Homebrew/utils/shebang.rb @@ -34,13 +34,17 @@ module Utils # @api public sig { params(rewrite_info: RewriteInfo, paths: T::Array[T.any(String, Pathname)]).void } def rewrite_shebang(rewrite_info, *paths) + found = T.let(false, T::Boolean) paths.each do |f| f = Pathname(f) next unless f.file? next unless rewrite_info.regex.match?(f.read(rewrite_info.max_length)) Utils::Inreplace.inreplace f.to_s, rewrite_info.regex, "#!#{rewrite_info.replacement}" + found = true end + + raise "No matching files found to rewrite shebang" unless found end end end