through.obj(function (file, encoding, callback) { if (file.isNull()) { gutil.log('"' + gutil.colors.cyan(file.path) + '" has no content. Skipping.') return callback() } getSftp(function (err, sftp) { if (err) return end(err, callback) var outPath = path.join(destDir, file.path.replace(file.base, '')).replace(/\\/g, '/') gutil.log('Preparing to write "' + gutil.colors.cyan(outPath) + '"') internalMkDirs(sftp, outPath, function (err) { if (err) return end(err, callback) gutil.log('Writing \'' + gutil.colors.cyan(outPath) + '\'') file.pipe(sftp.createWriteStream(outPath, options)) .on('error', done) .on('finish', done) function done (err) { if (err) return end(err, callback) gutil.log('Finished writing \'' + gutil.colors.cyan(outPath) + '\'') callback() } }) }) }, function (callback) { end(null, callback) })