Fix workspace policy loading
This commit is contained in:
@@ -50,23 +50,44 @@ async function ensureWorkspaceSelectionPolicy(): Promise<WorkspacePreference> {
|
||||
const workspaceId = preferences.workspaceId;
|
||||
if (!workspaceId) return preferences;
|
||||
workspacePolicyGate.beginSummary(workspaceId);
|
||||
let workspace;
|
||||
let workspaces: Awaited<ReturnType<typeof listWorkspaces>>;
|
||||
try {
|
||||
workspace = (await listWorkspaces()).find((candidate) => candidate.id === workspaceId);
|
||||
workspaces = await listWorkspaces();
|
||||
} catch {
|
||||
if (workspacePreferences.load().workspaceId !== workspaceId) continue;
|
||||
workspacePolicyGate.rejectSummary(workspaceId);
|
||||
throw new WorkspaceSelectionError(WORKSPACE_SUMMARY_ERROR);
|
||||
}
|
||||
if (workspacePreferences.load().workspaceId !== workspaceId) continue;
|
||||
if (workspace && !workspace.revision) {
|
||||
const workspace = workspaces.find((candidate) => candidate.id === workspaceId);
|
||||
if (!workspace) {
|
||||
if (workspaces.length === 0) {
|
||||
workspacePolicyGate.allowLegacy(workspaceId);
|
||||
return workspacePreferences.load();
|
||||
}
|
||||
let installationDefault: string | undefined;
|
||||
try {
|
||||
installationDefault = (await getSettings()).workspace;
|
||||
} catch {
|
||||
if (workspacePreferences.load().workspaceId !== workspaceId) continue;
|
||||
workspacePolicyGate.rejectSummary(workspaceId);
|
||||
throw new WorkspaceSelectionError(WORKSPACE_SUMMARY_ERROR);
|
||||
}
|
||||
if (workspacePreferences.load().workspaceId !== workspaceId) continue;
|
||||
const replacement = workspaces.find(
|
||||
(candidate) => candidate.id === installationDefault && candidate.revision,
|
||||
) ?? workspaces.find((candidate) => candidate.revision);
|
||||
if (!replacement) {
|
||||
workspacePolicyGate.reject(workspaceId);
|
||||
throw new WorkspaceSelectionError(WORKSPACE_POLICY_ERROR);
|
||||
}
|
||||
workspacePreferences.save({ ...preferences, workspaceId: replacement.id });
|
||||
continue;
|
||||
}
|
||||
if (!workspace.revision) {
|
||||
workspacePolicyGate.reject(workspaceId);
|
||||
throw new WorkspaceSelectionError(WORKSPACE_POLICY_ERROR);
|
||||
}
|
||||
if (!workspace?.revision) {
|
||||
workspacePolicyGate.allowLegacy(workspaceId);
|
||||
return workspacePreferences.load();
|
||||
}
|
||||
workspacePolicyGate.select(workspaceId);
|
||||
const outcome = await Promise.race([
|
||||
getWorkspace(workspaceId).then(
|
||||
|
||||
Reference in New Issue
Block a user