ref: fb955caaa0d62fc7379469a02ac8f51b17c698c9
parent: 412129070acb61031f14d87a530213683c201d93
author: Runxi Yu <runxiyu@umich.edu>
date: Mon Mar 30 06:18:37 EDT 2026
object/tree: Regular files and types
--- a/object/tree/mode_details.go
+++ b/object/tree/mode_details.go
@@ -1,7 +1,8 @@
package tree
type fileModeDetails struct {- isBlobLike bool
+ isBlobLike bool
+ isRegularFile bool
}
func (mode FileMode) details() fileModeDetails {--- /dev/null
+++ b/object/tree/mode_has_same_type.go
@@ -1,0 +1,12 @@
+package tree
+
+// HasSameType reports whether mode and other describe the same tree entry kind.
+//
+// Regular files and executable files have the same type for diff-status purposes.
+func (mode FileMode) HasSameType(other FileMode) bool {+ if mode == other {+ return true
+ }
+
+ return mode.details().isRegularFile && other.details().isRegularFile
+}
--- /dev/null
+++ b/object/tree/mode_is_regular_file.go
@@ -1,0 +1,6 @@
+package tree
+
+// IsRegularFile reports whether mode names one regular-file variant.
+func (mode FileMode) IsRegularFile() bool {+ return mode.details().isRegularFile
+}
--- a/object/tree/mode_table.go
+++ b/object/tree/mode_table.go
@@ -2,18 +2,23 @@
var fileModeTable = map[FileMode]fileModeDetails{ //nolint:gochecknoglobals FileModeDir: {- isBlobLike: false,
+ isBlobLike: false,
+ isRegularFile: false,
},
FileModeRegular: {- isBlobLike: true,
+ isBlobLike: true,
+ isRegularFile: true,
},
FileModeExecutable: {- isBlobLike: true,
+ isBlobLike: true,
+ isRegularFile: true,
},
FileModeSymlink: {- isBlobLike: true,
+ isBlobLike: true,
+ isRegularFile: false,
},
FileModeGitlink: {- isBlobLike: false,
+ isBlobLike: false,
+ isRegularFile: false,
},
}
--
⑨