Make usage of ObserverPathnameExtension more obvious

Remove use of globals.

Closes Homebrew/homebrew#21795.
This commit is contained in:
Jack Nagel 2013-08-09 21:09:48 -05:00
parent 23fbe23426
commit 966e82663f
3 changed files with 30 additions and 22 deletions

View File

@ -2,12 +2,9 @@ require 'keg'
require 'cmd/tap'
module Homebrew extend self
# $n and $d are used by the ObserverPathnameExtension to keep track of
# certain filesystem actions.
def prune
$n = 0
$d = 0
ObserverPathnameExtension.reset_counts!
dirs = []
Keg::PRUNEABLE_DIRECTORIES.select(&:directory?).each do |dir|
@ -41,11 +38,13 @@ module Homebrew extend self
repair_taps unless ARGV.dry_run?
if $n == 0 && $d == 0
n, d = ObserverPathnameExtension.counts
if ObserverPathnameExtension.total.zero?
puts "Nothing pruned" if ARGV.verbose?
else
print "Pruned #{$n} symbolic links "
print "and #{$d} directories " if $d > 0
print "Pruned #{n} symbolic links "
print "and #{d} directories " if d > 0
puts "from #{HOMEBREW_PREFIX}"
end unless ARGV.dry_run?
end

View File

@ -433,21 +433,36 @@ class Pathname
end
end
# sets $n and $d so you can observe creation of stuff
module ObserverPathnameExtension
class << self
attr_accessor :n, :d
def reset_counts!
@n = @d = 0
end
def total
n + d
end
def counts
[n, d]
end
end
def unlink
super
puts "rm #{to_s}" if ARGV.verbose?
$n+=1
ObserverPathnameExtension.n += 1
end
def rmdir
super
puts "rmdir #{to_s}" if ARGV.verbose?
$d+=1
ObserverPathnameExtension.d += 1
end
def make_relative_symlink src
super
$n+=1
ObserverPathnameExtension.n += 1
end
def install_info
super
@ -458,6 +473,3 @@ module ObserverPathnameExtension
puts "uninfo #{to_s}" if ARGV.verbose?
end
end
$n=0
$d=0

View File

@ -33,9 +33,7 @@ class Keg < Pathname
end
def unlink
# these are used by the ObserverPathnameExtension to count the number
# of files and directories linked
$n=$d=0
ObserverPathnameExtension.reset_counts!
dirs = []
@ -62,7 +60,7 @@ class Keg < Pathname
dirs.reverse_each(&:rmdir_if_possible)
$n+$d
ObserverPathnameExtension.total
end
def fname
@ -108,8 +106,7 @@ class Keg < Pathname
def link mode=OpenStruct.new
raise "Cannot link #{fname}\nAnother version is already linked: #{linked_keg_record.realpath}" if linked_keg_record.directory?
$n=0
$d=0
ObserverPathnameExtension.reset_counts!
share_mkpaths = %w[aclocal doc info locale man]
share_mkpaths.concat((1..8).map { |i| "man/man#{i}" })
@ -175,7 +172,7 @@ class Keg < Pathname
optlink
end
return $n + $d
ObserverPathnameExtension.total
rescue Exception
opoo "Could not link #{fname}. Unlinking..."
unlink