Skip to content

Commit a9144a7

Browse files
logonoffrgrunber
authored andcommitted
Clean old autogenerated globalStorage folders (#2597)
Signed-off-by: logonoff <[email protected]>
1 parent bf05afb commit a9144a7

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

src/extension.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { ClientErrorHandler } from './clientErrorHandler';
1414
import { Commands, CommandTitle } from './commands';
1515
import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api';
1616
import * as fileEventHandler from './fileEventHandler';
17-
import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64 } from './javaServerStarter';
17+
import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64, startedFromSources } from './javaServerStarter';
1818
import { initializeLogFile, logger } from './log';
1919
import { cleanupLombokCache } from "./lombokSupport";
2020
import { markdownPreviewProvider } from "./markdownPreviewProvider";
@@ -30,7 +30,7 @@ import { snippetCompletionProvider } from './snippetCompletionProvider';
3030
import { JavaClassEditorProvider } from './javaClassEditor';
3131
import { StandardLanguageClient } from './standardLanguageClient';
3232
import { SyntaxLanguageClient } from './syntaxLanguageClient';
33-
import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause } from './utils';
33+
import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause, getVersion } from './utils';
3434
import glob = require('glob');
3535
import { Telemetry } from './telemetry';
3636
import { getMessage } from './errorUtils';
@@ -159,6 +159,10 @@ export async function activate(context: ExtensionContext): Promise<ExtensionAPI>
159159

160160
cleanJavaWorkspaceStorage();
161161

162+
if (!startedFromSources()) { // Dev mode: version may not match package.json, deleting the in-use folder
163+
cleanOldGlobalStorage(context);
164+
}
165+
162166
// https://github.com/redhat-developer/vscode-java/issues/3484
163167
if (process.platform === 'darwin' && process.arch === 'x64') {
164168
try {
@@ -1101,6 +1105,26 @@ async function cleanJavaWorkspaceStorage() {
11011105
}
11021106
}
11031107

1108+
async function cleanOldGlobalStorage(context: ExtensionContext) {
1109+
const currentVersion = getVersion(context.extensionPath);
1110+
const globalStoragePath = context.globalStorageUri?.fsPath; // .../Code/User/globalStorage/redhat.java
1111+
1112+
ensureExists(globalStoragePath);
1113+
1114+
// delete folders in .../User/globalStorage/redhat.java that are not named the current version
1115+
fs.promises.readdir(globalStoragePath).then(async (files) => {
1116+
await Promise.all(files.map(async (file) => {
1117+
const currentPath = path.join(globalStoragePath, file);
1118+
const stat = await fs.promises.stat(currentPath);
1119+
1120+
if (stat.isDirectory() && file !== currentVersion) {
1121+
logger.info(`Removing old folder in globalStorage : ${file}`);
1122+
deleteDirectory(currentPath);
1123+
}
1124+
}));
1125+
});
1126+
}
1127+
11041128
export function registerCodeCompletionTelemetryListener() {
11051129
apiManager.getApiInstance().onDidRequestEnd((traceEvent: TraceEvent) => {
11061130
if (traceEvent.type === CompletionRequest.method) {

src/javaServerStarter.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { logger } from './log';
1111
import { addLombokParam, isLombokSupportEnabled } from './lombokSupport';
1212
import { RequirementsData } from './requirements';
1313
import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings';
14-
import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } from './utils';
14+
import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion } from './utils';
1515
import { log } from 'console';
1616

1717
// eslint-disable-next-line no-var
@@ -254,15 +254,7 @@ export function getSharedIndexCache(context: ExtensionContext): string {
254254

255255
function resolveConfiguration(context, configDir) {
256256
ensureExists(context.globalStoragePath);
257-
const extensionPath = path.resolve(context.extensionPath, "package.json");
258-
const packageFile = JSON.parse(fs.readFileSync(extensionPath, 'utf8'));
259-
let version;
260-
if (packageFile) {
261-
version = packageFile.version;
262-
}
263-
else {
264-
version = '0.0.0';
265-
}
257+
const version = getVersion(context.extensionPath);
266258
let configuration = path.resolve(context.globalStoragePath, version);
267259
ensureExists(configuration);
268260
configuration = path.resolve(configuration, configDir);
@@ -288,7 +280,7 @@ function startedInDebugMode(): boolean {
288280
return hasDebugFlag(args);
289281
}
290282

291-
function startedFromSources(): boolean {
283+
export function startedFromSources(): boolean {
292284
return process.env['DEBUG_VSCODE_JAVA'] === 'true';
293285
}
294286

src/utils.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,13 @@ export function resolveActualCause(callstack: any): any {
316316

317317
return callstack;
318318
}
319+
320+
export function getVersion(extensionPath: string): string {
321+
const packagePath = path.resolve(extensionPath, "package.json");
322+
const packageFile = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
323+
if (packageFile) {
324+
return packageFile.version;
325+
}
326+
327+
return '0.0.0';
328+
}

0 commit comments

Comments
 (0)