blob: 75987a2da6016918d703ab84f225ecfd139c89af (
plain) (
tree)
|
|
package gerritevents
// These types are taken from https://cl.tvl.fyi/Documentation/json.html.
// Account is a Gerrit account (or just a Git name+email pair).
type Account struct {
Name string `json:"name"`
Email string `json:"email"`
Username string `json:"username"`
}
// ChangeStatus represents the states a change can be in.
type ChangeStatus string
const (
// ChangeStatusNew is the state a change is in during review.
ChangeStatusNew ChangeStatus = "NEW"
// ChangeStatusMerged indicates a change was merged to the target branch.
ChangeStatusMerged ChangeStatus = "MERGED"
// ChangeStatusAbandoned indicates a change was marked as abandoned.
ChangeStatusAbandoned ChangeStatus = "ABANDONED"
)
// Message is a message left by a reviewer.
type Message struct {
Timestamp Time `json:"timestamp"`
Reviewer Account `json:"reviewer"`
Message string `json:"message"`
}
// TrackingID allows storing identifiers from external systems, i.e. bug trackers.
type TrackingID struct {
System string `json:"system"`
ID string `json:"id"`
}
// ChangeKind indicates the different changes that can be made to a change.
type ChangeKind string
const (
// ChangeKindRework indicates a non-trivial content change.
ChangeKindRework ChangeKind = "REWORK"
// ChangeKindTrivialRebase indicates a conflict-free merge between the new parent and the prior patch set.
ChangeKindTrivialRebase ChangeKind = "TRIVIAL_REBASE"
// ChangeKindMergeFirstParentUpdate indicates a conflict-free change of the first parent of a merge commit.
ChangeKindMergeFirstParentUpdate ChangeKind = "MERGE_FIRST_PARENT_UPDATE"
// ChangeKindNoCodeChange indicates no code change (the tree and parent trees are unchanged) - commit message probably changed.
ChangeKindNoCodeChange ChangeKind = "NO_CODE_CHANGE"
// ChangeKindNoChange indicates nothing changes: the commit message, tree, and parent tree are unchanged.
ChangeKindNoChange ChangeKind = "NO_CHANGE"
)
// Approval represents the current and past state of an approval label.
type Approval struct {
Type string `json:"type"`
Description string `json:"description"`
Value string `json:"value"`
OldValue *string `json:"oldValue"`
GrantedOn *Time `json:"grantedOn"`
By *Account `json:"by"`
}
// PatchSetComment is a single comment left on a patchset.
type PatchSetComment struct {
File string `json:"file"`
Line int `json:"line"`
Reviewer Account `json:"reviewer"`
Message string `json:"message"`
}
// FilePatchType represents the different modifications that can be made to a file by a patchset.
type FilePatchType string
const (
// FilePatchTypeAdded indicates the file did not exist, and this patchset adds it to the tree.
FilePatchTypeAdded FilePatchType = "ADDED"
// FilePatchTypeModified indicates the file exists before and after this patchset.
FilePatchTypeModified FilePatchType = "MODIFIED"
// FilePatchTypeDeleted indicates the file is removed by this patchset.
FilePatchTypeDeleted FilePatchType = "DELETED"
// FilePatchTypeRenamed indicates the file has a different name before this patchset than after.
FilePatchTypeRenamed FilePatchType = "RENAMED"
// FilePatchTypeCopied indicates the file was copied from a different file.
FilePatchTypeCopied FilePatchType = "COPIED"
// FilePatchTypeRewrite indicates the file had a significant quantity of content changed.
FilePatchTypeRewrite FilePatchType = "REWRITE"
)
// File represents a file in a patchset as well as how it is being modified.
type File struct {
File string `json:"file"`
FileOld string `json:"fileOld"`
Type FilePatchType `json:"type"`
}
// PatchSet represents a single patchset within a change.
type PatchSet struct {
Number int `json:"number"`
Revision string `json:"revision"`
Parents []string `json:"parents"`
Ref string `json:"ref"`
Uploader Account `json:"uploader"`
Author Account `json:"author"`
CreatedOn Time `json:"createdOn"`
Kind ChangeKind `json:"kind"`
Approvals []Approval `json:"approvals"`
Comments []PatchSetComment `json:"comments"`
Files []File `json:"file"`
SizeInsertions int `json:"sizeInsertions"`
SizeDeletions int `json:"sizeDeletions"`
}
// Dependency represents a change on which this change is dependent.
type Dependency struct {
ID string `json:"id"`
Number int `json:"number"`
Revision string `json:"revision"`
Ref string `json:"ref"`
IsCurrentPatchSet bool `json:"isCurrentPatchSet"`
}
// SubmitStatus indicates whether this change has met the submit conditions and is ready to submit.
type SubmitStatus string
const (
// SubmitStatusOK indicates this change is ready to submit - all submit requirements are met.
SubmitStatusOK SubmitStatus = "OK"
// SubmitStatusNotReady indicates this change cannot yet be submitted.
SubmitStatusNotReady SubmitStatus = "NOT_READY"
// SubmitStatusRuleError indicates the submit rules could not be evaluted. Administrator intervention is required.
SubmitStatusRuleError SubmitStatus = "RULE_ERROR"
)
// LabelStatus indicates whether this label permits submission and if the label can be granted by anyone.
type LabelStatus string
const (
// LabelStatusOK indicates that this label provides what is necessary for submission (e.g. CR+2).
LabelStatusOK LabelStatus = "OK"
// LabelStatusReject indicates this label prevents submission (e.g. CR-2).
LabelStatusReject LabelStatus = "REJECT"
// LabelStatusNeed indicates this label is required for submission, but has not been satisfied (e.g. CR0).
LabelStatusNeed LabelStatus = "NEED"
// LabelStatusMay indicates this label is not required for submission. It may or may not be set.
LabelStatusMay LabelStatus = "MAY"
// LabelStatusImpossible indicates this label is required for submission, but cannot be satisfied. The ACLs on this label may be set incorrectly.
LabelStatusImpossible LabelStatus = "IMPOSSIBLE"
)
// Label represents the status of a particular label.
type Label struct {
Label string `json:"label"`
Status LabelStatus `json:"status"`
By Account `json:"by"`
}
// Requirement represents a submit requirement.
type Requirement struct {
FallbackText string `json:"fallbackText"`
Type string `json:"type"`
// TODO(lukegb): data
}
// SubmitRecord represents the current submission state of a change.
type SubmitRecord struct {
Status SubmitStatus `json:"status"`
Labels []Label `json:"labels"`
Requirements []Requirement `json:"requirements"`
}
// Change represents a Gerrit CL.
type Change struct {
Project string `json:"project"`
Branch string `json:"branch"`
Topic string `json:"topic"`
ID string `json:"id"`
Number int `json:"number"`
Subject string `json:"subject"`
Owner Account `json:"owner"`
URL string `json:"url"`
CommitMessage string `json:"commitMessage"`
CreatedOn Time `json:"createdOn"`
LastUpdated *Time `json:"lastUpdated"`
Open bool `json:"open"`
Status ChangeStatus `json:"status"`
Private bool `json:"private"`
WIP bool `json:"wip"`
Comments []Message `json:"comments"`
TrackingIDs []TrackingID `json:"trackingIds"`
CurrentPatchSet *PatchSet `json:"currentPatchSet"`
PatchSets []PatchSet `json:"patchSets"`
DependsOn []Dependency `json:"dependsOn"`
NeededBy []Dependency `json:"neededBy"`
SubmitRecords []SubmitRecord `json:"submitRecord"`
AllReviewers []Account `json:"allReviewers"`
}
// RefUpdate represents a change in a ref.
type RefUpdate struct {
OldRev string `json:"oldRev"`
NewRev string `json:"newRev"`
RefName string `json:"refName"`
Project string `json:"project"`
}
|