diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 39bc5b41ab823a05fdeffc1643725d2296157021..3c7a7ef427127b1ccb38c038ef5c2ff6eaa7a704 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -6,6 +6,12 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi == Unreleased +=== Added + +* set `src.origin` property on file imported by scan action (#2) +* set `src.scanned` property on file imported by scan action (#2) +* reassign `src.abspath` property on file imported from temporary worktree to worktree-relative path + === Fixed * quote value of `process.execPath` in modified command string diff --git a/packages/collector-extension/lib/index.js b/packages/collector-extension/lib/index.js index 263156eb2bd7e58f7db5fea627c89631ce7f4c45..2bcfd1ecf035497272c7ef1520dac01529ceac09 100644 --- a/packages/collector-extension/lib/index.js +++ b/packages/collector-extension/lib/index.js @@ -27,7 +27,8 @@ module.exports.register = function () { const gitCache = {} for (const componentVersionBucket of contentAggregate) { const { files: filesInBucket, origins = [] } = componentVersionBucket - for (const { url, gitdir, refname, reftype, remote, worktree, startPath, descriptor } of origins) { + for (const origin of origins) { + const { url, gitdir, refname, reftype, remote, worktree, startPath, descriptor } = origin const collectorConfig = descriptor?.ext?.collector || [] if (Array.isArray(collectorConfig) && !collectorConfig.length) continue const worktreeDir = worktree || ospath.join(cacheDir, generateWorktreeFolderName({ url, gitdir, worktree })) @@ -92,6 +93,10 @@ module.exports.register = function () { } else if ((existingFile = filesInBucket.find(({ path: path_ }) => path_ === relpath))) { Object.assign(existingFile, { contents: file.contents, stat: file.stat }) } else { + const src = file.src + const scannedRelpath = src.abspath.substr(worktreeDir.length + 1) + Object.assign(src, { origin, scanned: posixify ? posixify(scannedRelpath) : scannedRelpath }) + if (!worktree) Object.assign(src, { realpath: src.abspath, abspath: src.scanned }) filesInBucket.push(file) } } diff --git a/packages/collector-extension/test/collector-extension-test.js b/packages/collector-extension/test/collector-extension-test.js index 88a9c7e3d5637e1d1f550d9b4f5f89055973f909..1bb8733c81065691a3a54ef01f547fccca435175 100644 --- a/packages/collector-extension/test/collector-extension-test.js +++ b/packages/collector-extension/test/collector-extension-test.js @@ -180,19 +180,83 @@ describe('collector extension', () => { expect(contentAggregate).to.have.lengthOf(1) expect(contentAggregate[0].files).to.be.empty() }, + after: (contentAggregate) => { + const bucket = contentAggregate[0] + const files = bucket.files + const expectedScanned = 'build/modules/ROOT/pages/index.adoc' + const expectedRealpath = ospath.join(getCollectorWorktree(bucket.origins[0]), expectedScanned) + expect(files).to.have.lengthOf(1) + expect(files[0]).to.have.property('stat') + expect(files[0].src).to.eql({ + path: 'modules/ROOT/pages/index.adoc', + basename: 'index.adoc', + stem: 'index', + extname: '.adoc', + abspath: expectedScanned, + realpath: expectedRealpath, + scanned: expectedScanned, + origin: contentAggregate[0].origins[0], + }) + }, + }) + }) + + it('should populate properties of file collected from start path in temporary worktree', async () => { + const collectorConfig = { + run: { command: 'node .gen-docs-start-page.js' }, + scan: { dir: 'build/docs' }, + } + await runScenario({ + repoName: 'test-at-start-path', + startPath: 'docs', + collectorConfig, + after: (contentAggregate) => { + const bucket = contentAggregate[0] + const files = bucket.files + const expectedScanned = 'build/docs/modules/ROOT/pages/index.adoc' + const expectedRealpath = ospath.join(getCollectorWorktree(bucket.origins[0]), expectedScanned) + expect(files).to.have.lengthOf(1) + expect(files[0].path).to.equal('modules/ROOT/pages/index.adoc') + expect(files[0].src).to.eql({ + path: 'modules/ROOT/pages/index.adoc', + basename: 'index.adoc', + stem: 'index', + extname: '.adoc', + abspath: expectedScanned, + realpath: expectedRealpath, + scanned: expectedScanned, + origin: contentAggregate[0].origins[0], + }) + }, + }) + }) + + it('should populate properties of file collected from concrete worktree', async () => { + const collectorConfig = { + run: { command: 'node .gen-start-page.js' }, + scan: { dir: 'build' }, + } + await runScenario({ + repoName: 'test-at-root', + collectorConfig, + local: true, + 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) - const expectedAbsPath = ospath.join( - getCollectorWorktree(contentAggregate[0].origins[0]), - 'build/modules/ROOT/pages/index.adoc' - ) + const expectedScanned = 'build/modules/ROOT/pages/index.adoc' + const expectedAbspath = ospath.join(contentAggregate[0].origins[0].worktree, expectedScanned) expect(contentAggregate[0].files[0]).to.have.property('stat') expect(contentAggregate[0].files[0].src).to.eql({ path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', extname: '.adoc', - abspath: expectedAbsPath, + abspath: expectedAbspath, + scanned: expectedScanned, + origin: contentAggregate[0].origins[0], }) }, }) @@ -275,6 +339,7 @@ describe('collector extension', () => { expect(contentAggregate[0].files[0].contents.toString()).to.equal(expectedContents + '\n') expect(contentAggregate[0].files[0].stat).to.not.equal(originalStat) expect(contentAggregate[0].files[0].stat.size).to.not.equal(originalStat.size) + expect(contentAggregate[0].files[0].src).to.not.have.property('scanned') }, }) }) @@ -631,7 +696,7 @@ describe('collector extension', () => { }, after: (contentAggregate) => { expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].src.abspath.startsWith(getUserCacheDir('antora-test'))).to.be.true() + expect(contentAggregate[0].files[0].src.realpath.startsWith(getUserCacheDir('antora-test'))).to.be.true() }, }) }) @@ -698,12 +763,12 @@ describe('collector extension', () => { branches: ['other'], after: (contentAggregate) => { const bucket = contentAggregate[0] - const expectedAbsPath = ospath.join( + const expectedRealpath = ospath.join( getCollectorWorktree(bucket.origins[0]), 'build/modules/ROOT/pages/index.adoc' ) expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].src.abspath).to.equal(expectedAbsPath) + expect(bucket.files[0].src.realpath).to.equal(expectedRealpath) }, }) }) @@ -725,12 +790,12 @@ describe('collector extension', () => { expect(contentAggregate).to.have.lengthOf(2) contentAggregate.forEach((bucket) => { expect(bucket.origins[0].refname).to.be.oneOf(['v1.0.x', 'v2.0.x']) - const expectedAbsPath = ospath.join( + const expectedRealpath = ospath.join( getCollectorWorktree(bucket.origins[0]), 'build/modules/ROOT/pages/index.adoc' ) expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].src.abspath).to.equal(expectedAbsPath) + expect(bucket.files[0].src.realpath).to.equal(expectedRealpath) }) }, }) @@ -777,12 +842,12 @@ describe('collector extension', () => { expect(contentAggregate).to.have.lengthOf(1) const bucket = contentAggregate[0] expect(bucket.version).to.equal('1.0.1') - const expectedAbsPath = ospath.join( + const expectedRealpath = ospath.join( getCollectorWorktree(bucket.origins[0]), 'build/modules/ROOT/pages/v1.0.1-release.adoc' ) expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].src.abspath).to.equal(expectedAbsPath) + expect(bucket.files[0].src.realpath).to.equal(expectedRealpath) }, }) })