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>
This commit is contained in:
Xu Cheng 2015-08-15 18:12:27 +08:00
parent dc4feaf56b
commit c4df86eb9d

View File

@ -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={})