From c4df86eb9d98bc92fe836854a2cef45e05c1d571 Mon Sep 17 00:00:00 2001 From: Xu Cheng Date: Sat, 15 Aug 2015 18:12:27 +0800 Subject: 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 --- Library/Homebrew/cmd/cleanup.rb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'Library') 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={}) -- cgit v1.2.3