diff options
| author | Øyvind Ingebrigtsen Øvergaard | 2015-12-20 23:13:58 +0100 |
|---|---|---|
| committer | Mike McQuaid | 2015-12-21 07:54:30 +0000 |
| commit | cf2bf08ec97847069ce22745476b4b2987b035e5 (patch) | |
| tree | 615faab218e207717a11e2172249fa69354e7842 /Library | |
| parent | 28776ee1c342c4be755a597812d47d547238a08b (diff) | |
| download | brew-cf2bf08ec97847069ce22745476b4b2987b035e5.tar.bz2 | |
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>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/cmd/bottle.rb | 6 | ||||
| l--------- | Library/Homebrew/test/resources/source-with-broken-symlink/broken-link | 1 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_bottle.rb | 8 |
3 files changed, 14 insertions, 1 deletions
diff --git a/Library/Homebrew/cmd/bottle.rb b/Library/Homebrew/cmd/bottle.rb index fe2829c19..4c629cdbb 100644 --- a/Library/Homebrew/cmd/bottle.rb +++ b/Library/Homebrew/cmd/bottle.rb @@ -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 diff --git a/Library/Homebrew/test/resources/source-with-broken-symlink/broken-link b/Library/Homebrew/test/resources/source-with-broken-symlink/broken-link new file mode 120000 index 000000000..cfa0a4651 --- /dev/null +++ b/Library/Homebrew/test/resources/source-with-broken-symlink/broken-link @@ -0,0 +1 @@ +does-not-exist
\ No newline at end of file diff --git a/Library/Homebrew/test/test_bottle.rb b/Library/Homebrew/test/test_bottle.rb new file mode 100644 index 000000000..f4398cc1d --- /dev/null +++ b/Library/Homebrew/test/test_bottle.rb @@ -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 |
