downloader.rb: unlink broken symlink before caching to fix ENOENT

On GitHub CI, the downloader's cache is shared across different jobs.
For some systems, the cached config.guess ends up being a symlink to
/usr/share/autoconf/build-aux/config.guess and containers that don't
have that file end up consuming the cache anyways, leading to ENOENT
when trying to cache the downloaded file.

This error happened on forks:
 - https://github.com/XrXr/ruby/actions/runs/5675262636/job/15380232344
 - https://github.com/peterzhu2118/ruby/actions/runs/5684765421/job/15408188728
This commit is contained in:
Alan Wu 2023-07-27 17:09:08 -04:00 committed by GitHub
parent f72f3ab15b
commit 83f9d80c0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -270,6 +270,7 @@ class Downloader
end end
dest = (cache_save && cache && !cache.exist? ? cache : file) dest = (cache_save && cache && !cache.exist? ? cache : file)
dest.parent.mkpath dest.parent.mkpath
dest.unlink if dest.symlink? && !dest.exist?
dest.open("wb", 0600) do |f| dest.open("wb", 0600) do |f|
f.write(data) f.write(data)
f.chmod(mode_for(data)) f.chmod(mode_for(data))