blob: 3d441e91a7a7e70f3e7cd5c62f2a402bec2b11fa (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package resolve
import (
"io/fs"
"time"
"codeberg.org/lindenii/furgit/object"
)
type treeFSInfo struct {
name string
mode fs.FileMode
size int64
sys any
isDir bool
}
var (
_ fs.FileInfo = (*treeFSInfo)(nil)
_ fs.DirEntry = (*treeFSInfo)(nil)
)
func (info *treeFSInfo) Name() string { return info.name }
func (info *treeFSInfo) Size() int64 { return info.size }
func (info *treeFSInfo) Mode() fs.FileMode { return info.mode }
func (info *treeFSInfo) Type() fs.FileMode { return info.mode.Type() }
func (info *treeFSInfo) IsDir() bool { return info.isDir }
func (info *treeFSInfo) ModTime() time.Time { return time.Time{} }
func (info *treeFSInfo) Sys() any { return info.sys }
func (info *treeFSInfo) Info() (fs.FileInfo, error) {
return info, nil
}
func treeFSEntryMode(mode object.FileMode) fs.FileMode {
switch mode {
case object.FileModeDir:
return fs.ModeDir | 0o555
case object.FileModeRegular:
return 0o444
case object.FileModeExecutable:
return 0o555
case object.FileModeSymlink:
return fs.ModeSymlink | 0o444
case object.FileModeGitlink:
return fs.ModeIrregular
default:
return fs.ModeIrregular
}
}
func (treeFS *TreeFS) statEntry(entry treeEntryValue) (*treeFSInfo, error) {
size := int64(0)
if entry.mode == object.FileModeRegular || entry.mode == object.FileModeExecutable || entry.mode == object.FileModeSymlink {
var err error
size, err = entry.blobSize(treeFS.resolver)
if err != nil {
return nil, err
}
}
var sys any
if entry.treeEntry != nil {
sys = *entry.treeEntry
}
return &treeFSInfo{
name: entry.name,
mode: treeFSEntryMode(entry.mode),
size: size,
sys: sys,
isDir: entry.isDir(),
}, nil
}
|