code.gitea.io/gitea@v1.19.3/modules/git/tree_entry_gogit.go (about) 1 // Copyright 2015 The Gogs Authors. All rights reserved. 2 // Copyright 2019 The Gitea Authors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 5 //go:build gogit 6 7 package git 8 9 import ( 10 "github.com/go-git/go-git/v5/plumbing" 11 "github.com/go-git/go-git/v5/plumbing/filemode" 12 "github.com/go-git/go-git/v5/plumbing/object" 13 ) 14 15 // TreeEntry the leaf in the git tree 16 type TreeEntry struct { 17 ID SHA1 18 19 gogitTreeEntry *object.TreeEntry 20 ptree *Tree 21 22 size int64 23 sized bool 24 fullName string 25 } 26 27 // Name returns the name of the entry 28 func (te *TreeEntry) Name() string { 29 if te.fullName != "" { 30 return te.fullName 31 } 32 return te.gogitTreeEntry.Name 33 } 34 35 // Mode returns the mode of the entry 36 func (te *TreeEntry) Mode() EntryMode { 37 return EntryMode(te.gogitTreeEntry.Mode) 38 } 39 40 // Size returns the size of the entry 41 func (te *TreeEntry) Size() int64 { 42 if te.IsDir() { 43 return 0 44 } else if te.sized { 45 return te.size 46 } 47 48 file, err := te.ptree.gogitTree.TreeEntryFile(te.gogitTreeEntry) 49 if err != nil { 50 return 0 51 } 52 53 te.sized = true 54 te.size = file.Size 55 return te.size 56 } 57 58 // IsSubModule if the entry is a sub module 59 func (te *TreeEntry) IsSubModule() bool { 60 return te.gogitTreeEntry.Mode == filemode.Submodule 61 } 62 63 // IsDir if the entry is a sub dir 64 func (te *TreeEntry) IsDir() bool { 65 return te.gogitTreeEntry.Mode == filemode.Dir 66 } 67 68 // IsLink if the entry is a symlink 69 func (te *TreeEntry) IsLink() bool { 70 return te.gogitTreeEntry.Mode == filemode.Symlink 71 } 72 73 // IsRegular if the entry is a regular file 74 func (te *TreeEntry) IsRegular() bool { 75 return te.gogitTreeEntry.Mode == filemode.Regular 76 } 77 78 // IsExecutable if the entry is an executable file (not necessarily binary) 79 func (te *TreeEntry) IsExecutable() bool { 80 return te.gogitTreeEntry.Mode == filemode.Executable 81 } 82 83 // Blob returns the blob object the entry 84 func (te *TreeEntry) Blob() *Blob { 85 encodedObj, err := te.ptree.repo.gogitRepo.Storer.EncodedObject(plumbing.AnyObject, te.gogitTreeEntry.Hash) 86 if err != nil { 87 return nil 88 } 89 90 return &Blob{ 91 ID: te.gogitTreeEntry.Hash, 92 gogitEncodedObj: encodedObj, 93 name: te.Name(), 94 } 95 }