backup
Advanced tools
Comparing version 1.0.0-9 to 1.0.1
148
index.js
@@ -22,2 +22,4 @@ // Copyright Peter Širka, Web Site Design s.r.o. (www.petersirka.sk) | ||
'use strict'; | ||
var fs = require('fs'); | ||
@@ -40,5 +42,5 @@ var ph = require('path'); | ||
}; | ||
}; | ||
} | ||
function Walker(addDirectory) { | ||
function Walker() { | ||
this.pending = []; | ||
@@ -48,8 +50,28 @@ this.pendingDirectory = []; | ||
this.file = []; | ||
this.complete = null; | ||
this.addDirectory = addDirectory || false; | ||
this.options = { sort: true, addEmptyDirectory: false }; | ||
this.onComplete = null; | ||
this.onFilter = null; | ||
} | ||
Walker.prototype.reset = function() { | ||
var self = this; | ||
self.file = []; | ||
self.directory = []; | ||
self.pendingDirectory = []; | ||
}; | ||
Walker.prototype.walk = function(path) { | ||
var self = this; | ||
if (path instanceof Array) { | ||
var length = path.length; | ||
for (var i = 0; i < length; i++) | ||
self.pendingDirectory.push(path[i]); | ||
self.next(); | ||
return; | ||
} | ||
fs.readdir(path, function(err, arr) { | ||
@@ -60,8 +82,10 @@ | ||
if (arr.length === 0 || self.addDirectory) | ||
self.directory.push(path); | ||
if (arr.length === 0 || self.options.addEmptyDirectory) { | ||
if (self.onFilter === null || self.onFilter(path)) | ||
self.directory.push(path); | ||
} | ||
arr.forEach(function(o) { | ||
self.pending.push(ph.join(path, o)); | ||
}); | ||
var length = arr.length; | ||
for (var i = 0; i < length; i++) | ||
self.pending.push(ph.join(path, arr[i])); | ||
@@ -72,3 +96,3 @@ self.next(); | ||
Walker.prototype.stat = function(path) { | ||
Walker.prototype.stat = function(path) { | ||
var self = this; | ||
@@ -83,3 +107,3 @@ | ||
self.pendingDirectory.push(path); | ||
else | ||
else if (self.onFilter === null || self.onFilter(path)) | ||
self.file.push(path); | ||
@@ -106,7 +130,9 @@ | ||
self.file.sort(function(a, b) { | ||
return a.localeCompare(b); | ||
}); | ||
if (self.options.sort) { | ||
self.file.sort(function(a, b) { | ||
return a.localeCompare(b); | ||
}); | ||
} | ||
self.complete(self.directory, self.file); | ||
self.onComplete(self.directory, self.file); | ||
}; | ||
@@ -131,3 +157,3 @@ | ||
walker.complete = function(directory, files) { | ||
walker.onComplete = function(directory, files) { | ||
self.directory = directory; | ||
@@ -146,9 +172,13 @@ self.file = files; | ||
var length = self.path.length; | ||
var len = 0; | ||
if (self.directory.length > 0) { | ||
self.directory.forEach(function(o) { | ||
len = self.directory.length; | ||
for (var i = 0; i < len; i++) { | ||
var o = self.directory[i]; | ||
if (self.filter(o.substring(length))) | ||
fs.appendFileSync(self.fileName, (o.replace(self.path, '').replace(/\\/g, '/') + '/').padRight(padding) + ':#\n'); | ||
}); | ||
} | ||
@@ -225,3 +255,2 @@ self.directory = []; | ||
read.value += data.substring(0, index); | ||
self.restoreFile(read.key.replace(/\s/g, ''), read.value.replace(/\s/g, '')); | ||
@@ -236,5 +265,5 @@ | ||
Backup.prototype.restore = function(fileName, path, callback, filter) { | ||
Backup.prototype.restore = function(filename, path, callback, filter) { | ||
if (!fs.existsSync(fileName)) { | ||
if (!fs.existsSync(filename)) { | ||
if (callback) | ||
@@ -246,5 +275,6 @@ callback(new Error('Backup file not found.'), path); | ||
var self = this; | ||
self.filter = filter; | ||
self.createDirectory(path, true); | ||
var stream = fs.createReadStream(fileName); | ||
var stream = fs.createReadStream(filename); | ||
var key = ''; | ||
@@ -266,2 +296,3 @@ var value = ''; | ||
callback(null, path); | ||
stream = null; | ||
}); | ||
@@ -293,4 +324,6 @@ } | ||
zlib.gunzip(new Buffer(value, 'base64'), function(err, data) { | ||
var buffer = new Buffer(value, 'base64'); | ||
zlib.gunzip(buffer, function(err, data) { | ||
fs.writeFileSync(ph.join(self.path, key), data); | ||
buffer = null; | ||
}); | ||
@@ -310,7 +343,8 @@ }; | ||
var self = this; | ||
var length = arr.length; | ||
arr.forEach(function(name) { | ||
for (var i = 0; i < length; i++) { | ||
var name = arr[i]; | ||
directory += (directory.length > 0 ? '/' : '') + name; | ||
var dir = ph.join(self.path, directory); | ||
@@ -325,3 +359,3 @@ | ||
fs.mkdirSync(dir); | ||
}); | ||
} | ||
}; | ||
@@ -332,3 +366,4 @@ | ||
var self = this; | ||
var walker = new Walker(true); | ||
var walker = new Walker(); | ||
walker.options.addEmptyDirectory = true; | ||
@@ -341,3 +376,3 @@ if (callback) | ||
walker.complete = function(directory, files) { | ||
walker.onComplete = function(directory, files) { | ||
@@ -350,9 +385,15 @@ self.file = []; | ||
files.forEach(function(o) { | ||
var length = files.length; | ||
for (var i = 0; i < length; i++) { | ||
var o = files[i]; | ||
if (filter(o)) | ||
self.file.push(o); | ||
}); | ||
} | ||
directory.forEach(function(o) { | ||
length = directory.length; | ||
for (var i = 0; i < length; i++) { | ||
var o = files[i]; | ||
if (o === path) | ||
@@ -363,3 +404,3 @@ return; | ||
self.directory.push(o); | ||
}); | ||
} | ||
@@ -403,3 +444,3 @@ self.directory.sort(function(a, b) { | ||
} | ||
fs.rmdir(directory, function() { | ||
@@ -410,26 +451,2 @@ self.removeDirectory(); | ||
/* | ||
@max {Number} | ||
@c {String} :: optional | ||
return {String} | ||
*/ | ||
String.prototype.padLeft = function(max, c) { | ||
var self = this.toString(); | ||
return Array(Math.max(0, max - self.length + 1)).join(c || ' ') + self; | ||
}; | ||
/* | ||
@max {Number} | ||
@c {String} :: optional | ||
return {String} | ||
*/ | ||
String.prototype.padRight = function(max, c) { | ||
var self = this.toString(); | ||
return self + Array(Math.max(0, max - self.length + 1)).join(c || ' '); | ||
}; | ||
String.prototype.trim = function() { | ||
return this.replace(/^[\s]+|[\s]+$/g, ''); | ||
}; | ||
// =========================================================================== | ||
@@ -439,5 +456,5 @@ // EXPORTS | ||
exports.backup = function(path, fileName, callback, filter) { | ||
exports.backup = function(path, filename, callback, filter) { | ||
var backup = new Backup(); | ||
backup.backup(path, fileName, callback, filter); | ||
backup.backup(path, filename, callback, filter); | ||
}; | ||
@@ -450,15 +467,8 @@ | ||
exports.restore = function(fileName, path, callback, filter, clear) { | ||
exports.restore = function(filename, path, callback, filter) { | ||
var backup = new Backup(); | ||
if (!clear) { | ||
backup.restore(fileName, path, callback, filter); | ||
return; | ||
} | ||
backup.clear(path, function() { | ||
backup.restore(fileName, path, callback, filter); | ||
}); | ||
backup.restore(filename, path, callback, filter); | ||
}; | ||
exports.Walker = Walker; | ||
exports.Backup = Backup; |
{ | ||
"name": "backup", | ||
"version": "1.0.0-9", | ||
"version": "1.0.1", | ||
"description": "Web Site backup & restore", | ||
@@ -5,0 +5,0 @@ "main": "./index.js", |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
13407
333
1