open-code-review/internal/pathutil/path.go
MuoDoo 4b3f41df10
Fix workspace symlink diff containment (#125)
* Fix workspace symlink diff containment

* Share repository path containment helpers
2026-06-15 00:03:36 +08:00

25 lines
579 B
Go

package pathutil
import (
"os"
"path/filepath"
"strings"
)
// CanonicalPath returns an absolute path with symlinks resolved.
func CanonicalPath(path string) (string, error) {
abs, err := filepath.Abs(path)
if err != nil {
return "", err
}
return filepath.EvalSymlinks(abs)
}
// WithinBase reports whether target is base itself or contained under base.
func WithinBase(base, target string) bool {
rel, err := filepath.Rel(base, target)
if err != nil {
return false
}
return rel == "." || (rel != ".." && !strings.HasPrefix(rel, ".."+string(os.PathSeparator)))
}