diff options
| -rw-r--r-- | object/tree/mode_details.go | 3 | ||||
| -rw-r--r-- | object/tree/mode_has_same_type.go | 12 | ||||
| -rw-r--r-- | object/tree/mode_is_regular_file.go | 6 | ||||
| -rw-r--r-- | object/tree/mode_table.go | 15 |
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, }, } |
