MDL-67949 grunt: normalise component paths

This commit is contained in:
Andrew Nicols 2020-02-13 13:12:20 +08:00
parent 843cf97bf6
commit d1a7806094
2 changed files with 11 additions and 8 deletions

View File

@ -197,7 +197,9 @@ module.exports = function(grunt) {
files = grunt.option('files').split(',');
}
const inAMD = path.basename(cwd) == 'amd';
// If the cwd is the amd directory in the current component then it will be empty.
// If the cwd is a child of the component's AMD directory, the relative directory will not start with ..
const inAMD = !path.relative(`${componentDirectory}/amd`, cwd).startsWith('..');
// Globbing pattern for matching all AMD JS source files.
let amdSrc = [];
@ -248,7 +250,7 @@ module.exports = function(grunt) {
const nodes = xpath.select("/libraries/library/location/text()", doc);
nodes.forEach(function(node) {
let lib = path.join(dirname, node.toString());
let lib = path.posix.join(dirname, node.toString());
if (grunt.file.isDir(lib)) {
// Ensure trailing slash on dirs.
lib = lib.replace(/\/?$/, '/');

View File

@ -131,9 +131,11 @@ const getYuiSrcGlobList = relativeTo => {
*/
const getThirdPartyLibsList = relativeTo => {
const fs = require('fs');
const path = require('path');
return fetchComponentData().pathList
.map(componentPath => componentPath.replace(relativeTo, '') + '/thirdpartylibs.xml')
.map(componentPath => path.relative(relativeTo, componentPath) + '/thirdpartylibs.xml')
.map(componentPath => componentPath.replace(/\\/g, '/'))
.filter(path => fs.existsSync(path))
.sort();
};
@ -157,7 +159,7 @@ const getComponentFromPath = path => {
/**
* Check whether the supplied path, relative to the Gruntfile.js, is in a known component.
*
* @param {String} checkPath The path to check
* @param {String} checkPath The path to check. This can be with either Windows, or Linux directory separators.
* @returns {String|null}
*/
const getOwningComponentDirectory = checkPath => {
@ -167,10 +169,9 @@ const getOwningComponentDirectory = checkPath => {
// This ensures that components which are within the directory of another component match first.
const pathList = Object.keys(fetchComponentData().components).sort().reverse();
for (const componentPath of pathList) {
if (checkPath === componentPath) {
return componentPath;
}
if (checkPath.startsWith(componentPath + path.sep)) {
// If the componentPath is the directory being checked, it will be empty.
// If the componentPath is a parent of the directory being checked, the relative directory will not start with ..
if (!path.relative(componentPath, checkPath).startsWith('..')) {
return componentPath;
}
}