aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/update.rb
diff options
context:
space:
mode:
authorTsukasa OMOTO2014-04-24 11:26:45 +0900
committerJack Nagel2014-04-24 17:10:41 -0500
commit54004a4759fa660c4294c00f1b4708f514948250 (patch)
tree4894bf19db4c8aa4e51966f5dca0b7e8a5f423f6 /Library/Homebrew/cmd/update.rb
parentfb27cbe6a71ec7bf1b555494d947cafaa03581d5 (diff)
downloadbrew-54004a4759fa660c4294c00f1b4708f514948250.tar.bz2
Make the on-disk representation of taps unambiguous
This commit supports "-" and "_" in names of user and repository. Closes Homebrew/homebrew#28203. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library/Homebrew/cmd/update.rb')
-rw-r--r--Library/Homebrew/cmd/update.rb69
1 files changed, 53 insertions, 16 deletions
diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb
index b340881df..fcbffb11f 100644
--- a/Library/Homebrew/cmd/update.rb
+++ b/Library/Homebrew/cmd/update.rb
@@ -34,19 +34,23 @@ module Homebrew extend self
end
report.merge!(master_updater.report)
- Dir["Library/Taps/*"].each do |tapd|
- next unless File.directory?(tapd)
-
- cd tapd do
- begin
- updater = Updater.new
- updater.pull!
- report.merge!(updater.report) do |key, oldval, newval|
- oldval.concat(newval)
+ # rename Taps directories
+ # this procedure will be removed in the future if it seems unnecessasry
+ rename_taps_dir_if_necessary
+
+ Dir["Library/Taps/*/"].each do |user|
+ Dir["#{user}*/"].each do |repo|
+ cd repo do
+ begin
+ updater = Updater.new
+ updater.pull!
+ report.merge!(updater.report) do |key, oldval, newval|
+ oldval.concat(newval)
+ end
+ rescue
+ repo =~ %r{^Library/Taps/([\w_-]+)/(homebrew-)?([\w_-]+)}
+ onoe "Failed to update tap: #$1/#$3"
end
- rescue
- tapd =~ %r{^Library/Taps/(\w+)-(\w+)}
- onoe "Failed to update tap: #$1/#$2"
end
end
end
@@ -92,6 +96,39 @@ module Homebrew extend self
raise
end
+ def rename_taps_dir_if_necessary
+ need_repair_taps = false
+ Dir["#{HOMEBREW_LIBRARY}/Taps/*/"].each do |tapd|
+ begin
+ tapd_basename = File.basename(tapd)
+
+ if File.directory?(tapd + "/.git")
+ if tapd_basename.include?("-")
+ # only replace the *last* dash: yes, tap filenames suck
+ user, repo = tapd_basename.reverse.sub("-", "/").reverse.split("/")
+
+ FileUtils.mkdir_p("#{HOMEBREW_LIBRARY}/Taps/#{user.downcase}")
+ FileUtils.mv(tapd, "#{HOMEBREW_LIBRARY}/Taps/#{user.downcase}/homebrew-#{repo.downcase}")
+ need_repair_taps = true
+
+ if tapd_basename.count("-") >= 2
+ opoo "Homebrew changed the structure of Taps like <someuser>/<sometap>. "\
+ + "So you may need to rename #{HOMEBREW_LIBRARY}/Taps/#{user.downcase}/homebrew-#{repo.downcase} manually."
+ end
+ else
+ opoo "Homebrew changed the structure of Taps like <someuser>/<sometap>. "\
+ "#{tapd} is incorrect name format. You may need to rename it like <someuser>/<sometap> manually."
+ end
+ end
+ rescue => ex
+ onoe ex.message
+ next # next tap directory
+ end
+ end
+
+ repair_taps if need_repair_taps
+ end
+
def load_tap_migrations
require 'tap_migrations'
rescue LoadError
@@ -184,7 +221,7 @@ class Report < Hash
def tapped_formula_for key
fetch(key, []).map do |path|
- case path when %r{^Library/Taps/(\w+-\w+/.*)}
+ case path when %r{^Library/Taps/([\w_-]+/[\w_-]+/.*)}
relative_path = $1
if valid_formula_location?(relative_path)
Pathname.new(relative_path)
@@ -195,7 +232,7 @@ class Report < Hash
def valid_formula_location?(relative_path)
ruby_file = /\A.*\.rb\Z/
- parts = relative_path.split('/')[1..-1]
+ parts = relative_path.split('/')[2..-1]
[
parts.length == 1 && parts.first =~ ruby_file,
parts.length == 2 && parts.first == 'Formula' && parts.last =~ ruby_file,
@@ -215,8 +252,8 @@ class Report < Hash
fetch(key, []).map do |path|
case path when %r{^Library/Formula}
File.basename(path, ".rb")
- when %r{^Library/Taps/(\w+)-(\w+)/(.*)\.rb}
- "#$1/#$2/#{File.basename(path, '.rb')}"
+ when %r{^Library/Taps/([\w_-]+)/(homebrew-)?([\w_-]+)/(.*)\.rb}
+ "#$1/#$3/#{File.basename(path, '.rb')}"
end
end.compact.sort
end