aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd
diff options
context:
space:
mode:
authorMike McQuaid2016-06-01 08:46:33 +0100
committerMike McQuaid2016-06-01 08:46:33 +0100
commita9abbab9175379d990d49d06341c14579db92bb2 (patch)
treee5fc53015f52da7bb065ba838cb1b7f04c116add /Library/Homebrew/cmd
parent8486f6e04d46323e3e17a71c4c8b3ce948d35bae (diff)
downloadbrew-a9abbab9175379d990d49d06341c14579db92bb2.tar.bz2
Move HOMEBREW_CACHE to ~/Library/Caches (#292)
* cleanup: accept cache as an argument. * config: move default HOMEBREW_CACHE to ~/Library. * brew.1: document new default Homebrew cache. * update-report: migrate legacy Homebrew cache.
Diffstat (limited to 'Library/Homebrew/cmd')
-rw-r--r--Library/Homebrew/cmd/update-report.rb49
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