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 }