in iterator/git.go [460:488]
func getCommitFromRef(repository *git.Repository, ref plumbing.ReferenceName) (plumbing.Hash, error) {
resolved := true
b, err := repository.Reference(ref, resolved)
if err != nil {
return plumbing.ZeroHash, err
}
if !b.Name().IsTag() {
return b.Hash(), nil
}
o, err := repository.Object(plumbing.AnyObject, b.Hash())
if err != nil {
return plumbing.ZeroHash, err
}
switch o := o.(type) {
case *object.Tag:
if o.TargetType != plumbing.CommitObject {
return plumbing.ZeroHash, fmt.Errorf("unsupported tag object target %q", o.TargetType)
}
return o.Target, nil
case *object.Commit:
return o.Hash, nil
}
return plumbing.ZeroHash, fmt.Errorf("unsupported tag target %q", o.Type())
}