Skip to content

Commit 7dd520d

Browse files
clean: Clean up messages to user (#146)
## Problem The logging of the removed folders did not account for folders that fell within the desired aged to delete but could not be removed because they are still in use. Thus they initial message about the number of folders found did not agree with the number actually deleted. ## Changes - Added a count of rejected deletions on the assumption it was because they are in use still. - modified the messaging to account for the rejected deletions - removed the number deleted logging from the index as no longer being informative <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced logging for folder deletion outcomes in the Sonar temporary folder removal process, providing clearer feedback on operation success. - **Bug Fixes** - Improved feedback mechanism for folder deletion, addressing visibility of successful and failed deletions. - **Documentation** - Added comments to clarify the purpose of functions related to temporary folders created by SonarLint. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 01746d1 commit 7dd520d

File tree

2 files changed

+31
-35
lines changed

2 files changed

+31
-35
lines changed

src/clean/clean.js

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,46 +75,56 @@ const removeTarget = async (name, regex, root = defaultTempPath) => {
7575
}
7676
};
7777

78-
7978
/**
79+
* Remove old temporary folders created by SonarLint
8080
*
8181
* @param {object} options
8282
* @param {string} options.root - over-ride sonarlint work folder path for testing
83-
* @param {number=} options.age
8483
* @param {object=} logger
8584
* @returns {Promise<number>} - number of folders removed
8685
*/
87-
const removeSonarTemp = async ({ root, age = 2 }, logger = console) => {
86+
const removeSonarTemp = async ({ root }, logger = console) => {
8887
const _root = root || realpathSync(join(process.env.HOME, '.sonarlint'));
89-
const now = Date.now();
90-
const DAY_MS = 86400000;
91-
let folders = [];
9288
try {
9389
await fsPromises.access(_root, constants.R_OK | constants.W_OK);
9490

95-
folders = await fsPromises.readdir(_root, { withFileTypes: true });
96-
const targetFolders = folders.filter(d => d.isDirectory() && (d.name.startsWith('.sonarlinttmp_') || d.name.startsWith('xodus-local-only')));
97-
const foldersToDelete = targetFolders.filter(async d => {
98-
const { ctimeMs } = await fsPromises.stat(join(_root, d.name)).catch(() => ({ ctimeMs: 0 }));
99-
const daysOld = Math.floor((now - ctimeMs) / DAY_MS);
100-
return daysOld >= age;
101-
});
91+
const folders = await fsPromises.readdir(_root, { withFileTypes: true });
92+
93+
const targetFolders = folders.filter(d =>
94+
d.isDirectory() &&
95+
(d.name.startsWith('.sonarlinttmp_') || d.name.startsWith('xodus-local-only')))
96+
;
10297

103-
logger.info(`Removing ${foldersToDelete.length} folders which are at least ${age} days ...`);
10498
const deleteFolders = await Promise.allSettled(
105-
foldersToDelete.map(d => remover(join(_root, d.name), { recursive: true })
106-
.then(() => `removed ${d.name}`)
107-
)
99+
targetFolders
100+
.map(d => remover(join(_root, d.name), { recursive: true })
101+
.then(() => `removed ${d.name}`)
102+
)
108103
);
109104

110-
return deleteFolders.filter(f => f.status === 'fulfilled').length;
105+
const busyFoldersCount = deleteFolders.filter(f => f.status === 'rejected').length;
106+
const deletedFoldersCount = deleteFolders.filter(f => f.status === 'fulfilled').length;
107+
108+
if(busyFoldersCount > 0 && deletedFoldersCount === 0) {
109+
logger.info(`All folders are still in use and could not be deleted`);
110+
}
111+
else if(busyFoldersCount > 0 && deletedFoldersCount > 0) {
112+
logger.info(`Removed ${deletedFoldersCount} folders, ${busyFoldersCount} folders are still in use`);
113+
}
114+
else if(busyFoldersCount === 0 && deletedFoldersCount > 0) {
115+
logger.info(`Removed ${deletedFoldersCount} folders`);
116+
}
117+
else {
118+
logger.info(`No folders to remove`);
119+
}
120+
121+
return deletedFoldersCount;
111122
}
112123
catch (err) {
113124
logger.error(`Error during sonar cleanup: ${err.message}`);
114125
return 0;
115126
}
116127

117-
118128
};
119129

120130
module.exports = {

src/clean/index.js

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ const sonar = {
1818
, type: 'string'
1919
, default: join(process.env.HOME, '.sonarlint')
2020
})
21-
.option('age', {
22-
alias: 'a'
23-
, describe: 'how many days to keep. Must be an integer > 1'
24-
, type: 'number'
25-
, default: 2
26-
})
2721
.option('logger', {
2822
type: 'object'
2923
, default: console
@@ -35,18 +29,10 @@ const sonar = {
3529
}
3630
throw new Error('root path not found');
3731
})
38-
.check(argv => {
39-
// eslint-disable-next-line no-magic-numbers
40-
if(argv.age > 1 && argv.age <= 100 && Number.isInteger(argv.age)) {
41-
return true;
42-
}
43-
throw new Error('age must be > 1');
44-
})
4532
, handler: async (args) => {
46-
const { root, age, logger } = args;
33+
const { root, logger } = args;
4734
try {
48-
const result = await removeSonarTemp({ root, age }, logger);
49-
logger.info(`sonar cleanup completed, ${result} folders removed`);
35+
await removeSonarTemp({ root }, logger);
5036
}
5137
catch (err) {
5238
logger.error(err.message);

0 commit comments

Comments
 (0)