Skip to content

Commit ef24086

Browse files
snjezafbricon
authored andcommitted
Run from Read-Only Location - fix dev mode
Signed-off-by: Snjezana Peco <[email protected]>
1 parent ab68e0e commit ef24086

File tree

3 files changed

+40
-23
lines changed

3 files changed

+40
-23
lines changed

src/extension.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import * as sourceAction from './sourceAction';
2121
import * as refactorAction from './refactorAction';
2222
import * as pasteAction from './pasteAction';
2323
import * as net from 'net';
24-
import { getJavaConfiguration } from './utils';
24+
import { getJavaConfiguration, deleteDirectory } from './utils';
2525
import { onConfigurationChange, excludeProjectSettingsFiles } from './settings';
2626
import { logger, initializeLogFile } from './log';
2727
import glob = require('glob');
@@ -621,20 +621,6 @@ async function cleanWorkspace(workspacePath) {
621621
});
622622
}
623623

624-
function deleteDirectory(dir) {
625-
if (fs.existsSync(dir)) {
626-
fs.readdirSync(dir).forEach((child) => {
627-
const entry = path.join(dir, child);
628-
if (fs.lstatSync(entry).isDirectory()) {
629-
deleteDirectory(entry);
630-
} else {
631-
fs.unlinkSync(entry);
632-
}
633-
});
634-
fs.rmdirSync(dir);
635-
}
636-
}
637-
638624
function openServerLogFile(workspacePath, column: ViewColumn = ViewColumn.Active): Thenable<boolean> {
639625
const serverLogFile = path.join(workspacePath, '.metadata', '.log');
640626
return openLogFile(serverLogFile, 'Could not open Java Language Server log file', column);

src/javaServerStarter.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { StreamInfo, Executable, ExecutableOptions } from 'vscode-languageclient
88
import { RequirementsData } from './requirements';
99
import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag } from './settings';
1010
import { logger } from './log';
11-
import { getJavaConfiguration } from './utils';
11+
import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } from './utils';
1212
import { workspace, ExtensionContext } from 'vscode';
1313

1414
declare var v8debug;
@@ -137,19 +137,20 @@ function resolveConfiguration(context, configDir) {
137137
ensureExists(configuration);
138138
const configIniName = "config.ini";
139139
const configIni = path.resolve(configuration, configIniName);
140+
const ini = path.resolve(__dirname, '../server', configDir, configIniName);
140141
if (!fs.existsSync(configIni)) {
141-
const ini = path.resolve(__dirname, '../server', configDir, configIniName);
142142
fs.copyFileSync(ini, configIni);
143+
} else {
144+
const configIniTime = getTimestamp(configIni);
145+
const iniTime = getTimestamp(ini);
146+
if (iniTime > configIniTime) {
147+
deleteDirectory(configuration);
148+
resolveConfiguration(context, configDir);
149+
}
143150
}
144151
return configuration;
145152
}
146153

147-
function ensureExists(folder) {
148-
if (!fs.existsSync(folder)) {
149-
fs.mkdirSync(folder);
150-
}
151-
}
152-
153154
function startedInDebugMode(): boolean {
154155
const args = (process as any).execArgv;
155156
if (args) {

src/utils.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,37 @@
11
'use strict';
22

3+
import * as fs from 'fs';
4+
import * as path from 'path';
35
import { workspace, WorkspaceConfiguration } from 'vscode';
46

57
export function getJavaConfiguration(): WorkspaceConfiguration {
68
return workspace.getConfiguration('java');
79
}
10+
11+
export function deleteDirectory(dir) {
12+
if (fs.existsSync(dir)) {
13+
fs.readdirSync(dir).forEach((child) => {
14+
const entry = path.join(dir, child);
15+
if (fs.lstatSync(entry).isDirectory()) {
16+
deleteDirectory(entry);
17+
} else {
18+
fs.unlinkSync(entry);
19+
}
20+
});
21+
fs.rmdirSync(dir);
22+
}
23+
}
24+
25+
export function getTimestamp(file) {
26+
if (!fs.existsSync(file)) {
27+
return -1;
28+
}
29+
const stat = fs.statSync(file);
30+
return stat.mtimeMs;
31+
}
32+
33+
export function ensureExists(folder) {
34+
if (!fs.existsSync(folder)) {
35+
fs.mkdirSync(folder);
36+
}
37+
}

0 commit comments

Comments
 (0)