func (s *fetchPackSession) doRequest(method, url string, content *bytes.Buffer) (*http.Response, error) { var body io.Reader if content != nil { body = content } req, err := http.NewRequest(method, url, body) if err != nil { return nil, plumbing.NewPermanentError(err) } s.applyHeadersToRequest(req, content) s.applyAuthToRequest(req) res, err := s.client.Do(req) if err != nil { return nil, plumbing.NewUnexpectedError(err) } if err := NewErr(res); err != nil { _ = res.Body.Close() return nil, err } return res, nil }
func (a *AdvRefs) AllReferences() (memory.ReferenceStorage, error) { s := memory.ReferenceStorage{} if err := addRefs(s, a); err != nil { return s, plumbing.NewUnexpectedError(err) } return s, nil }
func (i *GitUploadPackInfo) Decode(r io.Reader) error { d := advrefs.NewDecoder(r) ar := advrefs.New() if err := d.Decode(ar); err != nil { if err == advrefs.ErrEmpty { return plumbing.NewPermanentError(err) } return plumbing.NewUnexpectedError(err) } i.Capabilities = ar.Capabilities if err := i.addRefs(ar); err != nil { return plumbing.NewUnexpectedError(err) } return nil }
// NewErr returns a new Err based on a http response func NewErr(r *http.Response) error { if r.StatusCode >= http.StatusOK && r.StatusCode < http.StatusMultipleChoices { return nil } switch r.StatusCode { case http.StatusUnauthorized: return common.ErrAuthorizationRequired case http.StatusNotFound: return common.ErrRepositoryNotFound } return plumbing.NewUnexpectedError(&Err{r}) }
func (i *GitUploadPackInfo) addSymbolicRefs(ar *advrefs.AdvRefs) error { if !hasSymrefs(ar) { return nil } for _, symref := range ar.Capabilities.Get("symref").Values { chunks := strings.Split(symref, ":") if len(chunks) != 2 { err := fmt.Errorf("bad number of `:` in symref value (%q)", symref) return plumbing.NewUnexpectedError(err) } name := plumbing.ReferenceName(chunks[0]) target := plumbing.ReferenceName(chunks[1]) ref := plumbing.NewSymbolicReference(name, target) i.Refs.SetReference(ref) } return nil }
func addSymbolicRefs(s storer.ReferenceStorer, ar *AdvRefs) error { if !hasSymrefs(ar) { return nil } for _, symref := range ar.Capabilities.Get(capability.SymRef) { chunks := strings.Split(symref, ":") if len(chunks) != 2 { err := fmt.Errorf("bad number of `:` in symref value (%q)", symref) return plumbing.NewUnexpectedError(err) } name := plumbing.ReferenceName(chunks[0]) target := plumbing.ReferenceName(chunks[1]) ref := plumbing.NewSymbolicReference(name, target) if err := s.SetReference(ref); err != nil { return nil } } return nil }