code.gitea.io/gitea@v1.22.3/modules/git/tree_entry_nogogit.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build !gogit 5 6 package git 7 8 import "code.gitea.io/gitea/modules/log" 9 10 // TreeEntry the leaf in the git tree 11 type TreeEntry struct { 12 ID ObjectID 13 14 ptree *Tree 15 16 entryMode EntryMode 17 name string 18 19 size int64 20 sized bool 21 fullName string 22 } 23 24 // Name returns the name of the entry 25 func (te *TreeEntry) Name() string { 26 if te.fullName != "" { 27 return te.fullName 28 } 29 return te.name 30 } 31 32 // Mode returns the mode of the entry 33 func (te *TreeEntry) Mode() EntryMode { 34 return te.entryMode 35 } 36 37 // Size returns the size of the entry 38 func (te *TreeEntry) Size() int64 { 39 if te.IsDir() { 40 return 0 41 } else if te.sized { 42 return te.size 43 } 44 45 wr, rd, cancel, err := te.ptree.repo.CatFileBatchCheck(te.ptree.repo.Ctx) 46 if err != nil { 47 log.Debug("error whilst reading size for %s in %s. Error: %v", te.ID.String(), te.ptree.repo.Path, err) 48 return 0 49 } 50 defer cancel() 51 _, err = wr.Write([]byte(te.ID.String() + "\n")) 52 if err != nil { 53 log.Debug("error whilst reading size for %s in %s. Error: %v", te.ID.String(), te.ptree.repo.Path, err) 54 return 0 55 } 56 _, _, te.size, err = ReadBatchLine(rd) 57 if err != nil { 58 log.Debug("error whilst reading size for %s in %s. Error: %v", te.ID.String(), te.ptree.repo.Path, err) 59 return 0 60 } 61 62 te.sized = true 63 return te.size 64 } 65 66 // IsSubModule if the entry is a sub module 67 func (te *TreeEntry) IsSubModule() bool { 68 return te.entryMode == EntryModeCommit 69 } 70 71 // IsDir if the entry is a sub dir 72 func (te *TreeEntry) IsDir() bool { 73 return te.entryMode == EntryModeTree 74 } 75 76 // IsLink if the entry is a symlink 77 func (te *TreeEntry) IsLink() bool { 78 return te.entryMode == EntryModeSymlink 79 } 80 81 // IsRegular if the entry is a regular file 82 func (te *TreeEntry) IsRegular() bool { 83 return te.entryMode == EntryModeBlob 84 } 85 86 // IsExecutable if the entry is an executable file (not necessarily binary) 87 func (te *TreeEntry) IsExecutable() bool { 88 return te.entryMode == EntryModeExec 89 } 90 91 // Blob returns the blob object the entry 92 func (te *TreeEntry) Blob() *Blob { 93 return &Blob{ 94 ID: te.ID, 95 name: te.Name(), 96 size: te.size, 97 gotSize: te.sized, 98 repo: te.ptree.repo, 99 } 100 }