fix(vscode): compare workspace folders through the shared path helper
The add-folder dedup normalized the drive letter to uppercase on one side and compared it with Uri.fsPath, which VS Code lowercases again. On Windows an already-open folder therefore never matched and was re-added. Uses pathsEqualWithNormalizedDriveLetter so both sides normalize.
This commit is contained in:
@@ -10,7 +10,7 @@ import { credentialStatus, deleteCredential, importCursorCredential, normalizeCr
|
|||||||
import { getSessionActivitySnapshot } from './sessionActivityWatcher';
|
import { getSessionActivitySnapshot } from './sessionActivityWatcher';
|
||||||
import { getOpenCodeUpgradeStatus, upgradeManagedOpenCode } from './opencode-upgrade-runtime';
|
import { getOpenCodeUpgradeStatus, upgradeManagedOpenCode } from './opencode-upgrade-runtime';
|
||||||
import { buildDeferredRestartResponse } from './config-mutation-response';
|
import { buildDeferredRestartResponse } from './config-mutation-response';
|
||||||
import { normalizeWindowsDriveLetter } from './pathUtils';
|
import { normalizeWindowsDriveLetter, pathsEqualWithNormalizedDriveLetter } from './pathUtils';
|
||||||
import { resolveWorkspaceFolders } from './workspaceResolver';
|
import { resolveWorkspaceFolders } from './workspaceResolver';
|
||||||
import type { BridgeContext, BridgeResponse } from './bridge';
|
import type { BridgeContext, BridgeResponse } from './bridge';
|
||||||
|
|
||||||
@@ -608,10 +608,10 @@ export async function handleSystemBridgeMessage(
|
|||||||
}
|
}
|
||||||
const folders = vscode.workspace.workspaceFolders ?? [];
|
const folders = vscode.workspace.workspaceFolders ?? [];
|
||||||
const uri = vscode.Uri.file(normalizeWindowsDriveLetter(targetPath.trim()));
|
const uri = vscode.Uri.file(normalizeWindowsDriveLetter(targetPath.trim()));
|
||||||
// VS Code reports workspace folder paths with lowercase Windows drive
|
// `Uri.fsPath` lowercases the Windows drive letter again, so both sides
|
||||||
// letters (see pathUtils), so normalize both sides before comparing.
|
// have to go through the shared comparison (see pathUtils).
|
||||||
const alreadyAdded = folders.some(
|
const alreadyAdded = folders.some(
|
||||||
(folder) => normalizeWindowsDriveLetter(folder.uri.fsPath) === uri.fsPath,
|
(folder) => pathsEqualWithNormalizedDriveLetter(folder.uri.fsPath, uri.fsPath),
|
||||||
);
|
);
|
||||||
if (!alreadyAdded) {
|
if (!alreadyAdded) {
|
||||||
const updated = await vscode.workspace.updateWorkspaceFolders(folders.length, null, { uri });
|
const updated = await vscode.workspace.updateWorkspaceFolders(folders.length, null, { uri });
|
||||||
|
|||||||
Reference in New Issue
Block a user