blob: a8fc01fdef2dae1a58713aef5b590b921370c75f [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
ChangeStatus,
FileInfoStatus,
GpgKeyInfoStatus,
ProblemInfoStatus,
RequirementStatus,
ReviewerState,
RevisionKind,
} from '../constants/constants';
export type BrandType<T, BrandName extends string> = T &
{[__brand in BrandName]: never};
export type PatchSetNum = BrandType<'edit' | number, '_patchSet'>;
export type ChangeId = BrandType<string, '_changeId'>;
export type ChangeMessageId = BrandType<string, '_changeMessageId'>;
export type LegacyChangeId = BrandType<number, '_legacyChangeId'>;
export type NumericChangeId = BrandType<number, '_numericChangeId'>;
export type ProjectName = BrandType<string, '_projectName'>;
export type TopicName = BrandType<string, '_topicName'>;
export type AccountId = BrandType<number, '_accountId'>;
export type HttpMethod = BrandType<string, '_httpMethod'>;
export type GitRef = BrandType<string, '_gitRef'>;
export type RequirementType = BrandType<string, '_requirementType'>;
export type TrackingId = BrandType<string, '_trackingId'>;
export type ReviewInputTag = BrandType<string, '_reviewInputTag'>;
// The 8-char hex GPG key ID.
export type GpgKeyId = BrandType<string, '_gpgKeyId'>;
// The 40-char (plus spaces) hex GPG key fingerprint
export type GpgKeyFingerprint = BrandType<string, '_gpgKeyFingerprint'>;
// OpenPGP User IDs (https://tools.ietf.org/html/rfc4880#section-5.11).
export type OpenPgpUserIds = BrandType<string, '_openPgpUserIds'>;
// This ID is equal to the numeric ID of the change that triggered the
// submission. If the change that triggered the submission also has a topic, it
// will be "<id>-<topic>" of the change that triggered the submission
// The callers must not rely on the format of the submission ID.
export type ChangeSubmissionId = BrandType<
string | number,
'_changeSubmissionId'
>;
// The refs/heads/ prefix is omitted in Branch name
export type BranchName = BrandType<string, '_branchName'>;
// The ID of the change in the format "'<project>~<branch>~<Change-Id>'"
export type ChangeInfoId = BrandType<string, '_changeInfoId'>;
export type Hashtag = BrandType<string, '_hashtag'>;
export type StarLabel = BrandType<string, '_startLabel'>;
export type SubmitType = BrandType<string, '_submitType'>;
export type CommitId = BrandType<string, '_commitId'>;
// The timezone offset from UTC in minutes
export type TimezoneOffset = BrandType<number, '_timezoneOffset'>;
// Timestamps are given in UTC and have the format
// "'yyyy-mm-dd hh:mm:ss.fffffffff'"
// where "'ffffffffff'" represents nanoseconds.
export type Timestamp = BrandType<string, '_timestamp'>;
export type IdToAttentionSetMap = {[accountId: string]: AttentionSetInfo};
export type LabelNameToInfoMap = {[labelName: string]: LabelInfo};
// The map maps the values (“-2”, “-1”, " `0`", “+1”, “+2”) to the value descriptions.
export type LabelValueToDescriptionMap = {[labelValue: string]: string};
/**
* The LabelInfo entity contains information about a label on a change, always corresponding to the current patch set.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#label-info
*/
type LabelInfo = QuickLabelInfo | DetailedLabelInfo;
interface LabelCommonInfo {
optional?: boolean; // not set if false
}
export interface QuickLabelInfo extends LabelCommonInfo {
approved?: AccountInfo;
rejected?: AccountInfo;
recommended?: AccountInfo;
disliked?: AccountInfo;
blocking?: boolean; // not set if false
value?: number; // The voting value of the user who recommended/disliked this label on the change if it is not “+1”/“-1”.
default_value?: number;
}
export interface DetailedLabelInfo extends LabelCommonInfo {
all?: ApprovalInfo[];
values?: LabelValueToDescriptionMap; // A map of all values that are allowed for this label
}
/**
* The ChangeInfo entity contains information about a change.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#change-info
*/
export interface ChangeInfo {
id: ChangeInfoId;
project: ProjectName;
branch: BranchName;
topic?: TopicName;
attention_set?: IdToAttentionSetMap;
assignee?: AccountInfo;
hashtags?: Hashtag[];
change_id: ChangeId;
subject: string;
status: ChangeStatus;
created: Timestamp;
updated: Timestamp;
submitted?: Timestamp;
submitter: AccountInfo;
starred?: boolean; // not set if false
stars?: StarLabel[];
reviewed?: boolean; // not set if false
submit_type?: SubmitType;
mergeable?: boolean;
submittable?: boolean;
insertions: number; // Number of inserted lines
deletions: number; // Number of deleted lines
total_comment_count?: number;
unresolved_comment_count?: number;
_number: LegacyChangeId;
owner: AccountInfo;
actions?: ActionInfo[];
requirements?: Requirement[];
labels?: LabelInfo[];
permitted_labels?: LabelNameToInfoMap;
removable_reviewers?: AccountInfo[];
reviewers?: AccountInfo[];
pending_reviewers?: AccountInfo[];
reviewer_updates?: ReviewerUpdateInfo[];
messages?: ChangeMessageInfo[];
current_revision?: CommitId;
revisions?: {[revisionId: string]: RevisionInfo};
tracking_ids?: TrackingIdInfo[];
_more_changes?: boolean; // not set if false
problems?: ProblemInfo[];
is_private?: boolean; // not set if false
work_in_progress?: boolean; // not set if false
has_review_started?: boolean; // not set if false
revert_of?: NumericChangeId;
submission_id?: ChangeSubmissionId;
cherry_pick_of_change?: NumericChangeId;
cherry_pick_of_patch_set?: PatchSetNum;
contains_git_conflicts?: boolean;
}
/**
* The AccountInfo entity contains information about an account.
* https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#account-info
*/
export interface AccountInfo {
_account_id: AccountId;
name?: string;
display_name?: string;
email?: string;
secondary_emails?: string[];
username?: string;
avatars?: AvatarInfo[];
_more_accounts?: boolean; // not set if false
status?: string; // status message of the account
inactive?: boolean; // not set if false
}
/**
* The ActionInfo entity describes a REST API call the client canmake to
* manipulate a resource. These are frequently implemented by plugins and may
* be discovered at runtime.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#action-info
*/
export interface ActionInfo {
method?: HttpMethod; // Most actions use POST, PUT or DELETE to cause state changes.
label?: string; // Short title to display to a user describing the action
title?: string; // Longer text to display describing the action
enabled?: boolean; // not set if false
}
/**
* The Requirement entity contains information about a requirement relative to
* a change.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#requirement
*/
export interface Requirement {
status: RequirementStatus;
fallbackText: string; // A human readable reason
type: RequirementType;
}
/**
* The ReviewerUpdateInfo entity contains information about updates tochange’s
* reviewers set.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#review-update-info
*/
export interface ReviewerUpdateInfo {
updated: Timestamp;
updated_by: AccountInfo;
reviewer: AccountInfo;
state: ReviewerState;
}
/**
* The ChangeMessageInfo entity contains information about a messageattached
* to a change.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#change-message-info
*/
export interface ChangeMessageInfo {
id: ChangeMessageId;
author?: AccountInfo;
real_author?: AccountInfo;
date: Timestamp;
message: string;
tag?: ReviewInputTag;
_revision_number?: PatchSetNum;
}
/**
* The RevisionInfo entity contains information about a patch set.Not all
* fields are returned by default. Additional fields can be obtained by
* adding o parameters as described in Query Changes.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#revision-info
*/
export interface RevisionInfo {
kind: RevisionKind;
_number: PatchSetNum;
created: Timestamp;
uploader: AccountInfo;
ref: GitRef;
fetch?: {[protocol: string]: FetchInfo};
commit?: CommitInfo;
files?: {[filename: string]: FileInfo};
actions?: ActionInfo[];
reviewed?: boolean;
commit_with_footers?: boolean;
push_certificate?: PushCertificateInfo;
description?: string;
}
/**
* The TrackingIdInfo entity describes a reference to an external tracking
* system.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#tracking-id-info
*/
export interface TrackingIdInfo {
system: string;
id: TrackingId;
}
/**
* The ProblemInfo entity contains a description of a potential consistency
* problem with a change. These are not related to the code review process,
* but rather indicate some inconsistency in Gerrit’s database or repository
* metadata related to the enclosing change.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#problem-info
*/
export interface ProblemInfo {
message: string;
status?: ProblemInfoStatus; // Only set if a fix was attempted
outcome?: string;
}
/**
* The AttentionSetInfo entity contains details of users that are in the attention set.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#attention-set-info
*/
export interface AttentionSetInfo {
account: AccountInfo;
last_update: Timestamp;
}
/**
* The ApprovalInfo entity contains information about an approval from auser
* for a label on a change.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#approval-info
*/
export interface ApprovalInfo extends AccountInfo {
value?: string;
permitted_voting_range?: VotingRangeInfo;
date?: Timestamp;
tag?: ReviewInputTag;
post_submit?: boolean; // not set if false
}
/**
* The AvartarInfo entity contains information about an avatar image ofan
* account.
* https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#avatar-info
*/
export interface AvatarInfo {
url: string;
height: number;
width: number;
}
/**
* The FetchInfo entity contains information about how to fetch a patchset via
* a certain protocol.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#fetch-info
*/
export interface FetchInfo {
url: string;
ref: string;
commands?: {[commandName: string]: string};
}
/**
* The CommitInfo entity contains information about a commit.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#commit-info
*/
export interface CommitInfo {
commit?: CommitId;
parents: ParentCommitInfo[];
author: GitPersonInfo;
committer: GitPersonInfo;
subject: string;
message: string;
web_links?: WebLinkInfo[];
}
/**
* The parent commits of this commit as a list of CommitInfo entities.
* In each parent only the commit and subject fields are populated.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#commit-info
*/
export interface ParentCommitInfo {
commit: CommitId;
subject: string;
}
/**
* The FileInfo entity contains information about a file in a patch set.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#file-info
*/
export interface FileInfo {
status?: FileInfoStatus;
binary?: boolean; // not set if false
old_path?: string;
lines_inserted?: number;
lines_deleted?: number;
size_delta: number; // in bytes
size: number; // in bytes
}
/**
* The PushCertificateInfo entity contains information about a pushcertificate
* provided when the user pushed for review with git push
* --signed HEAD:refs/for/<branch>. Only used when signed push is
* enabled on the server.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#push-certificate-info
*/
export interface PushCertificateInfo {
certificate: string;
key: GpgKeyInfo;
}
/**
* The GpgKeyInfo entity contains information about a GPG public key.
* https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#gpg-key-info
*/
export interface GpgKeyInfo {
id?: GpgKeyId;
fingerprint?: GpgKeyFingerprint;
user_ids?: OpenPgpUserIds[];
key?: string; // ASCII armored public key material
status?: GpgKeyInfoStatus;
problems?: string[];
}
/**
* The GitPersonInfo entity contains information about theauthor/committer of
* a commit.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#git-person-info
*/
export interface GitPersonInfo {
name: string;
email: string;
date: Timestamp;
tz: TimezoneOffset;
}
/**
* The WebLinkInfo entity describes a link to an external site.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#web-link-info
*/
export interface WebLinkInfo {
name: string;
url: string;
image_url: string;
}
/**
* The VotingRangeInfo entity describes the continuous voting range from minto
* max values.
* https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#voting-range-info
*/
export interface VotingRangeInfo {
min: number;
max: number;
}