diff --git a/v1/lib/server/versionFallback.js b/v1/lib/server/versionFallback.js index 49fb8f431f..914325fb54 100644 --- a/v1/lib/server/versionFallback.js +++ b/v1/lib/server/versionFallback.js @@ -76,9 +76,6 @@ files.forEach(file => { ); } - if (!(metadata.original_id in available)) { - available[metadata.original_id] = new Set(); - } // The version will be between "version-" and "-" // e.g. version-1.0.0-beta.2-doc1 => 1.0.0-beta.2 // e.g. version-1.0.0-doc2 => 1.0.0 @@ -87,6 +84,19 @@ files.forEach(file => { metadata.id.indexOf('version-') + 8, // version- is 8 characters metadata.id.lastIndexOf(`-${metadata.original_id}`), ); + + // the original_id should be namespaced according to subdir to allow duplicate id in different subfolder + const subDir = utils.getSubDir( + file, + path.join(versionFolder, `version-${version}`), + ); + if (subDir) { + metadata.original_id = `${subDir}/${metadata.original_id}`; + } + + if (!(metadata.original_id in available)) { + available[metadata.original_id] = new Set(); + } available[metadata.original_id].add(version); if (!(version in versionFiles)) { diff --git a/v1/lib/version.js b/v1/lib/version.js index fa6dee10dd..5b14130844 100755 --- a/v1/lib/version.js +++ b/v1/lib/version.js @@ -115,15 +115,15 @@ files.forEach(file => { metadata.title = metadata.id; } - if (!versionFallback.diffLatestDoc(file, metadata.id)) { + const docsDir = path.join(CWD, '../', readMetadata.getDocsPath()); + const subDir = utils.getSubDir(file, docsDir); + const originalId = subDir ? `${subDir}/${metadata.id}` : metadata.id; + if (!versionFallback.diffLatestDoc(file, originalId)) { return; } - metadata.original_id = metadata.id; - metadata.id = `version-${version}-${metadata.id}`; - - const docsDir = path.join(CWD, '../', readMetadata.getDocsPath()); - const subDir = utils.getSubDir(file, docsDir); + metadata.original_id = originalId; + metadata.id = `version-${version}-${originalId}`; const targetFile = subDir ? `${versionFolder}/${subDir}/${path.basename(file)}` : `${versionFolder}/${path.basename(file)}`;