@summarisation/fileutils
Version:
fileutils for summarisation
80 lines (79 loc) • 3.12 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeRecursivelyCmdChanges = exports.executeRecursivelyInChildDirectories = exports.execute = exports.executeScriptInShell = exports.isSuccessfulShellResult = void 0;
const utils_1 = require("@laoban/utils");
const files_1 = require("./files");
const child_process_1 = __importDefault(require("child_process"));
function isSuccessfulShellResult(t) {
return t.code === 0;
}
exports.isSuccessfulShellResult = isSuccessfulShellResult;
const executeScriptInShell = (cwd, cmd, config) => {
let { encoding = 'utf8', debug } = config;
if (debug)
console.log('executeScriptInShell', cwd, cmd.trim());
return new Promise(resolve => {
child_process_1.default.exec(cmd, { cwd, env: process.env, encoding }, (error, stdout, stdErr) => {
if (debug)
console.log('exec - error ', error);
if (debug)
console.log('exec - stdout', stdout);
if (debug)
console.log('exec - strError', stdErr);
if (stdErr === '' && (error === null || error.code === 0))
resolve({ message: stdout.toString(), code: 0 });
else
resolve({ message: stdout.toString(), error: stdErr.toString(), code: error?.code || 0 });
});
});
};
exports.executeScriptInShell = executeScriptInShell;
async function execute(cwd, cmd, config = {}) {
const { encoding, executeInShell = exports.executeScriptInShell, debug, dryRun } = config;
if (debug || dryRun)
console.log('execute ', cwd, cmd);
if (dryRun)
return [];
const res = await executeInShell(cwd, cmd, config);
if (isSuccessfulShellResult(res))
return res.message;
return [res.error];
}
exports.execute = execute;
async function executeRecursivelyInChildDirectories(cwd, cmds, config) {
let executed = 0;
let failed = [];
for await (const dir of (0, files_1.getDirectoriesRecursively)(cwd)) {
try {
await execute(dir, cmds, config);
executed++;
}
catch (e) {
failed.push(dir);
}
return { executed, failed };
}
}
exports.executeRecursivelyInChildDirectories = executeRecursivelyInChildDirectories;
async function executeRecursivelyCmdChanges(cwd, startDir, cmdFn, config) {
let executed = 0;
let failed = [];
for await (const dir of (0, files_1.getDirectoriesRecursively)(startDir)) {
try {
const result = await execute(cwd, cmdFn(dir), config);
if ((0, utils_1.hasErrors)(result) && result.length > 0) {
failed.push(dir + ' ' + result.join(';'));
console.error(result);
}
executed++;
}
catch (e) {
failed.push(dir);
}
}
return { executed, failed };
}
exports.executeRecursivelyCmdChanges = executeRecursivelyCmdChanges;
;