hook.io-gzbz2
Version:
A hook to compress and uncompress. Operates synchronously for now.
88 lines (65 loc) • 2.38 kB
text/coffeescript
Hook = require('hook.io').Hook
util = require 'util'
colors = require 'colors'
path = require 'path'
fs = require "fs"
spawn = require("child_process").spawn
require('pkginfo')(module,'version','hook')
class exports.Gzbz2 extends Hook
constructor: (options) ->
self = @
Hook.call self, options
self.on "hook::ready", ->
self.on "gzbz2::compress", (data)->
self._compress(data)
self.on "gzbz2::uncompress", (data)->
self._uncompress(data)
for compress in (self.compresss || [])
self.emit "gzbz2::compress",
source : compress.source
target : compress.target
mode : compress.mode
for uncompress in (self.uncompresss || [])
self.emit "gzbz2::uncompress",
source : uncompress.source
target : uncompress.target
_runCommand : (cmd,args,eventName,data) =>
fd = fs.openSync data.target, "w", 0644
zip = spawn(cmd,args)
zip.stdout.on "data", (data) =>
fs.writeSync fd, data, 0, data.length, null
zip.stderr.on "data", (data) =>
console.log "ERROR: #{data}"
zip.on "exit", (code) =>
fs.closeSync fd
#console.log "EXIT #{code}"
if code != 0
try
fs.unlinkSync data.target # cleanup
catch ignore
@emit "gzbz2::error",
source: data.source
target: data.target
mode: data.mode
code: code
else
@emit eventName,
source: data.source
target: data.target
mode: data.mode
_compress : (data) =>
console.log "Compressing #{data.source} to #{data.target}".cyan
data.mode = 'gzip' unless data.mode == 'bzip2'
data.target = path.normalize data.target
if data.mode == 'gzip'
@_runCommand "gzip",[ "-c", data.source ],"gzbz2::compress-complete",data
else
@_runCommand "bzip2",[ "-c", data.source ],"gzbz2::compress-complete",data
_uncompress : (data) =>
console.log "Uncompress for #{data.source}".cyan
data.mode = 'gzip' unless data.mode == 'bzip2'
data.target = path.normalize data.target
if data.mode == 'gzip'
@_runCommand "gunzip",[ "-c", data.source ],"gzbz2::uncompress-complete",data
else
@_runCommand "bzip2",[ "-dc", data.source ],"gzbz2::uncompress-complete",data