( localRefs []*plumbing.Reference, remoteRefStorer storer.ReferenceStorer, s storage.Storer, depth int, )
| 928 | } |
| 929 | |
| 930 | func getHaves( |
| 931 | localRefs []*plumbing.Reference, |
| 932 | remoteRefStorer storer.ReferenceStorer, |
| 933 | s storage.Storer, |
| 934 | depth int, |
| 935 | ) ([]plumbing.Hash, error) { |
| 936 | haves := map[plumbing.Hash]bool{} |
| 937 | |
| 938 | // Build a map of all the remote references, to avoid loading too |
| 939 | // many parent commits for references we know don't need to be |
| 940 | // transferred. |
| 941 | remoteRefs, err := getRemoteRefsFromStorer(remoteRefStorer) |
| 942 | if err != nil { |
| 943 | return nil, err |
| 944 | } |
| 945 | |
| 946 | for _, ref := range localRefs { |
| 947 | if haves[ref.Hash()] { |
| 948 | continue |
| 949 | } |
| 950 | |
| 951 | if ref.Type() != plumbing.HashReference { |
| 952 | continue |
| 953 | } |
| 954 | |
| 955 | err = getHavesFromRef(ref, remoteRefs, s, haves, depth) |
| 956 | if err != nil { |
| 957 | return nil, err |
| 958 | } |
| 959 | } |
| 960 | |
| 961 | var result []plumbing.Hash |
| 962 | for h := range haves { |
| 963 | result = append(result, h) |
| 964 | } |
| 965 | |
| 966 | return result, nil |
| 967 | } |
| 968 | |
| 969 | const refspecAllTags = "+refs/tags/*:refs/tags/*" |
| 970 |
searching dependent graphs…