diff --git a/README.md b/README.md index 45525f7..cabcd5d 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ If a wildcard pattern is used, the path hierarchy will be preserved after the fi ∟ some/directory/foo2.txt ∟ other/directory/foo1.txt ``` -If multiple paths are provided as input, the least common ancestor of all the search paths will be used as the root directory of the artifact. Exclude characters do not effect the directory structure. +If multiple paths are provided as input, the least common ancestor of all the search paths will be used as the root directory of the artifact. Exclude paths do not effect the directory structure. Relative and absolute file paths are both allowed. Relative paths are rooted against the current working directory. Paths that begin with a wildcard character should be quoted to avoid being interpreted as YAML aliases. diff --git a/dist/index.js b/dist/index.js index 2aa335b..137fdf7 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6251,7 +6251,7 @@ function getMultiPathLCA(searchPaths) { // split each of the search paths using the platform specific separator for (const searchPath of searchPaths) { core_1.debug(`Using search path ${searchPath}`); - const splitSearchPath = searchPath.split(path.sep); + const splitSearchPath = path.normalize(searchPath).split(path.sep); // keep track of the smallest path length so that we don't accidentally later go out of bounds smallestPathLength = Math.min(smallestPathLength, splitSearchPath.length); splitPaths.push(splitSearchPath); @@ -6263,21 +6263,21 @@ function getMultiPathLCA(searchPaths) { let splitIndex = 0; // function to check if the paths are the same at a specific index function isPathTheSame() { - const common = splitPaths[0][splitIndex]; + const compare = splitPaths[0][splitIndex]; for (let i = 1; i < splitPaths.length; i++) { - if (common !== splitPaths[i][splitIndex]) { + if (compare !== splitPaths[i][splitIndex]) { // a non-common index has been reached return false; } } - // if all are the same, add to the end result & increment the index - commonPaths.push(common); - splitIndex++; return true; } // Loop over all the search paths until there is a non-common ancestor or we go out of bounds while (splitIndex < smallestPathLength) { if (!isPathTheSame()) { + // if all are the same, add to the end result & increment the index + commonPaths.push(splitPaths[0][splitIndex]); + splitIndex++; break; } } @@ -6306,7 +6306,7 @@ function findFilesToUpload(searchPath, globOptions) { if (searchPaths.length > 1) { core_1.info(`Multiple search paths detected. Calculating the least common ancestor of all paths`); const lcaSearchPath = getMultiPathLCA(searchPaths); - core_1.info(`The least common ancestor is ${lcaSearchPath} This will be the root directory of the artifact`); + core_1.info(`The least common ancestor is ${lcaSearchPath}. This will be the root directory of the artifact`); return { filesToUpload: searchResults, rootDirectory: lcaSearchPath diff --git a/src/search.ts b/src/search.ts index 6737c41..bfc21fa 100644 --- a/src/search.ts +++ b/src/search.ts @@ -38,7 +38,8 @@ function getMultiPathLCA(searchPaths: string[]): string { // split each of the search paths using the platform specific separator for (const searchPath of searchPaths) { debug(`Using search path ${searchPath}`) - const splitSearchPath = searchPath.split(path.sep) + + const splitSearchPath = path.normalize(searchPath).split(path.sep) // keep track of the smallest path length so that we don't accidentally later go out of bounds smallestPathLength = Math.min(smallestPathLength, splitSearchPath.length) @@ -53,26 +54,25 @@ function getMultiPathLCA(searchPaths: string[]): string { let splitIndex = 0 // function to check if the paths are the same at a specific index function isPathTheSame(): boolean { - const common = splitPaths[0][splitIndex] + const compare = splitPaths[0][splitIndex] for (let i = 1; i < splitPaths.length; i++) { - if (common !== splitPaths[i][splitIndex]) { + if (compare !== splitPaths[i][splitIndex]) { // a non-common index has been reached return false } } - // if all are the same, add to the end result & increment the index - commonPaths.push(common) - splitIndex++ return true } // Loop over all the search paths until there is a non-common ancestor or we go out of bounds while (splitIndex < smallestPathLength) { if (!isPathTheSame()) { + // if all are the same, add to the end result & increment the index + commonPaths.push(splitPaths[0][splitIndex]) + splitIndex++ break } } - return path.join(...commonPaths) } @@ -111,7 +111,7 @@ export async function findFilesToUpload( ) const lcaSearchPath = getMultiPathLCA(searchPaths) info( - `The least common ancestor is ${lcaSearchPath} This will be the root directory of the artifact` + `The least common ancestor is ${lcaSearchPath}. This will be the root directory of the artifact` ) return {