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  }