Compare commits

...

11 Commits

Author SHA1 Message Date
a6f164602c 2.0.16 2019-05-22 15:45:09 +02:00
f8457ad58d fix(core): update 2019-05-22 15:45:08 +02:00
8ceac74a1f 2.0.15 2019-05-19 22:41:20 +02:00
f63c4456bf fix(core): update 2019-05-19 22:41:20 +02:00
32c33cad5b 2.0.14 2019-05-14 17:28:38 +02:00
0758e58fa4 fix(core): update 2019-05-14 17:28:38 +02:00
e981ca6bdd 2.0.13 2018-12-14 18:36:23 +01:00
2853a48708 fix(core): update 2018-12-14 18:36:23 +01:00
389f8f4a52 2.0.12 2018-12-14 18:35:31 +01:00
c1a537f052 fix(core): update 2018-12-14 18:35:31 +01:00
4701341c0c ensure WSL compatibility 2018-12-13 16:50:32 +01:00
7 changed files with 852 additions and 253 deletions

View File

@ -1,6 +1,7 @@
{ {
"npmci": { "npmci": {
"npmGlobalTools": [], "npmGlobalTools": [],
"npmAccessLevel": "public" "npmAccessLevel": "public",
"npmRegistryUrl": "registry.npmjs.org"
} }
} }

1016
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{ {
"name": "@pushrocks/smartshell", "name": "@pushrocks/smartshell",
"private": false, "private": false,
"version": "2.0.11", "version": "2.0.16",
"description": "shell actions designed as promises", "description": "shell actions designed as promises",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
@ -24,16 +24,17 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartshell#README", "homepage": "https://gitlab.com/pushrocks/smartshell#README",
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.0.22", "@gitzone/tsbuild": "^2.1.11",
"@gitzone/tsrun": "^1.1.13", "@gitzone/tsrun": "^1.2.6",
"@gitzone/tstest": "^1.0.15", "@gitzone/tstest": "^1.0.20",
"@pushrocks/tapbundle": "^3.0.7", "@pushrocks/tapbundle": "^3.0.9",
"@types/node": "^10.12.10", "@types/node": "^12.0.2",
"tslint": "^5.11.0", "tslint": "^5.16.0",
"tslint-config-prettier": "^1.16.0" "tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"@pushrocks/smartpromise": "^2.0.5", "@pushrocks/smartexit": "^1.0.8",
"@pushrocks/smartpromise": "^3.0.2",
"@types/which": "^1.3.1", "@types/which": "^1.3.1",
"which": "^1.3.1" "which": "^1.3.1"
} }

View File

@ -33,11 +33,26 @@ export class ShellEnv {
*/ */
private _setPath(commandStringArg): string { private _setPath(commandStringArg): string {
let commandResult = commandStringArg; let commandResult = commandStringArg;
let commandPath = process.env.PATH; let commandPaths: string[] = [];
commandPaths = commandPaths.concat(process.env.PATH.split(':'));
if (process.env.SMARTSHELL_PATH) { if (process.env.SMARTSHELL_PATH) {
commandPath = `${commandPath}:${process.env.SMARTSHELL_PATH}`; commandPaths = commandPaths.concat(process.env.SMARTSHELL_PATH.split(':'));
} }
commandResult = `PATH=${commandPath} && ${commandStringArg}`;
// lets filter for unwanted paths
// Windows WSL
commandPaths = commandPaths.filter(commandPathArg => {
const filterResult =
!commandPathArg.startsWith('/mnt/c/') &&
!commandPathArg.startsWith('Files/1E') &&
!commandPathArg.includes(' ');
if (!filterResult) {
// console.log(`${commandPathArg} will be filtered!`);
}
return filterResult;
});
commandResult = `PATH=${commandPaths.join(':')} && ${commandStringArg}`;
return commandResult; return commandResult;
} }
@ -58,14 +73,29 @@ export class ShellEnv {
this.sourceFileArray = []; this.sourceFileArray = [];
} }
createEnvExecString(commandArg): string { public createEnvExecString(commandArg: string): string {
let commandResult = ''; let commandResult = '';
if (this.executor === 'bash') { let sourceString = '';
let sourceString = '';
for (let sourceFilePath of this.sourceFileArray) { // deal with sourcestring
sourceString = sourceString + `source ${sourceFilePath} && `; for (const sourceFilePath of this.sourceFileArray) {
} sourceString = sourceString + `source ${sourceFilePath} && `;
commandResult = `bash -c '${sourceString} ${commandArg}'`; }
// deal with avaiable path
let pathString = 'PATH=$PATH';
for (const pathDir of this.pathDirArray) {
pathString += `:${pathDir}`;
}
pathString += ` && `;
switch (this.executor) {
case 'bash':
commandResult = `bash -c '${pathString}${sourceString}${commandArg}'`;
break;
case 'sh':
commandResult = `${pathString}${sourceString}${commandArg}`;
break;
} }
commandResult = this._setPath(commandResult); commandResult = this._setPath(commandResult);
return commandResult; return commandResult;

View File

@ -13,13 +13,7 @@ export class ShellLog {
*/ */
logToConsole(dataArg: string | Buffer): void { logToConsole(dataArg: string | Buffer): void {
// make sure we have the data as string // make sure we have the data as string
const dataString: string = (() => { process.stdout.write(dataArg);
if (Buffer.isBuffer(dataArg)) {
return dataArg.toString();
}
return dataArg;
})();
process.stdout.write(dataString);
} }
/** /**

View File

@ -26,7 +26,8 @@ export interface IExecResultStreaming {
// -- SmartShell -- // -- SmartShell --
export class Smartshell { export class Smartshell {
shellEnv: ShellEnv; public shellEnv: ShellEnv;
public smartexit = new plugins.smartexit.SmartExit();
constructor(optionsArg: IShellEnvContructorOptions) { constructor(optionsArg: IShellEnvContructorOptions) {
this.shellEnv = new ShellEnv(optionsArg); this.shellEnv = new ShellEnv(optionsArg);
@ -55,6 +56,8 @@ export class Smartshell {
detached: true detached: true
}); });
this.smartexit.addProcess(execChildProcess);
execChildProcess.stdout.on('data', data => { execChildProcess.stdout.on('data', data => {
if (!silentArg) { if (!silentArg) {
spawnlogInstance.logToConsole(data); spawnlogInstance.logToConsole(data);
@ -80,6 +83,7 @@ export class Smartshell {
} }
execChildProcess.on('exit', (code, signal) => { execChildProcess.on('exit', (code, signal) => {
this.smartexit.removeProcess(execChildProcess);
if (strictArg && code === 1) { if (strictArg && code === 1) {
done.reject(); done.reject();
} }

View File

@ -1,4 +1,5 @@
import * as smartexit from '@pushrocks/smartexit';
import * as smartpromise from '@pushrocks/smartpromise'; import * as smartpromise from '@pushrocks/smartpromise';
import * as which from 'which'; import * as which from 'which';
export { smartpromise, which }; export { smartexit, smartpromise, which };