mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-26 19:56:11 +01:00
41 lines
933 B
Go
41 lines
933 B
Go
|
// 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
|
||
|
}
|