aboutsummaryrefslogtreecommitdiff
path: root/object/tree
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-30 10:18:37 +0000
committerGravatar Runxi Yu2026-03-30 10:18:37 +0000
commitfb955caaa0d62fc7379469a02ac8f51b17c698c9 (patch)
tree7c4821b2796a5bf2cb5d0ec8a5c15b4c43acd966 /object/tree
parentfurgit: Add a disclaimer here too (diff)
signatureNo signature
object/tree: Regular files and types v0.1.157
Diffstat (limited to 'object/tree')
-rw-r--r--object/tree/mode_details.go3
-rw-r--r--object/tree/mode_has_same_type.go12
-rw-r--r--object/tree/mode_is_regular_file.go6
-rw-r--r--object/tree/mode_table.go15
4 files changed, 30 insertions, 6 deletions
diff --git a/object/tree/mode_details.go b/object/tree/mode_details.go
index 02d22620..9c34fd7c 100644
--- 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 {
diff --git a/object/tree/mode_has_same_type.go b/object/tree/mode_has_same_type.go
new file mode 100644
index 00000000..a058cb9c
--- /dev/null
+++ b/object/tree/mode_has_same_type.go
@@ -0,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
+}
diff --git a/object/tree/mode_is_regular_file.go b/object/tree/mode_is_regular_file.go
new file mode 100644
index 00000000..115395c0
--- /dev/null
+++ b/object/tree/mode_is_regular_file.go
@@ -0,0 +1,6 @@
+package tree
+
+// IsRegularFile reports whether mode names one regular-file variant.
+func (mode FileMode) IsRegularFile() bool {
+ return mode.details().isRegularFile
+}
diff --git a/object/tree/mode_table.go b/object/tree/mode_table.go
index e180c38f..1695f270 100644
--- a/object/tree/mode_table.go
+++ b/object/tree/mode_table.go
@@ -2,18 +2,23 @@ package tree
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,
},
}