diff --git a/packages/collector-extension/lib/index.js b/packages/collector-extension/lib/index.js index e363d263a220b3fec7fe3f2ff7f870dcdf69dad5..d9552044e8314a00fd878904a0ebbc0a21ce8180 100644 --- a/packages/collector-extension/lib/index.js +++ b/packages/collector-extension/lib/index.js @@ -9,6 +9,7 @@ const getUserCacheDir = require('cache-directory') const globStream = require('glob-stream') const invariably = { false: () => false, void: () => undefined } const ospath = require('path') +const { posix: path } = ospath const runCommand = require('./util/run-command.js') const { pipeline, Writable } = require('stream') const yaml = require('js-yaml') @@ -80,7 +81,7 @@ module.exports.register = function () { } } for (const scan of scans) { - for (const file of await srcFs(scan.dir, scan.files)) { + for (const file of await srcFs(scan.dir, scan.files, scan.base)) { let existingFile if (file.path === 'antora.yml') { const generated = yaml.load(file.contents) @@ -154,14 +155,14 @@ function getBaseCacheDir ({ dir: dot, runtime: { cacheDir: preferredDir } }) { : expandPath(preferredDir, { dot }) } -function srcFs (cwd, globs = ['**/*']) { +function srcFs (cwd, globs = '**/*', base) { return new Promise((resolve, reject, cache = Object.create(null), accum = []) => { pipeline( globStream(globs, Object.assign({ cwd, cache }, GLOB_OPTS)), forEach(({ path: abspathPosix }, _, done) => { if (cache[abspathPosix].constructor === Array) return done() // detects some directories const abspath = ospath.sep === '\\' ? ospath.normalize(abspathPosix) : abspathPosix - const relpath = abspath.substr(cwd.length + 1) + const relpath = base ? path.join('.', base, abspath.substr(cwd.length + 1)) : abspath.substr(cwd.length + 1) fsp.stat(abspath).then( (stat) => { if (stat.isDirectory()) return done() // detects directories that slipped through cache check diff --git a/packages/collector-extension/test/collector-extension-test.js b/packages/collector-extension/test/collector-extension-test.js index 0316cc32ff8354fbef999e470af41501aeab3cfe..167fa1bf07f5292d145e627cc362a117481086fe 100644 --- a/packages/collector-extension/test/collector-extension-test.js +++ b/packages/collector-extension/test/collector-extension-test.js @@ -418,7 +418,7 @@ describe('collector extension', () => { it('should collect files without running command if only scan key is specified', async () => { const collectorConfig = { - scan: { dir: 'not-docs' }, + scan: { dir: 'other-docs' }, } await runScenario({ repoName: 'test-at-start-path', @@ -435,10 +435,48 @@ describe('collector extension', () => { }) }) + it('should rebase files if base key is set on scan', async () => { + const collectorConfig = { + scan: { dir: 'code', base: 'modules/extend/examples' }, + } + await runScenario({ + repoName: 'test-at-start-path', + startPath: 'docs', + collectorConfig, + before: (contentAggregate) => { + expect(contentAggregate).to.have.lengthOf(1) + expect(contentAggregate[0].files).to.be.empty() + }, + after: (contentAggregate) => { + expect(contentAggregate[0].files).to.have.lengthOf(1) + expect(contentAggregate[0].files[0].path).to.equal('modules/extend/examples/extended-pdf-converter.rb') + }, + }) + }) + + it('should drop leading / on value of base key', async () => { + const collectorConfig = { + scan: { dir: 'code', base: '/modules/extend/examples' }, + } + await runScenario({ + repoName: 'test-at-start-path', + startPath: 'docs', + collectorConfig, + before: (contentAggregate) => { + expect(contentAggregate).to.have.lengthOf(1) + expect(contentAggregate[0].files).to.be.empty() + }, + after: (contentAggregate) => { + expect(contentAggregate[0].files).to.have.lengthOf(1) + expect(contentAggregate[0].files[0].path).to.equal('modules/extend/examples/extended-pdf-converter.rb') + }, + }) + }) + it('should collect files from multiple scan dirs', async () => { const collectorConfig = { run: { command: 'node .gen-start-page.js', dir: '.' }, - scan: [{ dir: './build' }, { dir: 'not-docs' }], + scan: [{ dir: './build' }, { dir: 'other-docs' }], } await runScenario({ repoName: 'test-at-start-path', diff --git a/packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb b/packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb new file mode 100644 index 0000000000000000000000000000000000000000..bc6a9252d1c7d24331b277375f4203cf74a8d609 --- /dev/null +++ b/packages/collector-extension/test/fixtures/test-at-start-path/code/extended-pdf-converter.rb @@ -0,0 +1,5 @@ +class ExtendedPDFConverter < (Asciidoctor::Converter.for 'pdf') + register_for 'pdf' + + # overrides go here +end diff --git a/packages/collector-extension/test/fixtures/test-at-start-path/not-docs/modules/ROOT/pages/outside-start-path.adoc b/packages/collector-extension/test/fixtures/test-at-start-path/other-docs/modules/ROOT/pages/outside-start-path.adoc similarity index 100% rename from packages/collector-extension/test/fixtures/test-at-start-path/not-docs/modules/ROOT/pages/outside-start-path.adoc rename to packages/collector-extension/test/fixtures/test-at-start-path/other-docs/modules/ROOT/pages/outside-start-path.adoc