package gerrit import ( "fmt" "net/url" ) // BranchInfo entity contains information about a branch. type BranchInfo struct { Ref string `json:"ref"` Revision string `json:"revision"` CanDelete bool `json:"can_delete"` WebLinks []WebLinkInfo `json:"web_links,omitempty"` } // BranchInput entity contains information for the creation of a new branch. type BranchInput struct { Ref string `json:"ref,omitempty"` Revision string `json:"revision,omitempty"` } // DeleteBranchesInput entity contains information about branches that should be deleted. type DeleteBranchesInput struct { Branches []string `json:"DeleteBranchesInput"` } // BranchOptions specifies the parameters to the branch API endpoints. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#branch-options type BranchOptions struct { // Limit the number of branches to be included in the results. Limit int `url:"n,omitempty"` // Skip the given number of branches from the beginning of the list. Skip string `url:"s,omitempty"` // Substring limits the results to those projects that match the specified substring. Substring string `url:"m,omitempty"` // Limit the results to those branches that match the specified regex. // Boundary matchers '^' and '$' are implicit. // For example: the regex 't*' will match any branches that start with 'test' and regex '*t' will match any branches that end with 'test'. Regex string `url:"r,omitempty"` } // ListBranches list the branches of a project. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#list-branches func (s *ProjectsService) ListBranches(projectName string, opt *BranchOptions) (*[]BranchInfo, *Response, error) { u := fmt.Sprintf("projects/%s/branches/", url.QueryEscape(projectName)) u, err := addOptions(u, opt) if err != nil { return nil, nil, err } req, err := s.client.NewRequest("GET", u, nil) if err != nil { return nil, nil, err } v := new([]BranchInfo) resp, err := s.client.Do(req, v) if err != nil { return nil, resp, err } return v, resp, err } // GetBranch retrieves a branch of a project. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#get-branch func (s *ProjectsService) GetBranch(projectName, branchID string) (*BranchInfo, *Response, error) { u := fmt.Sprintf("projects/%s/branches/%s", url.QueryEscape(projectName), branchID) req, err := s.client.NewRequest("GET", u, nil) if err != nil { return nil, nil, err } v := new(BranchInfo) resp, err := s.client.Do(req, v) if err != nil { return nil, resp, err } return v, resp, err } // GetReflog gets the reflog of a certain branch. // The caller must be project owner. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#get-reflog func (s *ProjectsService) GetReflog(projectName, branchID string) (*[]ReflogEntryInfo, *Response, error) { u := fmt.Sprintf("projects/%s/branches/%s/reflog", url.QueryEscape(projectName), branchID) req, err := s.client.NewRequest("GET", u, nil) if err != nil { return nil, nil, err } v := new([]ReflogEntryInfo) resp, err := s.client.Do(req, v) if err != nil { return nil, resp, err } return v, resp, err } // CreateBranch creates a new branch. // In the request body additional data for the branch can be provided as BranchInput. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#create-branch func (s *ProjectsService) CreateBranch(projectName, branchID string, input *BranchInput) (*BranchInfo, *Response, error) { u := fmt.Sprintf("projects/%s/branches/%s", url.QueryEscape(projectName), branchID) req, err := s.client.NewRequest("PUT", u, input) if err != nil { return nil, nil, err } v := new(BranchInfo) resp, err := s.client.Do(req, v) if err != nil { return nil, resp, err } return v, resp, err } // DeleteBranch deletes a branch. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#delete-branch func (s *ProjectsService) DeleteBranch(projectName, branchID string) (*Response, error) { u := fmt.Sprintf("projects/%s/branches/%s", url.QueryEscape(projectName), branchID) return s.client.DeleteRequest(u, nil) } // DeleteBranches delete one or more branches. // If some branches could not be deleted, the response is “409 Conflict” and the error message is contained in the response body. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#delete-branches func (s *ProjectsService) DeleteBranches(projectName string, input *DeleteBranchesInput) (*Response, error) { u := fmt.Sprintf("projects/%s/branches:delete", url.QueryEscape(projectName)) return s.client.DeleteRequest(u, input) } // GetBranchContent gets the content of a file from the HEAD revision of a certain branch. // The content is returned as base64 encoded string. // // Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#get-content func (s *ProjectsService) GetBranchContent(projectName, branchID, fileID string) (string, *Response, error) { u := fmt.Sprintf("projects/%s/branches/%s/files/%s/content", url.QueryEscape(projectName), branchID, fileID) return getStringResponseWithoutOptions(s.client, u) }