code.gitea.io/gitea@v1.22.3/modules/gitrepo/walk_gogit.go (about) 1 // Copyright 2024 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build gogit 5 6 package gitrepo 7 8 import ( 9 "context" 10 11 "github.com/go-git/go-git/v5/plumbing" 12 ) 13 14 // WalkReferences walks all the references from the repository 15 // refname is empty, ObjectTag or ObjectBranch. All other values should be treated as equivalent to empty. 16 func WalkReferences(ctx context.Context, repo Repository, walkfn func(sha1, refname string) error) (int, error) { 17 gitRepo := repositoryFromContext(ctx, repo) 18 if gitRepo == nil { 19 var err error 20 gitRepo, err = OpenRepository(ctx, repo) 21 if err != nil { 22 return 0, err 23 } 24 defer gitRepo.Close() 25 } 26 27 i := 0 28 iter, err := gitRepo.GoGitRepo().References() 29 if err != nil { 30 return i, err 31 } 32 defer iter.Close() 33 34 err = iter.ForEach(func(ref *plumbing.Reference) error { 35 err := walkfn(ref.Hash().String(), string(ref.Name())) 36 i++ 37 return err 38 }) 39 return i, err 40 }