···
"github.com/go-git/go-git/v5/plumbing"
···
func (t *NiceTree) FileMode() (filemode.FileMode, error) {
+
if numericMode, err := filemode.New(t.Mode); err == nil {
+
return numericMode, nil
+
// TODO: this is here for backwards compat, can be removed in future versions
+
osMode, err := parseModeString(t.Mode)
+
return filemode.Empty, nil
+
conv, err := filemode.NewFromOSFileMode(osMode)
+
return filemode.Empty, nil
+
// ParseFileModeString parses a file mode string like "-rw-r--r--"
+
// and returns an os.FileMode
+
func parseModeString(modeStr string) (os.FileMode, error) {
+
if len(modeStr) != 10 {
+
return 0, fmt.Errorf("invalid mode string length: expected 10, got %d", len(modeStr))
+
// Parse file type (first character)
+
return 0, fmt.Errorf("unknown file type: %c", modeStr[0])
+
// parse permissions for owner, group, and other
+
shifts := []int{6, 3, 0} // bit shifts for owner, group, other
+
if perms[offset] == 'r' {
+
mode |= os.FileMode(4 << shift)
+
if perms[offset+1] == 'w' {
+
mode |= os.FileMode(2 << shift)
+
if perms[offset+2] == 'x' {
+
mode |= os.FileMode(1 << shift)
func (t *NiceTree) IsFile() bool {