From 79c40dcb08f0d512bd6d75d5e2acd3ddceec4530 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 23 Mar 2026 06:12:26 +0000 Subject: object/resolve: Fix error handling; don't substring-match errors --- object/resolve/treefs_entry.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'object/resolve/treefs_entry.go') diff --git a/object/resolve/treefs_entry.go b/object/resolve/treefs_entry.go index 402b47d2..af9760ca 100644 --- a/object/resolve/treefs_entry.go +++ b/object/resolve/treefs_entry.go @@ -1,9 +1,9 @@ package resolve import ( + "errors" "fmt" "io/fs" - "strings" "codeberg.org/lindenii/furgit/object" "codeberg.org/lindenii/furgit/objectid" @@ -37,11 +37,19 @@ func (treeFS *TreeFS) resolvePath(op treeFSOp, name string) (treeEntryValue, err } func (treeFS *TreeFS) pathResolveError(op treeFSOp, name string, err error) error { - if err != nil && strings.Contains(err.Error(), "not found") { + if _, ok := errors.AsType[*PathNotFoundError](err); ok { return treeFSPathError(op, name, fs.ErrNotExist) } - if err != nil && strings.Contains(err.Error(), "is not a tree") { + if _, ok := errors.AsType[*PathNotTreeError](err); ok { + return treeFSPathError(op, name, fs.ErrInvalid) + } + + if _, ok := errors.AsType[*PathEmptyError](err); ok { + return treeFSPathError(op, name, fs.ErrInvalid) + } + + if _, ok := errors.AsType[*PathSegmentEmptyError](err); ok { return treeFSPathError(op, name, fs.ErrInvalid) } -- cgit v1.3.1-10-gc9f91