Added buildManifestInfo() to populate disk manifests with file information when the files are available locally

This commit is contained in:
Jeff Parsons 2017-06-21 18:04:56 -07:00 committed by Jeff Parsons
commit 0b6cf80c88

View file

@ -35,6 +35,7 @@
if (typeof module != "undefined") { // we can't simply test for NODE, since defines.js hasn't been loaded yet if (typeof module != "undefined") { // we can't simply test for NODE, since defines.js hasn't been loaded yet
var fs = require("fs"); var fs = require("fs");
var path = require("path"); var path = require("path");
var glob = require("glob");
var http = require("http"); var http = require("http");
var mkdirp = require("mkdirp"); var mkdirp = require("mkdirp");
var crypto = require("crypto"); var crypto = require("crypto");
@ -840,6 +841,12 @@ DiskDump.outputDisk = function(err, disk, sDiskPath, sOutputFile, fOverwrite, sM
if (disk.bufDisk) { if (disk.bufDisk) {
md5Disk = crypto.createHash('md5').update(disk.bufDisk.buf || disk.bufDisk).digest('hex'); md5Disk = crypto.createHash('md5').update(disk.bufDisk.buf || disk.bufDisk).digest('hex');
} }
/*
* Before calling updateManifest(), see if we have any aManifestInfo entries, and if not, see if
* there's a folder that the original files have been "dumped" into, from which we can create those
* entries...
*/
disk.buildManifestInfo(sDiskPath);
fUnchanged = DiskDump.updateManifest(disk, disk.sManifestFile, sDiskPath, sOutputFile, true, sManifestTitle, md5Disk, md5JSON); fUnchanged = DiskDump.updateManifest(disk, disk.sManifestFile, sDiskPath, sOutputFile, true, sManifestTitle, md5Disk, md5JSON);
} }
@ -1018,7 +1025,7 @@ DiskDump.updateManifest = function(disk, sManifestFile, sDiskPath, sOutputFile,
var sAttrs = ""; var sAttrs = "";
var fileInfo = disk.aManifestInfo[i]; var fileInfo = disk.aManifestInfo[i];
if (fileInfo.FILE_SIZE < 0) continue; // ignore non-file entries if (fileInfo.FILE_SIZE < 0) continue; // ignore non-file entries
var sDir = path.dirname(fileInfo.FILE_PATH) + '/'; var sDir = path.dirname(fileInfo.FILE_PATH) + path.sep;
if (sBaseDir === null) sBaseDir = sDir; if (sBaseDir === null) sBaseDir = sDir;
sAttrs += ' size="' + fileInfo.FILE_SIZE + '"'; sAttrs += ' size="' + fileInfo.FILE_SIZE + '"';
sAttrs += ' time="' + usr.formatDate("Y-m-d H:i:s", fileInfo.FILE_TIME) + '"'; sAttrs += ' time="' + usr.formatDate("Y-m-d H:i:s", fileInfo.FILE_TIME) + '"';
@ -1568,6 +1575,36 @@ DiskDump.prototype.addManifestInfo = function(fileInfo)
this.aManifestInfo.push(fileInfo); this.aManifestInfo.push(fileInfo);
}; };
/**
* buildManifestInfo(sImage)
*
* @this {DiskDump}
* @param {string} sImage
*/
DiskDump.prototype.buildManifestInfo = function(sImage)
{
if (!this.aManifestInfo.length) {
var sDir = sImage.replace(/\.(img|json)/, "");
if (sDir != sImage) {
sDir = sDir + path.sep;
var asFiles = glob.sync(sDir + "**");
for (var i = 0; i < asFiles.length; i++) {
var sFile = asFiles[i];
var fileInfo = {};
fileInfo.FILE_PATH = sFile;
fileInfo.FILE_NAME = sFile.substr(sDir.length);
if (!fileInfo.FILE_NAME) continue;
var stats = fs.statSync(sFile);
fileInfo.FILE_ATTR = stats.isDirectory()? DiskDump.ATTR_SUBDIR : DiskDump.ATTR_ARCHIVE;
fileInfo.FILE_SIZE = stats.size;
fileInfo.FILE_TIME = stats.mtime;
this.validateTime(fileInfo.FILE_TIME);
this.addManifestInfo(fileInfo);
}
}
}
};
/** /**
* isTextFile(sFileName) * isTextFile(sFileName)
* *
@ -1743,7 +1780,7 @@ DiskDump.prototype.readPath = function(sPath, done)
for (var iFile = 0; iFile < asFiles.length; iFile++) { for (var iFile = 0; iFile < asFiles.length; iFile++) {
fileInfo = {}; fileInfo = {};
var sFileName = asFiles[iFile]; var sFileName = asFiles[iFile];
var i = sFileName.lastIndexOf('/'); var i = sFileName.lastIndexOf(path.sep);
if (i >= 0) { if (i >= 0) {
if (sFileName.indexOf("..") < 0) { if (sFileName.indexOf("..") < 0) {
sDefaultPath = sFileName.substr(0, i); sDefaultPath = sFileName.substr(0, i);