12345678910111213141516171819202122232425262728293031323334353637383940 |
- // Copyright 2024 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- //go:build gogit
-
- package gitrepo
-
- import (
- "context"
-
- "github.com/go-git/go-git/v5/plumbing"
- )
-
- // WalkReferences walks all the references from the repository
- // refname is empty, ObjectTag or ObjectBranch. All other values should be treated as equivalent to empty.
- func WalkReferences(ctx context.Context, repo Repository, walkfn func(sha1, refname string) error) (int, error) {
- gitRepo := repositoryFromContext(ctx, repo)
- if gitRepo == nil {
- var err error
- gitRepo, err = OpenRepository(ctx, repo)
- if err != nil {
- return 0, err
- }
- defer gitRepo.Close()
- }
-
- i := 0
- iter, err := gitRepo.GoGitRepo().References()
- if err != nil {
- return i, err
- }
- defer iter.Close()
-
- err = iter.ForEach(func(ref *plumbing.Reference) error {
- err := walkfn(ref.Hash().String(), string(ref.Name()))
- i++
- return err
- })
- return i, err
- }
|