From cb2a5280500b49465481d77d3122a70822667ac8 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 5 Apr 2021 20:38:35 -0700 Subject: [PATCH 1/5] support RegExp mountpoints --- prelude/bootstrap.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/prelude/bootstrap.js b/prelude/bootstrap.js index 996881fe2..0e01c3d4f 100644 --- a/prelude/bootstrap.js +++ b/prelude/bootstrap.js @@ -94,12 +94,15 @@ EXECSTAT.birthtimeMs = EXECSTAT.birthtime.getTime(); var mountpoints = []; function insideMountpoint(f) { + var util = require('util'); if (!insideSnapshot(f)) return null; var file = normalizePath(f); var found = mountpoints .map((mountpoint) => { var { interior } = mountpoint; var { exterior } = mountpoint; + if (util.isRegExp(interior) && interior.test(file)) + return file.replace(interior, exterior); if (interior === file) return exterior; var left = interior + require('path').sep; if (file.slice(0, left.length) !== left) return null; From 49174afa37bda7d30a0041fa3384cd8fca643e93 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Tue, 6 Apr 2021 13:58:06 -0700 Subject: [PATCH 2/5] harden implementation --- prelude/bootstrap.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/prelude/bootstrap.js b/prelude/bootstrap.js index 0e01c3d4f..2ce85fd1f 100644 --- a/prelude/bootstrap.js +++ b/prelude/bootstrap.js @@ -93,15 +93,18 @@ EXECSTAT.birthtimeMs = EXECSTAT.birthtime.getTime(); var mountpoints = []; +function isRegExp(val) { + return require('util').types.isRegExp(val); +} + function insideMountpoint(f) { - var util = require('util'); if (!insideSnapshot(f)) return null; var file = normalizePath(f); var found = mountpoints .map((mountpoint) => { var { interior } = mountpoint; var { exterior } = mountpoint; - if (util.isRegExp(interior) && interior.test(file)) + if (isRegExp(interior) && interior.test(file)) return file.replace(interior, exterior); if (interior === file) return exterior; var left = interior + require('path').sep; @@ -116,9 +119,20 @@ function insideMountpoint(f) { function readdirMountpoints(path) { return mountpoints - .map((mountpoint) => mountpoint.interior) - .filter((interior) => require('path').dirname(interior) === path) - .map((interior) => require('path').basename(interior)); + .filter(({ interior }) => { + if (isRegExp(interior)) { + return interior.test(path); + } else { + return require('path').dirname(interior) === path; + } + }) + .map(({ interior, exterior }) => { + if (isRegExp(interior)) { + return path.replace(interior, exterior); + } else { + return require('path').basename(interior); + } + }); } function translate(f) { From fa7220ce66201adf99beddf2fe2b821c3f059d64 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Tue, 6 Apr 2021 15:46:01 -0700 Subject: [PATCH 3/5] add test --- test/test-1121-regexp-mountpoints/main.js | 34 +++++++++++++++++++ .../plugins-D-ext/test-y-require-D.js | 10 ++++++ .../test-x-index.js | 17 ++++++++++ 3 files changed, 61 insertions(+) create mode 100644 test/test-1121-regexp-mountpoints/main.js create mode 100644 test/test-1121-regexp-mountpoints/plugins-D-ext/test-y-require-D.js create mode 100644 test/test-1121-regexp-mountpoints/test-x-index.js diff --git a/test/test-1121-regexp-mountpoints/main.js b/test/test-1121-regexp-mountpoints/main.js new file mode 100644 index 000000000..024ff6cad --- /dev/null +++ b/test/test-1121-regexp-mountpoints/main.js @@ -0,0 +1,34 @@ +#!/usr/bin/env node + +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const assert = require('assert'); +const utils = require('../utils.js'); + +assert(!module.parent); +assert(__dirname === process.cwd()); + +const target = process.argv[2] || 'host'; +const input = './test-x-index.js'; +const output = './run-time/test-output.exe'; + +let right; +utils.mkdirp.sync(path.dirname(output)); +utils.mkdirp.sync(path.join(path.dirname(output), 'plugins-D-ext')); + +fs.writeFileSync( + path.join(path.dirname(output), 'plugins-D-ext/test-y-require-D.js'), + fs.readFileSync('./plugins-D-ext/test-y-require-D.js') +); + +utils.pkg.sync(['--target', target, '--output', output, input]); + +right = utils.spawn.sync('./' + path.basename(output), [], { + cwd: path.dirname(output), +}); + +assert.strictEqual(right, 'I am D\n' + 'test-x-index.js\n'); + +utils.vacuum.sync(path.dirname(output)); diff --git a/test/test-1121-regexp-mountpoints/plugins-D-ext/test-y-require-D.js b/test/test-1121-regexp-mountpoints/plugins-D-ext/test-y-require-D.js new file mode 100644 index 000000000..57f2e7f42 --- /dev/null +++ b/test/test-1121-regexp-mountpoints/plugins-D-ext/test-y-require-D.js @@ -0,0 +1,10 @@ +'use strict'; + +var assert = require('assert'); + +if (__dirname.indexOf('snapshot') < 0) { + console.log(__dirname); + assert(false); +} + +console.log('I am D'); diff --git a/test/test-1121-regexp-mountpoints/test-x-index.js b/test/test-1121-regexp-mountpoints/test-x-index.js new file mode 100644 index 000000000..9f86245ac --- /dev/null +++ b/test/test-1121-regexp-mountpoints/test-x-index.js @@ -0,0 +1,17 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); + +var myDirectory = path.dirname(process.execPath); + +process.pkg.mount( + new RegExp(path.join('^', __dirname, 'regexp_mountpoint_test/(.*)$')), + function (match, group1) { + return path.join(myDirectory, 'plugins-D-ext', group1); + } +); + +require('./regexp_mountpoint_test/test-y-require-D.js'.slice()); + +console.log(fs.readdirSync(__dirname).join('\n')); From 81bda6f0b772bc3bb61a11c71ea574b77500827c Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Tue, 6 Apr 2021 15:53:31 -0700 Subject: [PATCH 4/5] fix linting --- prelude/bootstrap.js | 14 ++++---------- test/test-1121-regexp-mountpoints/main.js | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/prelude/bootstrap.js b/prelude/bootstrap.js index 2ce85fd1f..b0f3c5c6a 100644 --- a/prelude/bootstrap.js +++ b/prelude/bootstrap.js @@ -120,18 +120,12 @@ function insideMountpoint(f) { function readdirMountpoints(path) { return mountpoints .filter(({ interior }) => { - if (isRegExp(interior)) { - return interior.test(path); - } else { - return require('path').dirname(interior) === path; - } + if (isRegExp(interior)) return interior.test(path); + return require('path').dirname(interior) === path; }) .map(({ interior, exterior }) => { - if (isRegExp(interior)) { - return path.replace(interior, exterior); - } else { - return require('path').basename(interior); - } + if (isRegExp(interior)) return path.replace(interior, exterior); + return require('path').basename(interior); }); } diff --git a/test/test-1121-regexp-mountpoints/main.js b/test/test-1121-regexp-mountpoints/main.js index 024ff6cad..db0907f52 100644 --- a/test/test-1121-regexp-mountpoints/main.js +++ b/test/test-1121-regexp-mountpoints/main.js @@ -29,6 +29,6 @@ right = utils.spawn.sync('./' + path.basename(output), [], { cwd: path.dirname(output), }); -assert.strictEqual(right, 'I am D\n' + 'test-x-index.js\n'); +assert.strictEqual(right, 'I am D\ntest-x-index.js\n'); utils.vacuum.sync(path.dirname(output)); From 41467eef76b6cbab3459d1cc622729abeafcfd4b Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Wed, 7 Apr 2021 11:54:58 -0700 Subject: [PATCH 5/5] simplify the regexp to make tests pass on windows --- test/test-1121-regexp-mountpoints/test-x-index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test-1121-regexp-mountpoints/test-x-index.js b/test/test-1121-regexp-mountpoints/test-x-index.js index 9f86245ac..dd33481fc 100644 --- a/test/test-1121-regexp-mountpoints/test-x-index.js +++ b/test/test-1121-regexp-mountpoints/test-x-index.js @@ -6,9 +6,9 @@ var path = require('path'); var myDirectory = path.dirname(process.execPath); process.pkg.mount( - new RegExp(path.join('^', __dirname, 'regexp_mountpoint_test/(.*)$')), - function (match, group1) { - return path.join(myDirectory, 'plugins-D-ext', group1); + /^(.*)regexp_mountpoint_test(.*)$/, + function (match, group1, group2) { + return path.join(myDirectory, 'plugins-D-ext', group2); } );