Skip to content

Commit

Permalink
fix(core): improve touched projects locator performance
Browse files Browse the repository at this point in the history
  • Loading branch information
FrozenPandaz committed May 1, 2023
1 parent c51e6d5 commit 030e559
Showing 1 changed file with 34 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
import {
DeletedFileChange,
isDeletedFileChange,
WholeFileChange,
} from '../../file-utils';
import { JsonChange } from '../../../utils/json-diff';
import { TouchedProjectLocator } from '../affected-project-graph-models';
import minimatch = require('minimatch');
import {
Expand All @@ -12,40 +6,42 @@ import {
} from '../../../config/workspaces';
import { workspaceRoot } from '../../../utils/workspace-root';
import { getNxRequirePaths } from '../../../utils/installation-directory';
import { join } from 'path';
import { existsSync } from 'fs';

export const getTouchedProjectsFromProjectGlobChanges: TouchedProjectLocator<
WholeFileChange | JsonChange | DeletedFileChange
> = async (touchedFiles, projectGraphNodes, nxJson): Promise<string[]> => {
const pluginGlobPatterns = await getGlobPatternsFromPluginsAsync(
nxJson,
getNxRequirePaths(),
workspaceRoot
);
const workspacesGlobPatterns =
getGlobPatternsFromPackageManagerWorkspaces(workspaceRoot) || [];
export const getTouchedProjectsFromProjectGlobChanges: TouchedProjectLocator =
async (touchedFiles, projectGraphNodes, nxJson): Promise<string[]> => {
const pluginGlobPatterns = await getGlobPatternsFromPluginsAsync(
nxJson,
getNxRequirePaths(),
workspaceRoot
);
const workspacesGlobPatterns =
getGlobPatternsFromPackageManagerWorkspaces(workspaceRoot) || [];

const patterns = [
'**/project.json',
...pluginGlobPatterns,
...workspacesGlobPatterns,
];
const combinedGlobPattern =
patterns.length === 1 ? '**/project.json' : '{' + patterns.join(',') + '}';
const touchedProjects = new Set<string>();
for (const touchedFile of touchedFiles) {
const isProjectFile = minimatch(touchedFile.file, combinedGlobPattern);
if (isProjectFile) {
if (
touchedFile.getChanges().some((change) => isDeletedFileChange(change))
) {
// If any project has been deleted, we must assume all projects were affected
return Object.keys(projectGraphNodes);
}
const patterns = [
'**/project.json',
...pluginGlobPatterns,
...workspacesGlobPatterns,
];
const combinedGlobPattern =
patterns.length === 1
? '**/project.json'
: '{' + patterns.join(',') + '}';
const touchedProjects = new Set<string>();
for (const touchedFile of touchedFiles) {
const isProjectFile = minimatch(touchedFile.file, combinedGlobPattern);
if (isProjectFile) {
// If the file no longer exists on disk, then it was deleted
if (!existsSync(join(workspaceRoot, touchedFile.file))) {
// If any project has been deleted, we must assume all projects were affected
return Object.keys(projectGraphNodes);
}

// Modified project config files are under a project's root, and implicitly
// mark it as affected. Thus, we don't need to handle it here.
// Modified project config files are under a project's root, and implicitly
// mark it as affected. Thus, we don't need to handle it here.
}
}
}

return Array.from(touchedProjects);
};
return Array.from(touchedProjects);
};

0 comments on commit 030e559

Please sign in to comment.