Use Java 7 APIs to unzip a file instead of shelling out to `unzip`.

Users have been reporting intermittent errors when multiple threads
are unzipping artifacts pulled from cache. Previously, we were
shelling out to `unzip` to do this extraction, but now, we use Java 7
APIs that create the parent directories for each file before
writing the file. We'll have to live with this in the wild and see
whether this is an improvement.

If nothing else, this makes this part of the code work on Windows
instead of only Linux and OS X.

Note that this diff also removes the `filesToExtract` option from `UnzipStep`,
as no one was using it and it was not tested.

Test Plan:
I did a build purely from cache with 12 threads and did not get
any collisions.
6 files changed
tree: 14e1f67339777934bf3c9237586324db6c82102b
  1. .buckconfig
  2. .classpath
  3. .gitignore
  4. .idea/
  5. .project
  6. .travis.yml
  7. DEFS
  10. bin/
  11. buck.iml
  12. build.xml
  13. config/
  14. docs/
  15. lib/
  16. plugin/
  17. pmd/
  18. scripts/
  19. src/
  20. test/
  21. testdata/
  22. third-party/


Buck is an Android build tool. To see what Buck can do for you, check out the documentation at

Build Status


To build Buck, run the following:

git clone
cd buck
./bin/buck --help


Apache License 2.0