diff options
| author | Tsukasa OMOTO | 2014-04-24 11:26:45 +0900 | 
|---|---|---|
| committer | Jack Nagel | 2014-04-24 17:10:41 -0500 | 
| commit | 54004a4759fa660c4294c00f1b4708f514948250 (patch) | |
| tree | 4894bf19db4c8aa4e51966f5dca0b7e8a5f423f6 /Library/Homebrew/cmd/update.rb | |
| parent | fb27cbe6a71ec7bf1b555494d947cafaa03581d5 (diff) | |
| download | brew-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.rb | 69 | 
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  | 
