···
"github.com/go-git/go-git/v5/plumbing"
···
func (t *NiceTree) FileMode() (filemode.FileMode, error) {
21
-
return filemode.New(t.Mode)
23
+
if numericMode, err := filemode.New(t.Mode); err == nil {
24
+
return numericMode, nil
27
+
// TODO: this is here for backwards compat, can be removed in future versions
28
+
osMode, err := parseModeString(t.Mode)
30
+
return filemode.Empty, nil
33
+
conv, err := filemode.NewFromOSFileMode(osMode)
35
+
return filemode.Empty, nil
41
+
// ParseFileModeString parses a file mode string like "-rw-r--r--"
42
+
// and returns an os.FileMode
43
+
func parseModeString(modeStr string) (os.FileMode, error) {
44
+
if len(modeStr) != 10 {
45
+
return 0, fmt.Errorf("invalid mode string length: expected 10, got %d", len(modeStr))
48
+
var mode os.FileMode
50
+
// Parse file type (first character)
55
+
mode |= os.ModeSymlink
59
+
return 0, fmt.Errorf("unknown file type: %c", modeStr[0])
62
+
// parse permissions for owner, group, and other
63
+
perms := modeStr[1:]
64
+
shifts := []int{6, 3, 0} // bit shifts for owner, group, other
70
+
if perms[offset] == 'r' {
71
+
mode |= os.FileMode(4 << shift)
73
+
if perms[offset+1] == 'w' {
74
+
mode |= os.FileMode(2 << shift)
76
+
if perms[offset+2] == 'x' {
77
+
mode |= os.FileMode(1 << shift)
func (t *NiceTree) IsFile() bool {