Improve text_executable heuristic
Previously we detected this by reading the first line of the file. However, "first line" is meaningless when dealing with binary files, but IO#readline will happily keep reading until it finds a newline character, which can result in some unnecessarily large buffers. Aside from the performance issue, this causes an additional problem under Ruby 1.9: trying to match the binary string against a pattern will raise ArgumentError (unless the binary string just happens to also be valid UTF-8, heh). Fix both issues: only read the first 1024 bytes, as no sane shebang will ever be that long, and use a plain read(), which returns an ASCII encoded string even on 1.9. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
parent
1b2e19d425
commit
dd4302ae9b
@ -199,9 +199,7 @@ class Pathname
|
||||
end
|
||||
|
||||
def text_executable?
|
||||
%r[^#!\s*.+] === open('r') { |f| f.readline }
|
||||
rescue EOFError
|
||||
false
|
||||
%r[^#!\s*\S+] === open('r') { |f| f.read(1024) }
|
||||
end
|
||||
|
||||
def incremental_hash(hasher)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user