shithub: furgit

Download patch

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,
 	},
 }
--