pkg/client/gerrit/project.go (121 lines of code) (raw):
package gerrit
import (
"fmt"
"net/http"
"net/url"
"github.com/gosimple/slug"
"github.com/pkg/errors"
)
type Project struct {
Name string `json:"name"`
Parent string `json:"parent,omitempty"`
Description string `json:"description,omitempty"`
PermissionsOnly bool `json:"permissions_only"`
CreateEmptyCommit bool `json:"create_empty_commit"`
SubmitType string `json:"submit_type,omitempty"`
Branches string `json:"branches,omitempty"`
Owners string `json:"owners,omitempty"`
RejectEmptyCommit string `json:"reject_empty_commit,omitempty"`
}
func (p *Project) SlugifyName() string {
return slug.Make(p.Name)
}
type Branch struct {
Ref string `json:"ref"`
Revision string `json:"revision"`
CanDelete bool `json:"can_delete"`
WebLinks []WebLink `json:"web_link"`
}
type WebLink struct {
Name string `json:"name"`
URL string `json:"url"`
ImageURL string `json:"image_url"`
Target string `json:"target"`
}
func (gc *Client) CreateProject(prj *Project) error {
rsp, err := gc.resty.R().SetBody(prj).SetHeader(contentType, applicationJson).
Put(fmt.Sprintf("/projects/%s", url.QueryEscape(prj.Name)))
return parseRestyResponse(rsp, err)
}
func (gc *Client) GetProject(name string) (*Project, error) {
rsp, err := gc.resty.R().
SetHeader(acceptHeader, applicationJson).
Get(fmt.Sprintf("/projects/%s", url.QueryEscape(name)))
if err != nil {
return nil, errors.Wrapf(err, "Unable to get Gerrit project")
}
if rsp.StatusCode() != http.StatusOK {
if rsp.StatusCode() == http.StatusNotFound {
return nil, DoesNotExistError("does not exists")
}
return nil, errors.Errorf("wrong response code: %d, body: %s", rsp.StatusCode(), rsp.String())
}
var prj Project
if err := decodeGerritResponse(rsp.String(), &prj); err != nil {
return nil, errors.Wrap(err, "unable to unmarshal project response")
}
return &prj, nil
}
func (gc *Client) UpdateProject(prj *Project) error {
rsp, err := gc.resty.R().SetHeader(contentType, applicationJson).
SetBody(map[string]string{
"description": prj.Description,
"commit_message": "Update the project description",
}).Put(fmt.Sprintf("/projects/%s/description", url.QueryEscape(prj.Name)))
err = parseRestyResponse(rsp, err)
if err != nil {
return errors.Wrap(err, "unable to update project description")
}
rsp, err = gc.resty.R().SetHeader(contentType, applicationJson).
SetBody(map[string]string{
"parent": prj.Parent,
"commit_message": "Update the project parent",
}).Put(fmt.Sprintf("/projects/%s/parent", url.QueryEscape(prj.Name)))
return parseRestyResponse(rsp, err)
}
func (gc *Client) DeleteProject(name string) error {
rsp, err := gc.resty.R().SetHeader(contentType, applicationJson).
SetBody(map[string]bool{
"force": false,
"preserve": false,
}).Post(fmt.Sprintf("/projects/%s/delete-project~delete", url.QueryEscape(name)))
return parseRestyResponse(rsp, err)
}
func (gc *Client) ListProjects(_type string) ([]Project, error) {
rsp, err := gc.resty.R().SetHeader(acceptHeader, applicationJson).
Get(fmt.Sprintf("/projects/?type=%s&d=1&t=1", _type))
if err != nil {
return nil, errors.Wrapf(err, "Unable to get Gerrit project")
}
if rsp.IsError() {
return nil, errors.Errorf("wrong response code: %d, body: %s", rsp.StatusCode(), rsp.String())
}
var preProjects map[string]Project
if err := decodeGerritResponse(rsp.String(), &preProjects); err != nil {
return nil, errors.Wrapf(err, "unable to unmarshal project response, body: %s", rsp.String())
}
delete(preProjects, "All-Projects")
delete(preProjects, "All-Projects")
delete(preProjects, "All-Users")
projects := make([]Project, 0, len(preProjects))
for k, v := range preProjects {
v.Name = k
projects = append(projects, v)
}
return projects, nil
}
func (gc *Client) ListProjectBranches(projectName string) ([]Branch, error) {
rsp, err := gc.resty.R().SetHeader(acceptHeader, applicationJson).
Get(fmt.Sprintf("/projects/%s/branches/", url.QueryEscape(projectName)))
if err != nil {
return nil, errors.Wrapf(err, "Unable to get Gerrit project branches")
}
if rsp.IsError() {
return nil, errors.Errorf("wrong response code: %d, body: %s", rsp.StatusCode(), rsp.String())
}
var branches []Branch
if err := decodeGerritResponse(rsp.String(), &branches); err != nil {
return nil, errors.Wrapf(err, "unable to unmarshal project response, body: %s", rsp.String())
}
return branches, nil
}