alibaba/open-code-review · error
stat %s: %w
Error message
stat %s: %w
What it means
After computing the absolute path, resolveWorkingDir stats it and wraps any os.Stat failure as `stat %s: %w`. It fires when the given directory does not exist, is unreachable, or the path component is not searchable. The wrapped syscall error (ENOENT, EACCES, ENOTDIR) says which.
Source
Thrown at cmd/opencodereview/shared.go:146
}
// resolveWorkingDir returns (absPath, isGitRepo, err). When requireGit is
// true, returns an error if the directory is not a git repo. When false,
// returns IsGitRepo=false instead of erroring (scan path uses this).
func resolveWorkingDir(input string, requireGit bool) (string, bool, error) {
if input == "" {
wd, err := os.Getwd()
if err != nil {
return "", false, fmt.Errorf("get working directory: %w", err)
}
input = wd
}
absPath, err := filepath.Abs(input)
if err != nil {
return "", false, fmt.Errorf("resolve absolute path: %w", err)
}
if _, statErr := os.Stat(absPath); statErr != nil {
return "", false, fmt.Errorf("stat %s: %w", absPath, statErr)
}
out, err := runGitCmd(absPath, "rev-parse", "--git-dir")
isGit := err == nil && len(out) > 0
if !isGit && requireGit {
return "", false, fmt.Errorf("%s is not a git repository", absPath)
}
// #287: git reports diff and `git show HEAD:<path>` paths relative to the
// repository root, not the current directory. When `ocr review` runs from a
// subdirectory of a monorepo, anchor RepoDir at the git top-level so those
// root-relative paths resolve for both disk reads and git-show reads.
// requireGit is true only for the review path; scan (requireGit=false) keeps
// the CWD so its `git ls-files` walk stays scoped to the subdirectory.
if isGit && requireGit {
// runGitCmdStdout captures stdout only so git stderr notices can't
// pollute the resolved path. --show-toplevel fails (or is empty) when
// there is no work tree — e.g. a bare repo, where --git-dir succeeds so
// isGit is true. Fail loudly there instead of silently reusing the
// subdir, which would reproduce the #287 root-relative-path bug.View on GitHub (pinned to 5cf97d0d15)
Solutions
- Verify the path exists: run `ls <path>` (or `test -d <path>`) before invoking ocr
- Fix typos or stale paths in scripts/CI config; confirm the checkout/volume mount ran
- Check permissions on every path component; use a directory the current user can traverse
Example fix
// before (CI script) ocr review --dir $WORKSPACE/src // after if [ ! -d "$WORKSPACE/src" ]; then echo "directory missing"; exit 1; fi ocr review --dir "$WORKSPACE/src"
Defensive patterns
Strategy: validation
Validate before calling
info, err := os.Stat(dir)
if err != nil {
return fmt.Errorf("directory %s not accessible: %w", dir, err)
}
if !info.IsDir() {
return fmt.Errorf("%s is not a directory", dir)
} Try / catch
var pe *fs.PathError
if errors.As(err, &pe) {
switch {
case errors.Is(pe.Err, syscall.ENOENT): // path does not exist
case errors.Is(pe.Err, syscall.EACCES): // permission denied
}
} Prevention
- test -d the directory before running ocr in scripts
- Pin repository paths in CI config and verify the checkout step succeeded
- Check mount/volume status in containers before the review step
When it happens
Trigger: ocr review/scan run with a --dir path that does not exist, contains a typo, points through a broken symlink, or traverses a directory the user cannot enter.
Common situations: Typo in the path; repository checked out at a different location than the script assumes; CI checkout step skipped; running in a container without the volume mounted; permission-restricted directories.
Related errors
- read background file %q: %w
- background file %q is a directory, not a file
- list sessions: %w
- get working directory: %w
- resolve absolute path: %w
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/03b51892c5c6605e.
Report an issue: GitHub.