runScriptSync method
void
runScriptSync(})
Implementation
void runScriptSync(
String blockName,
List<String> commands,
FtRunner ftRun,
String workdir, {
bool viaShell = true,
bool expandPath = true,
bool exitOnNonzore = true,
}) {
var workenv = ftRun.ftEnv;
var logger = ftRun.ftLogger;
// final lpm = LocalProcessManager();
for (var cmd in commands) {
logger.trace('i, block:$blockName, cmd:$cmd');
cmd = expandVar(cmd.trim(), map: ftRun.ftEnv);
var parts = cmd.split(spaceDelimiter);
var name = parts.first.trim();
var args = parts.getRange(1, parts.length).map((e) => e.trim()).toList()
..removeWhere((e) => e.isEmpty);
if (expandPath) {
args = args.map((e) => expandTilde(e)).toList();
// logger.trace('i, expandPath, args:$args');
}
var exec = name.toLowerCase();
var progress = logger.progress(
'i, block:$blockName, run:$name ${args.join(spaceDelimiter)} ');
if (exec == 'cd') {
if (args.isEmpty) {
workdir = expandTilde('~');
} else {
var newdir = args.first.trim();
if (newdir.startsWith('~')) newdir = expandTilde(newdir);
workdir = p.normalize(newdir);
}
continue;
}
if (exec == 'set' || exec == 'export') {
// workenv.addAll(parseCmdVar(cmd));
continue;
}
try {
var result = Process.runSync(
name,
args,
workingDirectory: workdir,
environment: workenv,
runInShell: viaShell,
);
var code = result.exitCode;
logger.trace('${code == 0 ? 'i' : 'e'}, exitcode:$code');
if (code == 0) {
logger.write(result.stdout);
} else {
logger.stderr(result.stderr);
if (exitOnNonzore) {
exitCode = ExitCodeExt.error.code;
break;
}
}
} on ProcessException catch (e, s) {
logger
..stderr('$e')
..stderr(kIsDebug ? '$s' : '');
if (ftRun.ftErrExit) {
exitCode = ExitCodeExt.error.code;
break;
}
} finally {
progress.finish();
}
}
}