Skip to content

Commit

Permalink
MDL-67949 grunt: normalise component paths
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewnicols committed Feb 18, 2020
1 parent 843cf97 commit d1a7806
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
6 changes: 4 additions & 2 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [];
Expand Down Expand Up @@ -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(/\/?$/, '/');
Expand Down
13 changes: 7 additions & 6 deletions GruntfileComponents.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
};
Expand All @@ -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 => {
Expand All @@ -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;
}
}
Expand Down

0 comments on commit d1a7806

Please sign in to comment.