code.gitea.io/gitea@v1.19.3/modules/git/repo_ref_gogit.go (about) 1 // Copyright 2018 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build gogit 5 6 package git 7 8 import ( 9 "strings" 10 11 "github.com/go-git/go-git/v5" 12 "github.com/go-git/go-git/v5/plumbing" 13 ) 14 15 // GetRefsFiltered returns all references of the repository that matches patterm exactly or starting with. 16 func (repo *Repository) GetRefsFiltered(pattern string) ([]*Reference, error) { 17 r, err := git.PlainOpen(repo.Path) 18 if err != nil { 19 return nil, err 20 } 21 22 refsIter, err := r.References() 23 if err != nil { 24 return nil, err 25 } 26 refs := make([]*Reference, 0) 27 if err = refsIter.ForEach(func(ref *plumbing.Reference) error { 28 if ref.Name() != plumbing.HEAD && !ref.Name().IsRemote() && 29 (pattern == "" || strings.HasPrefix(ref.Name().String(), pattern)) { 30 refType := string(ObjectCommit) 31 if ref.Name().IsTag() { 32 // tags can be of type `commit` (lightweight) or `tag` (annotated) 33 if tagType, _ := repo.GetTagType(ref.Hash()); err == nil { 34 refType = tagType 35 } 36 } 37 r := &Reference{ 38 Name: ref.Name().String(), 39 Object: ref.Hash(), 40 Type: refType, 41 repo: repo, 42 } 43 refs = append(refs, r) 44 } 45 return nil 46 }); err != nil { 47 return nil, err 48 } 49 50 return refs, nil 51 }