ArchiveManager.coffee 809 B

123456789101112131415161718192021222324252627
  1. child = require "child_process"
  2. logger = require "logger-sharelatex"
  3. metrics = require "../../infrastructure/Metrics"
  4. module.exports = ArchiveManager =
  5. extractZipArchive: (source, destination, callback = (err) ->) ->
  6. timer = new metrics.Timer("unzipDirectory")
  7. logger.log source: source, destination: destination, "unzipping file"
  8. unzip = child.spawn("unzip", [source, "-d", destination])
  9. # don't remove this line, some zips need
  10. # us to listen on this for some unknow reason
  11. unzip.stdout.on "data", (d)->
  12. error = null
  13. unzip.stderr.on "data", (chunk) ->
  14. error ||= ""
  15. error += chunk
  16. unzip.on "exit", () ->
  17. timer.done()
  18. if error?
  19. error = new Error(error)
  20. logger.error err:error, source: source, destination: destination, "error unzipping file"
  21. callback(error)