github.com/driusan/dgit@v0.0.0-20221118233547-f39f0c15edbb/git/foreachref.go (about)

     1  package git
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"strings"
     7  )
     8  
     9  // Calls callback for each ref under c's GitDir which has prefix as a prefix.
    10  func ForEachRefCallback(c *Client, prefix string, callback func(*Client, Ref) error) error {
    11  	// FIXME: Include packed refs.
    12  	err := filepath.Walk(
    13  		c.GitDir.File("refs").String(),
    14  		func(path string, info os.FileInfo, err error) error {
    15  			if info.IsDir() {
    16  				return nil
    17  			}
    18  			refname := strings.TrimPrefix(path, c.GitDir.String()+"/")
    19  			if strings.HasPrefix(refname, prefix) {
    20  				r, err := parseRef(c, refname)
    21  				if err != nil {
    22  					return err
    23  				}
    24  				if err := callback(c, r); err != nil {
    25  					return err
    26  				}
    27  			}
    28  			return nil
    29  		},
    30  	)
    31  	return err
    32  }