aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXu Cheng2015-08-15 18:12:27 +0800
committerXu Cheng2015-08-17 01:54:03 +0800
commitc4df86eb9d98bc92fe836854a2cef45e05c1d571 (patch)
tree5df75c6b4937bcb3255c4693d5cabfd65ac0c80b
parentdc4feaf56b5ba36c579277ea8fbc2f983f2bcdf0 (diff)
downloadbrew-c4df86eb9d98bc92fe836854a2cef45e05c1d571.tar.bz2
cleanup: speed up rm_DS_Store by multithread
Before ``` $ time brew cleanup -s brew cleanup -s 0.73s user 3.52s system 58% cpu 7.297 total ``` After ``` $ time brew cleanup -s brew cleanup -s 0.69s user 2.57s system 139% cpu 2.341 total ``` Closes Homebrew/homebrew#42968. Signed-off-by: Xu Cheng <xucheng@me.com>
-rw-r--r--Library/Homebrew/cmd/cleanup.rb18
1 files changed, 14 insertions, 4 deletions
diff --git a/Library/Homebrew/cmd/cleanup.rb b/Library/Homebrew/cmd/cleanup.rb
index 15af028d6..b7319c33c 100644
--- a/Library/Homebrew/cmd/cleanup.rb
+++ b/Library/Homebrew/cmd/cleanup.rb
@@ -115,10 +115,20 @@ module Homebrew
end
def rm_DS_Store
- paths = %w[Cellar Frameworks Library bin etc include lib opt sbin share var].
- map { |p| HOMEBREW_PREFIX/p }.select(&:exist?)
- args = paths.map(&:to_s) + %w[-name .DS_Store -delete]
- quiet_system "find", *args
+ paths = Queue.new
+ %w[Cellar Frameworks Library bin etc include lib opt sbin share var].
+ map { |p| HOMEBREW_PREFIX/p }.select(&:exist?).each { |p| paths << p }
+ workers = (0...Hardware::CPU.cores).map do
+ Thread.new do
+ begin
+ while p = paths.pop(true)
+ quiet_system "find", p, "-name", ".DS_Store", "-delete"
+ end
+ rescue ThreadError # ignore empty queue error
+ end
+ end
+ end
+ workers.map(&:join)
end
def prune?(path, options={})