mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
232 lines
8.5 KiB
Go
232 lines
8.5 KiB
Go
package gerrit
|
||
|
||
import (
|
||
"fmt"
|
||
"net/url"
|
||
)
|
||
|
||
// EditInfo entity contains information about a change edit.
|
||
type EditInfo struct {
|
||
Commit CommitInfo `json:"commit"`
|
||
BaseRevision string `json:"baseRevision"`
|
||
Fetch map[string]FetchInfo `json:"fetch"`
|
||
Files map[string]FileInfo `json:"files,omitempty"`
|
||
}
|
||
|
||
// EditFileInfo entity contains additional information of a file within a change edit.
|
||
type EditFileInfo struct {
|
||
WebLinks []WebLinkInfo `json:"web_links,omitempty"`
|
||
}
|
||
|
||
// ChangeEditDetailOptions specifies the parameters to the ChangesService.GetChangeEditDetails.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-edit-detail
|
||
type ChangeEditDetailOptions struct {
|
||
// When request parameter list is provided the response also includes the file list.
|
||
List bool `url:"list,omitempty"`
|
||
// When base request parameter is provided the file list is computed against this base revision.
|
||
Base bool `url:"base,omitempty"`
|
||
// When request parameter download-commands is provided fetch info map is also included.
|
||
DownloadCommands bool `url:"download-commands,omitempty"`
|
||
}
|
||
|
||
// GetChangeEditDetails retrieves a change edit details.
|
||
// As response an EditInfo entity is returned that describes the change edit, or “204 No Content” when change edit doesn’t exist for this change.
|
||
// Change edits are stored on special branches and there can be max one edit per user per change.
|
||
// Edits aren’t tracked in the database.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-edit-detail
|
||
func (s *ChangesService) GetChangeEditDetails(changeID string, opt *ChangeEditDetailOptions) (*EditInfo, *Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit", changeID)
|
||
|
||
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(EditInfo)
|
||
resp, err := s.client.Do(req, v)
|
||
if err != nil {
|
||
return nil, resp, err
|
||
}
|
||
|
||
return v, resp, err
|
||
}
|
||
|
||
// RetrieveMetaDataOfAFileFromChangeEdit retrieves meta data of a file from a change edit.
|
||
// Currently only web links are returned.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-edit-meta-data
|
||
func (s *ChangesService) RetrieveMetaDataOfAFileFromChangeEdit(changeID, filePath string) (*EditFileInfo, *Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit/%s/meta", changeID, filePath)
|
||
|
||
req, err := s.client.NewRequest("GET", u, nil)
|
||
if err != nil {
|
||
return nil, nil, err
|
||
}
|
||
|
||
v := new(EditFileInfo)
|
||
resp, err := s.client.Do(req, v)
|
||
if err != nil {
|
||
return nil, resp, err
|
||
}
|
||
|
||
return v, resp, err
|
||
}
|
||
|
||
// RetrieveCommitMessageFromChangeEdit retrieves commit message from change edit.
|
||
// The commit message is returned as base64 encoded string.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-edit-message
|
||
func (s *ChangesService) RetrieveCommitMessageFromChangeEdit(changeID string) (string, *Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit:message", changeID)
|
||
return getStringResponseWithoutOptions(s.client, u)
|
||
}
|
||
|
||
// ChangeFileContentInChangeEdit put content of a file to a change edit.
|
||
//
|
||
// When change edit doesn’t exist for this change yet it is created.
|
||
// When file content isn’t provided, it is wiped out for that file.
|
||
// As response “204 No Content” is returned.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#put-edit-file
|
||
func (s *ChangesService) ChangeFileContentInChangeEdit(changeID, filePath, content string) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit/%s", changeID, url.QueryEscape(filePath))
|
||
|
||
req, err := s.client.NewRawPutRequest(u, content)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return s.client.Do(req, nil)
|
||
}
|
||
|
||
// ChangeCommitMessageInChangeEdit modify commit message.
|
||
// The request body needs to include a ChangeEditMessageInput entity.
|
||
//
|
||
// If a change edit doesn’t exist for this change yet, it is created.
|
||
// As response “204 No Content” is returned.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#put-change-edit-message
|
||
func (s *ChangesService) ChangeCommitMessageInChangeEdit(changeID string, input *ChangeEditMessageInput) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit:message", changeID)
|
||
|
||
req, err := s.client.NewRequest("PUT", u, input)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return s.client.Do(req, nil)
|
||
}
|
||
|
||
// DeleteFileInChangeEdit deletes a file from a change edit.
|
||
// This deletes the file from the repository completely.
|
||
// This is not the same as reverting or restoring a file to its previous contents.
|
||
//
|
||
// When change edit doesn’t exist for this change yet it is created.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#delete-edit-file
|
||
func (s *ChangesService) DeleteFileInChangeEdit(changeID, filePath string) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit/%s", changeID, filePath)
|
||
return s.client.DeleteRequest(u, nil)
|
||
}
|
||
|
||
// DeleteChangeEdit deletes change edit.
|
||
//
|
||
// As response “204 No Content” is returned.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#delete-edit
|
||
func (s *ChangesService) DeleteChangeEdit(changeID string) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit", changeID)
|
||
return s.client.DeleteRequest(u, nil)
|
||
}
|
||
|
||
// PublishChangeEdit promotes change edit to a regular patch set.
|
||
//
|
||
// As response “204 No Content” is returned.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#publish-edit
|
||
func (s *ChangesService) PublishChangeEdit(changeID, notify string) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit:publish", changeID)
|
||
|
||
req, err := s.client.NewRequest("POST", u, map[string]string{
|
||
"notify": notify,
|
||
})
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return s.client.Do(req, nil)
|
||
}
|
||
|
||
// RebaseChangeEdit rebases change edit on top of latest patch set.
|
||
//
|
||
// When change was rebased on top of latest patch set, response “204 No Content” is returned.
|
||
// When change edit is already based on top of the latest patch set, the response “409 Conflict” is returned.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#rebase-edit
|
||
func (s *ChangesService) RebaseChangeEdit(changeID string) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit:rebase", changeID)
|
||
|
||
req, err := s.client.NewRequest("POST", u, nil)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return s.client.Do(req, nil)
|
||
}
|
||
|
||
// RetrieveFileContentFromChangeEdit retrieves content of a file from a change edit.
|
||
//
|
||
// The content of the file is returned as text encoded inside base64.
|
||
// The Content-Type header will always be text/plain reflecting the outer base64 encoding.
|
||
// A Gerrit-specific X-FYI-Content-Type header can be examined to find the server detected content type of the file.
|
||
//
|
||
// When the specified file was deleted in the change edit “204 No Content” is returned.
|
||
// If only the content type is required, callers should use HEAD to avoid downloading the encoded file contents.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-edit-file
|
||
func (s *ChangesService) RetrieveFileContentFromChangeEdit(changeID, filePath string) (*string, *Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit/%s", changeID, filePath)
|
||
|
||
req, err := s.client.NewRequest("GET", u, nil)
|
||
if err != nil {
|
||
return nil, nil, err
|
||
}
|
||
|
||
v := new(string)
|
||
resp, err := s.client.Do(req, v)
|
||
if err != nil {
|
||
return nil, resp, err
|
||
}
|
||
|
||
return v, resp, err
|
||
}
|
||
|
||
// RetrieveFileContentTypeFromChangeEdit retrieves content type of a file from a change edit.
|
||
// This is nearly the same as RetrieveFileContentFromChangeEdit.
|
||
// But if only the content type is required, callers should use HEAD to avoid downloading the encoded file contents.
|
||
//
|
||
// For further documentation please have a look at RetrieveFileContentFromChangeEdit.
|
||
//
|
||
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-edit-file
|
||
func (s *ChangesService) RetrieveFileContentTypeFromChangeEdit(changeID, filePath string) (*Response, error) {
|
||
u := fmt.Sprintf("changes/%s/edit/%s", changeID, filePath)
|
||
|
||
req, err := s.client.NewRequest("HEAD", u, nil)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return s.client.Do(req, nil)
|
||
}
|
||
|
||
/*
|
||
Missing Change Edit Endpoints
|
||
Restore file content or rename files in Change Edit
|
||
*/
|