bottle: don't read mtime from nonexistant files
If the source contains a broken symlink, `brew bottle` would fail for no good reason when trying to determine the most recently modified file. To avoid this, we ignore any files for which stat(2) fails. Closes Homebrew/homebrew#47111. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
parent
28776ee1c3
commit
cf2bf08ec9
@ -140,6 +140,10 @@ module Homebrew
|
||||
erb.result(bottle.instance_eval { binding }).gsub(/^\s*$\n/, "")
|
||||
end
|
||||
|
||||
def most_recent_mtime(pathname)
|
||||
pathname.to_enum(:find).select(&:exist?).map(&:mtime).max
|
||||
end
|
||||
|
||||
def bottle_formula(f)
|
||||
unless f.installed?
|
||||
return ofail "Formula not installed or up-to-date: #{f.full_name}"
|
||||
@ -187,7 +191,7 @@ module Homebrew
|
||||
skip_relocation = false
|
||||
|
||||
formula_source_time = f.stable.stage do
|
||||
Pathname.pwd.to_enum(:find).map(&:mtime).max
|
||||
most_recent_mtime(Pathname.pwd)
|
||||
end
|
||||
|
||||
keg.lock do
|
||||
|
||||
@ -0,0 +1 @@
|
||||
does-not-exist
|
||||
8
Library/Homebrew/test/test_bottle.rb
Normal file
8
Library/Homebrew/test/test_bottle.rb
Normal file
@ -0,0 +1,8 @@
|
||||
require "testing_env"
|
||||
require "cmd/bottle"
|
||||
|
||||
class BottleTests < Homebrew::TestCase
|
||||
def test_most_recent_mtime_with_broken_symlink()
|
||||
refute_nil Homebrew.most_recent_mtime(Pathname(File.join(TEST_DIRECTORY, 'resources/source-with-broken-symlink')))
|
||||
end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user