Merge pull request #3665 from Tibsfox/fix/worktree-expected-condition-warnings
fix(gsd): suppress misleading ENOENT/EISDIR warnings in worktree operations
This commit is contained in:
commit
e87119e7e0
3 changed files with 51 additions and 6 deletions
|
|
@ -188,8 +188,10 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
|
|||
try {
|
||||
unlinkSync(file);
|
||||
} catch (err) {
|
||||
/* non-fatal — file may not exist */
|
||||
logWarning("worktree", `file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
|
||||
// ENOENT is expected — file may not exist (#3597)
|
||||
if ((err as NodeJS.ErrnoException).code !== "ENOENT") {
|
||||
logWarning("worktree", `file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -218,8 +220,11 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
|
|||
try {
|
||||
unlinkSync(join(basePath, f));
|
||||
} catch (err) {
|
||||
/* non-fatal */
|
||||
logWarning("worktree", `untracked file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
|
||||
// ENOENT/EISDIR are expected for already-removed or directory entries (#3597)
|
||||
const code = (err as NodeJS.ErrnoException).code;
|
||||
if (code !== "ENOENT" && code !== "EISDIR") {
|
||||
logWarning("worktree", `untracked file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
* worktree-expected-warnings.test.ts — #3665
|
||||
*
|
||||
* Verify that auto-worktree.ts and worktree-manager.ts suppress expected
|
||||
* ENOENT and EISDIR conditions instead of logging misleading warnings.
|
||||
*/
|
||||
|
||||
import { describe, test } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { join, dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const autoWorktreeFile = join(__dirname, "..", "auto-worktree.ts");
|
||||
const worktreeManagerFile = join(__dirname, "..", "worktree-manager.ts");
|
||||
|
||||
describe("worktree expected-condition warning suppression (#3665)", () => {
|
||||
const autoSource = readFileSync(autoWorktreeFile, "utf-8");
|
||||
|
||||
test("auto-worktree.ts checks for ENOENT before logging unlink warning", () => {
|
||||
assert.match(autoSource, /code\s*!==\s*["']ENOENT["']/);
|
||||
});
|
||||
|
||||
test("auto-worktree.ts checks for EISDIR before logging unlink warning", () => {
|
||||
assert.match(autoSource, /code\s*!==\s*["']EISDIR["']/);
|
||||
});
|
||||
|
||||
test("auto-worktree.ts references issue #3597", () => {
|
||||
assert.match(autoSource, /#3597/);
|
||||
});
|
||||
|
||||
const managerSource = readFileSync(worktreeManagerFile, "utf-8");
|
||||
|
||||
test("worktree-manager.ts checks isDirectory() before reading .git file", () => {
|
||||
assert.match(managerSource, /lstatSync\(gitPath\)\.isDirectory\(\)/);
|
||||
});
|
||||
});
|
||||
|
|
@ -89,7 +89,9 @@ function normalizePathForComparison(path: string): string {
|
|||
*/
|
||||
export function resolveGitDir(basePath: string): string {
|
||||
const gitPath = join(basePath, ".git");
|
||||
if (!existsSync(gitPath)) return join(basePath, ".git");
|
||||
if (!existsSync(gitPath)) return gitPath;
|
||||
// In a normal repo .git is a directory — skip the file read (#3597)
|
||||
if (lstatSync(gitPath).isDirectory()) return gitPath;
|
||||
try {
|
||||
const content = readFileSync(gitPath, "utf-8").trim();
|
||||
if (content.startsWith("gitdir: ")) {
|
||||
|
|
@ -98,7 +100,7 @@ export function resolveGitDir(basePath: string): string {
|
|||
} catch (e) {
|
||||
logWarning("worktree", `.git file read failed: ${(e as Error).message}`);
|
||||
}
|
||||
return join(basePath, ".git");
|
||||
return gitPath;
|
||||
}
|
||||
|
||||
export function worktreesDir(basePath: string): string {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue