( ctx context.Context, o *FetchOptions, ref plumbing.ReferenceName, )
| 1063 | } |
| 1064 | |
| 1065 | func (r *Repository) fetchAndUpdateReferences( |
| 1066 | ctx context.Context, o *FetchOptions, ref plumbing.ReferenceName, |
| 1067 | ) (*plumbing.Reference, error) { |
| 1068 | |
| 1069 | if err := o.Validate(); err != nil { |
| 1070 | return nil, err |
| 1071 | } |
| 1072 | |
| 1073 | remote, err := r.Remote(o.RemoteName) |
| 1074 | if err != nil { |
| 1075 | return nil, err |
| 1076 | } |
| 1077 | |
| 1078 | objsUpdated := true |
| 1079 | remoteRefs, err := remote.fetch(ctx, o) |
| 1080 | if err == NoErrAlreadyUpToDate { |
| 1081 | objsUpdated = false |
| 1082 | } else if err == packfile.ErrEmptyPackfile { |
| 1083 | return nil, ErrFetching |
| 1084 | } else if err != nil { |
| 1085 | return nil, err |
| 1086 | } |
| 1087 | |
| 1088 | resolvedRef, err := expand_ref(remoteRefs, ref) |
| 1089 | if err != nil { |
| 1090 | return nil, err |
| 1091 | } |
| 1092 | |
| 1093 | refsUpdated, err := r.updateReferences(remote.c.Fetch, resolvedRef) |
| 1094 | if err != nil { |
| 1095 | return nil, err |
| 1096 | } |
| 1097 | |
| 1098 | if !objsUpdated && !refsUpdated { |
| 1099 | return nil, NoErrAlreadyUpToDate |
| 1100 | } |
| 1101 | |
| 1102 | return resolvedRef, nil |
| 1103 | } |
| 1104 | |
| 1105 | func (r *Repository) updateReferences(spec []config.RefSpec, |
| 1106 | resolvedRef *plumbing.Reference) (updated bool, err error) { |
no test coverage detected