diff options
| author | Xu Cheng | 2015-08-15 18:12:27 +0800 |
|---|---|---|
| committer | Xu Cheng | 2015-08-17 01:54:03 +0800 |
| commit | c4df86eb9d98bc92fe836854a2cef45e05c1d571 (patch) | |
| tree | 5df75c6b4937bcb3255c4693d5cabfd65ac0c80b /Library | |
| parent | dc4feaf56b5ba36c579277ea8fbc2f983f2bcdf0 (diff) | |
| download | brew-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>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/cmd/cleanup.rb | 18 |
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={}) |
