diff options
Diffstat (limited to 'Library/Homebrew/cmd')
| -rw-r--r-- | Library/Homebrew/cmd/update-report.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 9339a63d9..e11cd647b 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -2,6 +2,7 @@ require "formula_versions" require "migrator" require "formulary" require "descriptions" +require "cleanup" module Homebrew def update_preinstall_header @@ -69,6 +70,8 @@ module Homebrew updated = true end + migrate_legacy_cache_if_necessary + if !updated if !ARGV.include?("--preinstall") && !ENV["HOMEBREW_UPDATE_FAILED"] puts "Already up-to-date." @@ -101,6 +104,52 @@ module Homebrew ENV["HOMEBREW_UPDATE_BEFORE_HOMEBREW_HOMEBREW_CORE"] = revision ENV["HOMEBREW_UPDATE_AFTER_HOMEBREW_HOMEBREW_CORE"] = revision end + + def migrate_legacy_cache_if_necessary + legacy_cache = Pathname.new "/Library/Caches/Homebrew" + return if HOMEBREW_CACHE.to_s == legacy_cache.to_s + return unless legacy_cache.directory? + return unless legacy_cache.readable_real? + + migration_attempted_file = legacy_cache/".migration_attempted" + return if migration_attempted_file.exist? + + return unless legacy_cache.writable_real? + FileUtils.touch migration_attempted_file + + # Cleanup to avoid copying files unnecessarily + ohai "Cleaning up #{legacy_cache}..." + Cleanup.cleanup_cache legacy_cache + + # This directory could have been compromised if it's world-writable/ + # a symlink/owned by another user so don't copy files in those cases. + return if legacy_cache.world_writable? + return if legacy_cache.symlink? + return if !legacy_cache.owned? && legacy_cache.lstat.uid != 0 + + ohai "Migrating #{legacy_cache} to #{HOMEBREW_CACHE}..." + HOMEBREW_CACHE.mkpath + legacy_cache.cd do + legacy_cache.entries.each do |f| + next if [".", "..", ".migration_attempted"].include? "#{f}" + begin + FileUtils.cp_r f, HOMEBREW_CACHE + rescue + @migration_failed ||= true + end + end + end + + if @migration_failed + opoo <<-EOS.undent + Failed to migrate #{legacy_cache} to + #{HOMEBREW_CACHE}. Please do so manually. + EOS + else + ohai "Deleting #{legacy_cache}..." + FileUtils.rm_rf legacy_cache + end + end end class Reporter |
