From 0c9f350be574773896aeece1900cf6683c1e8632 Mon Sep 17 00:00:00 2001 From: Corwin Marsh Date: Fri, 24 Apr 2026 10:58:32 -0700 Subject: [PATCH 1/6] ci: Fix for race condition only presenting in ci occasionally --- src/commands/select.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/commands/select.ts b/src/commands/select.ts index acbd917..14bc17e 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -156,7 +156,11 @@ export async function select({ // Use setTimeout to ensure the editor content is updated setTimeout(() => { - const editorForSelection = vscode.window.activeTextEditor; + // Use the editor returned by showTextDocument instead of the global + // activeTextEditor. Opening/updating the side preview can briefly make + // another editor active, which makes the preview-by-default flow racey + // in CI and leaves the cursor on "../". + const editorForSelection = editor; if (editorForSelection) { // Find the line with the directory name (with trailing slash) const docText = editorForSelection.document.getText(); From 2d44dc7487ee515e9f7a5a6673407c2892fcd603 Mon Sep 17 00:00:00 2001 From: Corwin Marsh Date: Fri, 24 Apr 2026 11:06:51 -0700 Subject: [PATCH 2/6] ci: more race condition fixes --- src/commands/preview.ts | 7 +++++-- src/commands/select.ts | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/commands/preview.ts b/src/commands/preview.ts index 070ce88..84a31f7 100644 --- a/src/commands/preview.ts +++ b/src/commands/preview.ts @@ -11,9 +11,12 @@ import { oilPreviewProvider } from "../providers/providers"; import { logger } from "../logger"; import { isUpdatePreviewDisabled } from "./disableUpdatePreview"; -export async function preview(overrideEnabled: boolean = false) { +export async function preview( + overrideEnabled: boolean = false, + editorOverride?: vscode.TextEditor +) { logger.trace("Previewing file or directory..."); - const activeEditor = vscode.window.activeTextEditor; + const activeEditor = editorOverride ?? vscode.window.activeTextEditor; if (!activeEditor) { vscode.window.showErrorMessage("No active editor found."); diff --git a/src/commands/select.ts b/src/commands/select.ts index 14bc17e..cffd9d2 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -197,7 +197,7 @@ export async function select({ } updateDisableUpdatePreview(false); if (getPreviewState().previewEnabled) { - preview(true); + preview(true, editorForSelection); } } }, 50); @@ -208,7 +208,7 @@ export async function select({ updateDisableUpdatePreview(false); // Manually update preview if enabled if (getPreviewState().previewEnabled) { - preview(true); + preview(true, editor); } }, 50); } From f35c431095fac7f78d938022051e28880ab1172a Mon Sep 17 00:00:00 2001 From: Corwin Marsh Date: Fri, 24 Apr 2026 11:11:17 -0700 Subject: [PATCH 3/6] ci: more preview ci fixes --- src/commands/preview.ts | 9 ++++++++- src/commands/select.ts | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/commands/preview.ts b/src/commands/preview.ts index 84a31f7..0e42ca4 100644 --- a/src/commands/preview.ts +++ b/src/commands/preview.ts @@ -61,8 +61,15 @@ export async function preview( targetPath = path.join(uriPathToDiskPath(currentFolderPath), fileName); } + await previewTargetPath(targetPath, overrideEnabled); +} + +export async function previewTargetPath( + targetPath: string, + overrideEnabled: boolean = false +) { if (!fs.existsSync(targetPath)) { - vscode.window.showErrorMessage(`"${fileName}" does not exist.`); + vscode.window.showErrorMessage(`"${path.basename(targetPath)}" does not exist.`); return; } diff --git a/src/commands/select.ts b/src/commands/select.ts index cffd9d2..2dafc74 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -14,7 +14,7 @@ import { updateDisableUpdatePreview } from "./disableUpdatePreview"; import { logger } from "../logger"; import { onDidSaveTextDocument } from "../handlers/onDidSaveTextDocument"; import { getPreviewState } from "../state/previewState"; -import { preview } from "./preview"; +import { preview, previewTargetPath } from "./preview"; const cursorInitChar = 5; // 5 characters for "/000 " @@ -197,7 +197,7 @@ export async function select({ } updateDisableUpdatePreview(false); if (getPreviewState().previewEnabled) { - preview(true, editorForSelection); + previewTargetPath(currentFileDiskPath, true); } } }, 50); From 96d25a02102a2d6956949b0c922c0262edec8ba5 Mon Sep 17 00:00:00 2001 From: Corwin Marsh Date: Fri, 24 Apr 2026 11:15:43 -0700 Subject: [PATCH 4/6] ci: fix for no active editor3 --- src/commands/select.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/select.ts b/src/commands/select.ts index 2dafc74..7c12c08 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -141,7 +141,7 @@ export async function select({ const editor = await vscode.window.showTextDocument(newDoc, { viewColumn: viewColumn || activeEditor.viewColumn, preview: false, - preserveFocus: activeEditor.document.isDirty, + preserveFocus: false, }); // Close the old document after the new one is shown (only if same column) From 4e866477de573659e4dedff7dd080f12b261e857 Mon Sep 17 00:00:00 2001 From: Corwin Marsh Date: Fri, 24 Apr 2026 11:20:29 -0700 Subject: [PATCH 5/6] ci: more ci failures --- src/commands/preview.ts | 15 +++++++++++++++ src/commands/select.ts | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/commands/preview.ts b/src/commands/preview.ts index 0e42ca4..3a14b49 100644 --- a/src/commands/preview.ts +++ b/src/commands/preview.ts @@ -187,6 +187,7 @@ async function previewDirectory(directoryPath: string) { const previewUri = vscode.Uri.parse( `${OIL_PREVIEW_SCHEME}://oil-preview/${previewName}` ); + const previousPreviewUri = getPreviewState().previewUri; // Write content to the virtual file oilPreviewProvider.writeFile(previewUri, Buffer.from(directoryContent)); @@ -213,6 +214,20 @@ async function previewDirectory(directoryPath: string) { }; setPreviewState(newPreviewState); + if (previousPreviewUri && previousPreviewUri.toString() !== previewUri.toString()) { + const previousPreviewTab = vscode.window.tabGroups.all + .flatMap((group) => group.tabs) + .find( + (tab) => + tab.input instanceof vscode.TabInputText && + tab.input.uri.toString() === previousPreviewUri.toString() + ); + if (previousPreviewTab) { + await vscode.window.tabGroups.close(previousPreviewTab); + } + oilPreviewProvider.delete(previousPreviewUri); + } + // Start listening for cursor movements if not already listening if (!getPreviewState().cursorListenerDisposable) { logger.trace("Starting cursor listener for preview updates..."); diff --git a/src/commands/select.ts b/src/commands/select.ts index 7c12c08..456d4c0 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -195,9 +195,12 @@ export async function select({ // Default to first line if not found editorForSelection.selection = new vscode.Selection(0, 0, 0, 0); } - updateDisableUpdatePreview(false); if (getPreviewState().previewEnabled) { - previewTargetPath(currentFileDiskPath, true); + previewTargetPath(currentFileDiskPath, true).finally(() => + updateDisableUpdatePreview(false) + ); + } else { + updateDisableUpdatePreview(false); } } }, 50); From 6ba167f25693ea0661818d0a86d6d065609233f3 Mon Sep 17 00:00:00 2001 From: Corwin Marsh Date: Fri, 24 Apr 2026 11:28:07 -0700 Subject: [PATCH 6/6] ci: add failure logs --- src/commands/select.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/commands/select.ts b/src/commands/select.ts index 456d4c0..31035f4 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -196,9 +196,14 @@ export async function select({ editorForSelection.selection = new vscode.Selection(0, 0, 0, 0); } if (getPreviewState().previewEnabled) { - previewTargetPath(currentFileDiskPath, true).finally(() => - updateDisableUpdatePreview(false) - ); + void previewTargetPath(currentFileDiskPath, true) + .catch((error) => { + logger.error( + "Failed to update preview after navigating up:", + error + ); + }) + .finally(() => updateDisableUpdatePreview(false)); } else { updateDisableUpdatePreview(false); } @@ -211,7 +216,12 @@ export async function select({ updateDisableUpdatePreview(false); // Manually update preview if enabled if (getPreviewState().previewEnabled) { - preview(true, editor); + void preview(true, editor).catch((error) => { + logger.error( + "Failed to update preview after entering directory:", + error + ); + }); } }, 50); }