| 12345678910111213141516171819202122232425262728293031323334353637 |
- child = require "child_process"
- logger = require "logger-sharelatex"
- metrics = require "../../infrastructure/Metrics"
- module.exports = ArchiveManager =
- extractZipArchive: (source, destination, _callback = (err) ->) ->
- callback = (args...) ->
- _callback(args...)
- _callback = () ->
- timer = new metrics.Timer("unzipDirectory")
- logger.log source: source, destination: destination, "unzipping file"
- unzip = child.spawn("unzip", [source, "-d", destination])
- # don't remove this line, some zips need
- # us to listen on this for some unknow reason
- unzip.stdout.on "data", (d)->
- error = null
- unzip.stderr.on "data", (chunk) ->
- error ||= ""
- error += chunk
- unzip.on "error", (err) ->
- logger.error {err, source, destination}, "unzip failed"
- if err.code == "ENOENT"
- logger.error "unzip command not found. Please check the unzip command is installed"
- callback(err)
- unzip.on "exit", () ->
- timer.done()
- if error?
- error = new Error(error)
- logger.error err:error, source: source, destination: destination, "error unzipping file"
- callback(error)
|