( s config.RefSpec, remoteRefs storer.ReferenceStorer, refs memory.ReferenceStorage, )
| 992 | } |
| 993 | |
| 994 | func doCalculateRefs( |
| 995 | s config.RefSpec, |
| 996 | remoteRefs storer.ReferenceStorer, |
| 997 | refs memory.ReferenceStorage, |
| 998 | ) ([]*plumbing.Reference, error) { |
| 999 | var refList []*plumbing.Reference |
| 1000 | |
| 1001 | if s.IsExactSHA1() { |
| 1002 | ref := plumbing.NewHashReference(s.Dst(""), plumbing.NewHash(s.Src())) |
| 1003 | |
| 1004 | refList = append(refList, ref) |
| 1005 | return refList, refs.SetReference(ref) |
| 1006 | } |
| 1007 | |
| 1008 | var matched bool |
| 1009 | onMatched := func(ref *plumbing.Reference) error { |
| 1010 | if ref.Type() == plumbing.SymbolicReference { |
| 1011 | target, err := storer.ResolveReference(remoteRefs, ref.Name()) |
| 1012 | if err != nil { |
| 1013 | return err |
| 1014 | } |
| 1015 | |
| 1016 | ref = plumbing.NewHashReference(ref.Name(), target.Hash()) |
| 1017 | } |
| 1018 | |
| 1019 | if ref.Type() != plumbing.HashReference { |
| 1020 | return nil |
| 1021 | } |
| 1022 | |
| 1023 | matched = true |
| 1024 | refList = append(refList, ref) |
| 1025 | return refs.SetReference(ref) |
| 1026 | } |
| 1027 | |
| 1028 | var ret error |
| 1029 | if s.IsWildcard() { |
| 1030 | iter, err := remoteRefs.IterReferences() |
| 1031 | if err != nil { |
| 1032 | return nil, err |
| 1033 | } |
| 1034 | ret = iter.ForEach(func(ref *plumbing.Reference) error { |
| 1035 | if !s.Match(ref.Name()) { |
| 1036 | return nil |
| 1037 | } |
| 1038 | |
| 1039 | return onMatched(ref) |
| 1040 | }) |
| 1041 | } else { |
| 1042 | var resolvedRef *plumbing.Reference |
| 1043 | src := s.Src() |
| 1044 | resolvedRef, ret = expand_ref(remoteRefs, plumbing.ReferenceName(src)) |
| 1045 | if ret == nil { |
| 1046 | ret = onMatched(resolvedRef) |
| 1047 | } |
| 1048 | } |
| 1049 | |
| 1050 | if !matched && !s.IsWildcard() { |
| 1051 | return nil, NoMatchingRefSpecError{refSpec: s} |
no test coverage detected
searching dependent graphs…