forked from Homebrew/legacy-homebrew
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Also clean-up this external command in preparation for becoming a built-in command. Make which_versions available in Homebrew module so that it can be used by other commands in the future.
- Loading branch information
Showing
1 changed file
with
36 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,50 @@ | ||
require 'extend/pathname' | ||
|
||
REAL_CELLAR = HOMEBREW_CELLAR.realpath | ||
|
||
class String | ||
def starts_with? prefix | ||
prefix = prefix.to_s | ||
self[0, prefix.length] == prefix | ||
end | ||
end | ||
module Homebrew extend self | ||
def which_versions which_brews=nil | ||
brew_links = Array.new | ||
version_map = Hash.new | ||
|
||
real_cellar = HOMEBREW_CELLAR.realpath | ||
|
||
# paths=%w[bin sbin etc lib include share].collect {|d| HOMEBREW_PREFIX+d} | ||
paths=%w[bin].collect {|d| HOMEBREW_PREFIX+d} | ||
|
||
paths.each do |path| | ||
path.find do |path| | ||
next unless path.symlink? && path.resolved_path_exists? | ||
brew_links << Pathname.new(path.realpath) | ||
end | ||
end | ||
|
||
brew_links = brew_links.collect{|p|p.relative_path_from(real_cellar).to_s}.reject{|p|p.start_with?("../")} | ||
|
||
def audit | ||
brew_links = Array.new | ||
version_map = Hash.new | ||
brew_links.each do |p| | ||
parts = p.split("/") | ||
next if parts.count < 2 # Shouldn't happen for normally installed brews | ||
brew = parts.shift | ||
version = parts.shift | ||
|
||
# paths=%w[bin sbin etc lib include share].collect {|d| HOMEBREW_PREFIX+d} | ||
paths=%w[bin].collect {|d| HOMEBREW_PREFIX+d} | ||
next unless which_brews.include? brew if which_brews | ||
|
||
paths.each do |path| | ||
path.find do |path| | ||
next unless path.symlink? && path.resolved_path_exists? | ||
brew_links << Pathname.new(path.realpath) | ||
versions = version_map[brew] || [] | ||
versions << version unless versions.include? version | ||
version_map[brew] = versions | ||
end | ||
|
||
return version_map | ||
end | ||
|
||
brew_links = brew_links.collect{|p|p.relative_path_from(REAL_CELLAR).to_s}.reject{|p|p.starts_with?("../")} | ||
brew_links.each do |p| | ||
parts = p.split("/") | ||
next if parts.count < 2 # Shouldn't happen | ||
brew = parts.shift | ||
version = parts.shift | ||
def which | ||
which_brews = ARGV.named.empty? ? nil : ARGV.named | ||
|
||
versions = version_map[brew] || [] | ||
versions << version unless versions.include? version | ||
version_map[brew] = versions | ||
brews = which_versions which_brews | ||
brews.keys.sort.each do |b| | ||
puts "#{b}: #{brews[b].sort*' '}" | ||
end | ||
puts | ||
end | ||
|
||
return version_map | ||
end | ||
|
||
brews = audit | ||
brews.keys.sort.each do |b| | ||
puts "#{b}: #{brews[b].sort*' '}" | ||
end | ||
puts | ||
Homebrew.which |