Skip to content

Commit

Permalink
tools(foreach): replace relative to absolute paths in build output (#…
Browse files Browse the repository at this point in the history
…2109)

this allows running "foreach" from the IDE and have problems
discovered globally.
  • Loading branch information
Elad Ben-Israel authored and RomainMuller committed Mar 28, 2019
1 parent bc40494 commit 7001f77
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
6 changes: 5 additions & 1 deletion scripts/foreach.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@
#
# --------------------------------------------------------------------------------------------------
set -euo pipefail
scriptdir=$(cd $(dirname $0) && pwd)
statefile="${HOME}/.foreach.state"
commandfile="${HOME}/.foreach.command"
command_arg="${@:-}"
base=$PWD

function heading {
printf "\e[38;5;81m$@\e[0m\n"
Expand Down Expand Up @@ -70,7 +72,9 @@ heading "${next}: ${command} (${remaining} remaining)"

(
cd ${next}
${command} || {
${command} &> /tmp/foreach.stdio || {
cd ${base}
cat /tmp/foreach.stdio | ${scriptdir}/path-prefix ${next}
error "error: last command failed. fix problem and resume by executing: $0"
error "directory: ${next}"
exit 1
Expand Down
38 changes: 38 additions & 0 deletions scripts/path-prefix
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env node
// converts relative file paths at the beginning of each input line to absolute file paths
const path = require('path');
const fs = require('fs');
const rl = require('readline');

const REMOVE_COLORS = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;

const dir = process.argv[2];
if (!dir) {
throw new Error(`usage: path-prefix DIR`);
}

const reldir = path.relative(process.cwd(), dir);

const ifc = rl.createInterface(process.stdin);
ifc.on('line', line => {
line = line.toString();
const [ relative, ...rest ] = line.split(':');
const rel = relative.replace(REMOVE_COLORS, '');
const absolute = path.join(dir, rel);
if (relative && fs.existsSync(absolute)) {
process.stdout.write(path.join(reldir, rel) + ':' + rest.join(':') + '\n');
} else {
process.stdout.write(line + '\n');
}
});

process.stdin.resume();

function exists(p) {
try {
fs.readFileSync(p);
return true;
} catch (e) {
return false;
}
}

0 comments on commit 7001f77

Please sign in to comment.