688ee1978e
All checks were successful
continuous-integration/drone/push Build is passing
Add Docs on how to deal with this breaking change doResponse should return responce in all cases, to prosses things manualy if wanted helper func return http response Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: #416 Reviewed-by: Andrew Thornton <art27@cantab.net> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
// Copyright 2018 The Gitea Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gitea
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// Reference represents a Git reference.
|
|
type Reference struct {
|
|
Ref string `json:"ref"`
|
|
URL string `json:"url"`
|
|
Object *GitObject `json:"object"`
|
|
}
|
|
|
|
// GitObject represents a Git object.
|
|
type GitObject struct {
|
|
Type string `json:"type"`
|
|
SHA string `json:"sha"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
// GetRepoRef get one ref's information of one repository
|
|
func (c *Client) GetRepoRef(user, repo, ref string) (*Reference, *Response, error) {
|
|
ref = strings.TrimPrefix(ref, "refs/")
|
|
r := new(Reference)
|
|
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/git/refs/%s", user, repo, ref), nil, nil, &r)
|
|
if _, ok := err.(*json.UnmarshalTypeError); ok {
|
|
// Multiple refs
|
|
return nil, resp, errors.New("no exact match found for this ref")
|
|
} else if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return r, resp, nil
|
|
}
|
|
|
|
// GetRepoRefs get list of ref's information of one repository
|
|
func (c *Client) GetRepoRefs(user, repo, ref string) ([]*Reference, *Response, error) {
|
|
ref = strings.TrimPrefix(ref, "refs/")
|
|
data, resp, err := c.getResponse("GET", fmt.Sprintf("/repos/%s/%s/git/refs/%s", user, repo, ref), nil, nil)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
// Attempt to unmarshal single returned ref.
|
|
r := new(Reference)
|
|
refErr := json.Unmarshal(data, r)
|
|
if refErr == nil {
|
|
return []*Reference{r}, resp, nil
|
|
}
|
|
|
|
// Attempt to unmarshal multiple refs.
|
|
var rs []*Reference
|
|
refsErr := json.Unmarshal(data, &rs)
|
|
if refsErr == nil {
|
|
if len(rs) == 0 {
|
|
return nil, resp, errors.New("unexpected response: an array of refs with length 0")
|
|
}
|
|
return rs, resp, nil
|
|
}
|
|
|
|
return nil, resp, fmt.Errorf("unmarshalling failed for both single and multiple refs: %s and %s", refErr, refsErr)
|
|
}
|