Extract Keg::text_matches_in_file from bottle command
This commit is contained in:
parent
08382fab0b
commit
5f781770b4
@ -146,45 +146,8 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
text_matches = []
|
||||
|
||||
# Use strings to search through the file for each string
|
||||
Utils.popen_read("strings", "-t", "x", "-", file.to_s) do |io|
|
||||
until io.eof?
|
||||
str = io.readline.chomp
|
||||
next if ignores.any? { |i| i =~ str }
|
||||
|
||||
path_regex = Keg::Relocation.path_regex(string)
|
||||
next unless str.match? path_regex
|
||||
|
||||
offset, match = str.split(" ", 2)
|
||||
|
||||
# Some binaries contain strings with lists of files
|
||||
# e.g. `/usr/local/lib/foo:/usr/local/share/foo:/usr/lib/foo`
|
||||
# Each item in the list should be checked separately
|
||||
match.split(":").each do |sub_match|
|
||||
# Not all items in the list may be matches
|
||||
next unless sub_match.match? path_regex
|
||||
next if linked_libraries.include? sub_match # Don't bother reporting a string if it was found by otool
|
||||
|
||||
# Do not report matches to files that do not exist.
|
||||
next unless File.exist? sub_match
|
||||
|
||||
# Do not report matches to build dependencies.
|
||||
if formula_and_runtime_deps_names.present?
|
||||
begin
|
||||
keg_name = Keg.for(Pathname.new(sub_match)).name
|
||||
next unless formula_and_runtime_deps_names.include? keg_name
|
||||
rescue NotAKegError
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
result = true
|
||||
text_matches << [match, offset] unless text_matches.any? { |text| text.last == offset }
|
||||
end
|
||||
end
|
||||
end
|
||||
text_matches = Keg.text_matches_in_file(file, string, ignores, linked_libraries, formula_and_runtime_deps_names)
|
||||
result = true if text_matches.any?
|
||||
|
||||
next if !args.verbose? || text_matches.empty?
|
||||
|
||||
|
||||
@ -241,6 +241,46 @@ class Keg
|
||||
symlink_files
|
||||
end
|
||||
|
||||
def self.text_matches_in_file(file, string, ignores, linked_libraries, formula_and_runtime_deps_names)
|
||||
text_matches = []
|
||||
Utils.popen_read("strings", "-t", "x", "-", file.to_s) do |io|
|
||||
until io.eof?
|
||||
str = io.readline.chomp
|
||||
next if ignores.any? { |i| i =~ str }
|
||||
|
||||
path_regex = Relocation.path_regex(string)
|
||||
next unless str.match? path_regex
|
||||
|
||||
offset, match = str.split(" ", 2)
|
||||
|
||||
# Some binaries contain strings with lists of files
|
||||
# e.g. `/usr/local/lib/foo:/usr/local/share/foo:/usr/lib/foo`
|
||||
# Each item in the list should be checked separately
|
||||
match.split(":").each do |sub_match|
|
||||
# Not all items in the list may be matches
|
||||
next unless sub_match.match? path_regex
|
||||
next if linked_libraries.include? sub_match # Don't bother reporting a string if it was found by otool
|
||||
|
||||
# Do not report matches to files that do not exist.
|
||||
next unless File.exist? sub_match
|
||||
|
||||
# Do not report matches to build dependencies.
|
||||
if formula_and_runtime_deps_names.present?
|
||||
begin
|
||||
keg_name = Keg.for(Pathname.new(sub_match)).name
|
||||
next unless formula_and_runtime_deps_names.include? keg_name
|
||||
rescue NotAKegError
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
text_matches << [match, offset] unless text_matches.any? { |text| text.last == offset }
|
||||
end
|
||||
end
|
||||
end
|
||||
text_matches
|
||||
end
|
||||
|
||||
def self.file_linked_libraries(_file, _string)
|
||||
[]
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user