Как разрешить коммит в ветки?

Мне нужно найти все ветви (теги) с коммитом. По CLI используя git Команда это возможно с помощью git branch --contains <commit> команда.

Как сделать что-то подобное с помощью go-git библиотека?

1 ответ

Я попытался сделать решение и получил это:

func FindBranchesByCoommit(r *git.Repository, c *object.Commit) (branches []*plumbing.Reference, err error) {
    brIt, err := r.Branches()
    if err != nil {
        return
    }
    defer brIt.Close()

    if err := brIt.ForEach(func(ref *plumbing.Reference) error {
        com, err := r.CommitObject(ref.Hash())
        if err != nil {
            return err
        }

        comIt, err := r.Log(&git.LogOptions{From: com.Hash})
        if err != nil {
            return err
        }
        defer comIt.Close()

        for {
            if com, err := comIt.Next(); err == nil {
                if c.Hash == com.Hash {
                    branches = append(branches, ref)
                    break
                }
            } else if err == io.EOF {
                break
            } else {
                return err
            }
        }

        return nil
    }); err != nil {
        return nil, err
    }

    return
}
Другие вопросы по тегам