brew/Library/Homebrew/utils/shebang.rb
Carlo Cabrera 2b60a99d4a
Revert "shebang: raise error if no rewriting"
This is causing failures when attempting to rewrite shebangs during the
cleanup stage of `brew install`.

See, for example, Homebrew/homebrew-core#94323,
Homebrew/homebrew-core#94321.

This reverts commit 7e6be5eb4474ed9eaa4b8e9a5a45e3340186840c.
2022-02-02 20:44:03 +08:00

47 lines
1.2 KiB
Ruby

# typed: true
# frozen_string_literal: true
module Utils
# Helper functions for manipulating shebang lines.
#
# @api private
module Shebang
extend T::Sig
module_function
# Specification on how to rewrite a given shebang.
#
# @api private
class RewriteInfo
extend T::Sig
attr_reader :regex, :max_length, :replacement
sig { params(regex: Regexp, max_length: Integer, replacement: T.any(String, Pathname)).void }
def initialize(regex, max_length, replacement)
@regex = regex
@max_length = max_length
@replacement = replacement
end
end
# Rewrite shebang for the given `paths` using the given `rewrite_info`.
#
# @example
# rewrite_shebang detected_python_shebang, bin/"script.py"
#
# @api public
sig { params(rewrite_info: RewriteInfo, paths: T::Array[T.any(String, Pathname)]).void }
def rewrite_shebang(rewrite_info, *paths)
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}"
end
end
end
end