From 9c87d4543364193f45db97dd5b47b7768899c546 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 10 Mar 2018 11:37:23 -0700 Subject: [PATCH] Add GLOB support to oputil fb scan... --- core/oputil/oputil_common.js | 10 ++++++++++ core/oputil/oputil_file_base.js | 22 ++++++++++++++++++++-- core/oputil/oputil_help.js | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/oputil/oputil_common.js b/core/oputil/oputil_common.js index e175a166..d03bb82f 100644 --- a/core/oputil/oputil_common.js +++ b/core/oputil/oputil_common.js @@ -15,6 +15,7 @@ exports.getDefaultConfigPath = getDefaultConfigPath; exports.getConfigPath = getConfigPath; exports.initConfigAndDatabases = initConfigAndDatabases; exports.getAreaAndStorage = getAreaAndStorage; +exports.looksLikePattern = looksLikePattern; const exitCodes = exports.ExitCodes = { SUCCESS : 0, @@ -87,4 +88,13 @@ function getAreaAndStorage(tags) { } return entry; }); +} + +function looksLikePattern(tag) { + // globs can start with @ + if(tag.indexOf('@') > 0) { + return false; + } + + return /[*?[\]!()+|^]/.test(tag); } \ No newline at end of file diff --git a/core/oputil/oputil_file_base.js b/core/oputil/oputil_file_base.js index b1d1d97b..a2abbe99 100644 --- a/core/oputil/oputil_file_base.js +++ b/core/oputil/oputil_file_base.js @@ -7,7 +7,10 @@ const ExitCodes = require('./oputil_common.js').ExitCodes; const argv = require('./oputil_common.js').argv; const initConfigAndDatabases = require('./oputil_common.js').initConfigAndDatabases; const getHelpFor = require('./oputil_help.js').getHelpFor; -const getAreaAndStorage = require('./oputil_common.js').getAreaAndStorage; +const { + getAreaAndStorage, + looksLikePattern +} = require('./oputil_common.js'); const Errors = require('../enig_error.js').Errors; const async = require('async'); @@ -16,6 +19,7 @@ const paths = require('path'); const _ = require('lodash'); const moment = require('moment'); const inq = require('inquirer'); +const glob = require('glob'); exports.handleFileBaseCommand = handleFileBaseCommand; @@ -119,6 +123,14 @@ function scanFileAreaForChanges(areaInfo, options, cb) { const FileEntry = require('../file_entry.js'); + const readDir = options.glob ? + (dir, next) => { + return glob(options.glob, { cwd : dir, nodir : true }, next); + } : + (dir, next) => { + return fs.readdir(dir, next); + }; + async.eachSeries(storageLocations, (storageLoc, nextLocation) => { async.waterfall( [ @@ -134,7 +146,7 @@ function scanFileAreaForChanges(areaInfo, options, cb) { function scanPhysFiles(descHandler, callback) { const physDir = storageLoc.dir; - fs.readdir(physDir, (err, files) => { + readDir(physDir, (err, files) => { if(err) { return callback(err); } @@ -498,6 +510,12 @@ function scanFileAreas() { options.areaAndStorageInfo = getAreaAndStorage(argv._.slice(2)); + const last = argv._[argv._.length - 1]; + if(options.areaAndStorageInfo.length > 1 && looksLikePattern(last)) { + options.glob = last; + options.areaAndStorageInfo.length -= 1; + } + async.series( [ function init(callback) { diff --git a/core/oputil/oputil_help.js b/core/oputil/oputil_help.js index baa0138c..4875d382 100644 --- a/core/oputil/oputil_help.js +++ b/core/oputil/oputil_help.js @@ -49,6 +49,8 @@ import-areas args: actions: scan AREA_TAG[@STORAGE_TAG] scan specified area + may also contain optional GLOB as last parameter, + for examle: scan some_area *.zip info AREA_TAG|SHA|FILE_ID display information about areas and/or files SHA may be a full or partial SHA-256