Comparing version 0.1.4 to 0.2.0
@@ -77,2 +77,3 @@ var fs = require('fs'); | ||
self.emit('error', err); | ||
callback(err); | ||
}); | ||
@@ -112,3 +113,3 @@ ssh.on('end', function() { | ||
if (attrs) { | ||
attrs.mode = '0755'; | ||
attrs.mode = attrs.mode || '0755'; | ||
} | ||
@@ -121,2 +122,5 @@ | ||
this.sftp(function(err, sftp) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
@@ -165,5 +169,9 @@ // for record log | ||
this.sftp(function(err, sftp) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
var _write = function(handle) { | ||
self.emit('write', options); | ||
var length; | ||
var lastIndex = 0; | ||
@@ -174,3 +182,3 @@ var lastCursor = 0; | ||
var contents = []; | ||
var length = parseInt((content.length - 1) / chunkSize, 10) + 1; | ||
length = parseInt((content.length - 1) / chunkSize, 10) + 1; | ||
@@ -192,3 +200,3 @@ for (var i = 0 ; i < length; i++) { | ||
// content is a file descriptor | ||
var length = parseInt((attrs.size - 1) / chunkSize, 10) + 1; | ||
length = parseInt((attrs.size - 1) / chunkSize, 10) + 1; | ||
var range = new Array(length); | ||
@@ -243,3 +251,3 @@ async.eachSeries(range, function(pos, callback) { | ||
var self = this, _attrs, _fd; | ||
var self = this; | ||
@@ -250,20 +258,20 @@ async.waterfall([ | ||
}, | ||
function(stats, callback) { | ||
_attrs = stats; | ||
fs.open(src, 'r', callback); | ||
function(stat, callback) { | ||
if (stat.isDirectory()) return callback(new Error('Can not upload a directory')); | ||
// Get the attributes of the source directory | ||
fs.stat(path.dirname(src), function(err, dirStat) { | ||
if(err) return callback(err); | ||
self.mkdir(path.dirname(dest), dirStat, function(err){ callback(err, stat) }); | ||
}); | ||
}, | ||
function(fd, callback) { | ||
_fd = fd; | ||
if (/\/$/.test(dest)) { | ||
self.mkdir(dest, _attrs, callback); | ||
} else { | ||
self.mkdir(path.dirname(dest), _attrs, callback); | ||
} | ||
function(stat, callback) { | ||
fs.open(src, 'r', function(err, fd) { callback(err, stat, fd); }); | ||
}, | ||
function(callback) { | ||
function(stat, fd, callback) { | ||
self.write({ | ||
source: src, | ||
destination: dest, | ||
content: _fd, | ||
attrs: _attrs | ||
content: fd, | ||
attrs: stat | ||
}, callback); | ||
@@ -278,31 +286,16 @@ } | ||
var self = this; | ||
var _sftp, _handle, _buffer; | ||
async.waterfall([ | ||
function(callback) { | ||
self.sftp(function(err, sftp) { | ||
_sftp = sftp; | ||
callback(err, sftp); | ||
}); | ||
}, | ||
function(sftp, callback) { | ||
sftp.open(src, 'r', callback); | ||
}, | ||
function(handle, callback) { | ||
_handle = handle; | ||
_sftp.fstat(handle, callback); | ||
}, | ||
function(attrs, callback) { | ||
_buffer = new Buffer(attrs.size); | ||
self.sftp(function(err,sftp){ | ||
var sftp_readStream = sftp.createReadStream(src); | ||
sftp_readStream.on('error', function(err){ | ||
callback(err); | ||
}); | ||
sftp_readStream.pipe(fs.createWriteStream(dest)) | ||
.on('close',function(){ | ||
self.emit('read', src); | ||
_sftp.read(_handle, _buffer, 0, attrs.size, 0, callback); | ||
}, | ||
function(bytesRead, buffer, position, callback) { | ||
callback(null, buffer); | ||
}, | ||
function(buffer, callback) { | ||
fs.writeFile(dest, buffer, callback); | ||
} | ||
], function(err) { | ||
callback(err); | ||
callback(null); | ||
}) | ||
.on('error', function(err){ | ||
callback(err); | ||
}); | ||
}); | ||
@@ -309,0 +302,0 @@ }; |
@@ -87,2 +87,3 @@ var fs = require('fs'); | ||
exports.scp = function(src, dest, callback) { | ||
client.on('error', callback); | ||
var parsed = client.parse(src); | ||
@@ -89,0 +90,0 @@ if (parsed.host && parsed.path) { |
{ | ||
"name": "scp2", | ||
"version": "0.1.4", | ||
"version": "0.2.0", | ||
"description": "A pure javascript scp program based on ssh2.", | ||
@@ -15,6 +15,6 @@ "author": "Hsiaoming Yang <lepture@me.com>", | ||
"dependencies": { | ||
"ssh2": "~0.2.12", | ||
"glob": "~3.2.6", | ||
"async": "~0.2.9", | ||
"lodash": "~2.0.0" | ||
"ssh2": "~0.3.6", | ||
"glob": "~4.0.6", | ||
"async": "~0.9.0", | ||
"lodash": "~2.4.1" | ||
}, | ||
@@ -21,0 +21,0 @@ "repository": { |
21333
358
+ Addedasn1@0.2.1(transitive)
+ Addedasync@0.9.2(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addedglob@4.0.6(transitive)
+ Addedgraceful-fs@3.0.12(transitive)
+ Addedisarray@0.0.1(transitive)
+ Addedlodash@2.4.2(transitive)
+ Addedminimatch@1.0.0(transitive)
+ Addednatives@1.1.6(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedreadable-stream@1.0.27-1(transitive)
+ Addedssh2@0.3.6(transitive)
+ Addedstring_decoder@0.10.31(transitive)
+ Addedwrappy@1.0.2(transitive)
- Removedasn1@0.1.11(transitive)
- Removedasync@0.2.10(transitive)
- Removedglob@3.2.11(transitive)
- Removedlodash@2.0.0(transitive)
- Removedminimatch@0.3.0(transitive)
- Removedssh2@0.2.25(transitive)
Updatedasync@~0.9.0
Updatedglob@~4.0.6
Updatedlodash@~2.4.1
Updatedssh2@~0.3.6