Two environments that share one working tree — most concretely Windows and WSL — can't safely share a single `.codegraph/`: the daemon lockfile records a platform-specific pid + socket (named pipe vs Unix socket), and SQLite locking across the WSL2/Windows filesystem boundary is unreliable, so two daemons over one index risks corruption. Add a `CODEGRAPH_DIR` env var (default `.codegraph`) that overrides the per-project data directory name, so each environment keeps its own index in the same tree (e.g. `CODEGRAPH_DIR=.codegraph-win` on Windows). The name is resolved live and validated (rejects separators / `..` / absolute, falling back to the default with a one-time stderr warning). Indexing and file-watching now skip ANY `.codegraph-*` sibling so neither side trips over the other's data. Routes the previously-hardcoded `.codegraph` literals (db path, lockfile, error log, watcher ignore, file-scan skip, installer) through the resolver. No extraction-version bump — index content is unchanged. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
636d9fcb7d
commit
a56d9e6941
+6
-1
@@ -37,6 +37,7 @@ import type { Ignore } from 'ignore';
|
||||
import { isSourceFile, buildDefaultIgnore } from '../extraction';
|
||||
import { logDebug, logWarn } from '../errors';
|
||||
import { normalizePath } from '../utils';
|
||||
import { isCodeGraphDataDir } from '../directory';
|
||||
import { watchDisabledReason } from './watch-policy';
|
||||
|
||||
/**
|
||||
@@ -425,8 +426,12 @@ export class FileWatcher {
|
||||
|
||||
/** Our own dirs are always ignored, regardless of .gitignore. */
|
||||
private isAlwaysIgnored(rel: string): boolean {
|
||||
// First path segment. Ignore any CodeGraph data dir — the active one AND a
|
||||
// sibling like `.codegraph-win` a second environment (Windows/WSL) created
|
||||
// in the same tree, so neither side watches the other's index (#636).
|
||||
const top = rel.split('/')[0] ?? rel;
|
||||
return (
|
||||
rel === '.codegraph' || rel.startsWith('.codegraph/') ||
|
||||
isCodeGraphDataDir(top) ||
|
||||
rel === '.git' || rel.startsWith('.git/')
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user