summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui
diff options
context:
space:
mode:
Diffstat (limited to 'polygerrit-ui')
-rw-r--r--polygerrit-ui/app/api/rest-api.ts3
-rw-r--r--polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts2
-rw-r--r--polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts13
-rw-r--r--polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row.ts4
-rw-r--r--polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_html.ts2
-rw-r--r--polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores.ts18
-rw-r--r--polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-change.ts9
-rw-r--r--polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts12
-rw-r--r--polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts11
-rw-r--r--polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts6
-rw-r--r--polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status.ts3
-rw-r--r--polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status_html.ts12
-rw-r--r--polygerrit-ui/app/styles/themes/app-theme.ts3
-rw-r--r--polygerrit-ui/app/styles/themes/dark-theme.ts3
-rw-r--r--polygerrit-ui/app/utils/access-util.ts5
-rw-r--r--polygerrit-ui/app/utils/change-util.ts9
-rw-r--r--polygerrit-ui/app/utils/message-util.ts11
17 files changed, 119 insertions, 7 deletions
diff --git a/polygerrit-ui/app/api/rest-api.ts b/polygerrit-ui/app/api/rest-api.ts
index 3d1008c7d3..34a5afe06d 100644
--- a/polygerrit-ui/app/api/rest-api.ts
+++ b/polygerrit-ui/app/api/rest-api.ts
@@ -54,6 +54,9 @@ export enum ChangeStatus {
ABANDONED = 'ABANDONED',
MERGED = 'MERGED',
NEW = 'NEW',
+ DEFERRED = 'DEFERRED',
+ INTEGRATING = 'INTEGRATING',
+ STAGED = 'STAGED',
}
/**
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
index a79dd8ea0d..e8f1aa5f28 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
@@ -52,7 +52,7 @@ import {ScrollMode} from '../../../constants/constants';
import {listen} from '../../../services/shortcuts/shortcuts-service';
const NUMBER_FIXED_COLUMNS = 3;
-const CLOSED_STATUS = ['MERGED', 'ABANDONED'];
+const CLOSED_STATUS = ['MERGED', 'ABANDONED', 'DEFERRED', 'INTEGRATING', 'STAGED'];
const LABEL_PREFIX_INVALID_PROLOG = 'Invalid-Prolog-Rules-Label-Name--';
const MAX_SHORTCUT_CHARS = 5;
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
index b635d3f6da..911f7c4640 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
@@ -216,6 +216,9 @@ const ReloadToastMessage = {
ABANDONED: 'This change has been abandoned',
MERGED: 'This change has been merged',
NEW_MESSAGE: 'There are new messages on this change',
+ STAGED: 'This change has been staged',
+ INTEGRATING: 'This change is now integrating',
+ DEFERRED: 'This change has been deferred',
};
// Making the tab names more unique in case a plugin adds one with same name
@@ -1806,6 +1809,7 @@ export class GrChangeView extends base {
// if a change is deleted then getChanges returns null for that changeId
changes = changes.filter(
change => change && change.status !== ChangeStatus.ABANDONED
+ && change.status !== ChangeStatus.DEFERRED
);
if (!changes.length) return;
const submittedRevert = changes.find(
@@ -2202,6 +2206,9 @@ export class GrChangeView extends base {
// answer for abandoned changes.
if (
this._change.status === ChangeStatus.MERGED ||
+ this._change.status === ChangeStatus.STAGED ||
+ this._change.status === ChangeStatus.INTEGRATING ||
+ this._change.status === ChangeStatus.DEFERRED ||
this._change.status === ChangeStatus.ABANDONED
) {
this._mergeable = false;
@@ -2304,6 +2311,12 @@ export class GrChangeView extends base {
toastMessage = ReloadToastMessage.ABANDONED;
} else if (result.newStatus === ChangeStatus.NEW) {
toastMessage = ReloadToastMessage.RESTORED;
+ } else if (result.newStatus === ChangeStatus.STAGED) {
+ toastMessage = ReloadToastMessage.STAGED;
+ } else if (result.newStatus === ChangeStatus.INTEGRATING) {
+ toastMessage = ReloadToastMessage.INTEGRATING;
+ } else if (result.newStatus === ChangeStatus.DEFERRED) {
+ toastMessage = ReloadToastMessage.DEFERRED;
} else if (result.newMessages) {
toastMessage = ReloadToastMessage.NEW_MESSAGE;
if (result.newMessages.author?.name) {
diff --git a/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row.ts b/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row.ts
index 9a38095cac..dea06ee683 100644
--- a/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row.ts
+++ b/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row.ts
@@ -282,4 +282,8 @@ export class GrLabelScoreRow extends PolymerElement {
(labels[label] as DetailedLabelInfo).values![value]
);
}
+
+ _computeDecoratorName(preString: string, name: string) {
+ return preString + name.toLowerCase();
+ }
}
diff --git a/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_html.ts b/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_html.ts
index e57a2163f1..fbfb478cb2 100644
--- a/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_html.ts
+++ b/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_html.ts
@@ -99,6 +99,7 @@ export const htmlTemplate = html`
}
}
</style>
+ <gr-endpoint-decorator name$="[[_computeDecoratorName('review-label-scores-', label.name)]]">
<span class="labelNameCell" id="labelName" aria-hidden="true"
>[[label.name]]</span
>
@@ -157,4 +158,5 @@ export const htmlTemplate = html`
>
<span id="selectedValueLabel">[[_selectedValueText]]</span>
</div>
+ </gr-endpoint-decorator>
`;
diff --git a/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores.ts b/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores.ts
index a496be5bae..181ea16cb6 100644
--- a/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores.ts
+++ b/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores.ts
@@ -102,6 +102,24 @@ export class GrLabelScores extends LitElement {
?hidden=${this.change?.status !== ChangeStatus.ABANDONED}
>
Because this change has been abandoned, you cannot vote.
+ </div>
+ <div
+ class="abandonedMessage"
+ ?hidden=${this.change?.status !== ChangeStatus.DEFERRED}
+ >
+ Because this change has been deferred, you cannot vote.
+ </div>
+ <div
+ class="mergedMessage"
+ ?hidden=${this.change?.status !== ChangeStatus.STAGED}
+ >
+ Because this change is integrating, votes may not be decreased.
+ </div>
+ <div
+ class="mergedMessage"
+ ?hidden=${this.change?.status !== ChangeStatus.INTEGRATING}
+ >
+ Because this change is integrating, votes may not be decreased.
</div>`;
}
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-change.ts b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-change.ts
index e4703df2e6..99e9cb46d0 100644
--- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-change.ts
+++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-change.ts
@@ -132,7 +132,8 @@ export class GrRelatedChange extends LitElement {
_computeLinkClass(change: ChangeInfo | RelatedChangeAndCommitInfo) {
const statuses = [];
- if (change.status === ChangeStatus.ABANDONED) {
+ if (change.status === ChangeStatus.ABANDONED ||
+ change.status === ChangeStatus.DEFERRED) {
statuses.push('strikethrough');
}
if (change.submittable) {
@@ -161,6 +162,12 @@ export class GrRelatedChange extends LitElement {
return 'Merged';
case ChangeStatus.ABANDONED:
return 'Abandoned';
+ case ChangeStatus.DEFERRED:
+ return 'Deferred';
+ case ChangeStatus.INTEGRATING:
+ return 'Integrating';
+ case ChangeStatus.STAGED:
+ return 'Staged';
}
if (change._revision_number !== change._current_revision_number) {
return 'Not current';
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
index 9d34929723..ea2b92579d 100644
--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
@@ -58,10 +58,22 @@ const DEFAULT_LINKS: MainHeaderLinkGroup[] = [
name: 'Open',
},
{
+ url: '/q/status:staged',
+ name: 'Staged',
+ },
+ {
+ url: '/q/status:integrating',
+ name: 'Integrating',
+ },
+ {
url: '/q/status:merged',
name: 'Merged',
},
{
+ url: '/q/status:deferred',
+ name: 'Deferred',
+ },
+ {
url: '/q/status:abandoned',
name: 'Abandoned',
},
diff --git a/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts b/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts
index b8f2630c35..be030a8483 100644
--- a/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts
+++ b/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.ts
@@ -209,6 +209,14 @@ const CCED: DashboardSection = {
query: 'is:open -is:ignored -is:wip cc:${user}',
suffixForDashboard: 'limit:10',
};
+export const INTEGRATING: DashboardSection = {
+ name: 'Integrating',
+ query:
+ '(is:staged OR is:integrating) -is:ignored (-is:wip OR owner:self) ' +
+ '(owner:${user} OR reviewer:${user} OR assignee:${user} ' +
+ 'OR cc:${user})',
+ suffixForDashboard: 'limit:20',
+};
export const CLOSED: DashboardSection = {
name: 'Recently closed',
// Closed changes where viewed user is owner, reviewer, or assignee.
@@ -216,7 +224,7 @@ export const CLOSED: DashboardSection = {
// changes not owned by the viewing user (the one instance of
// 'owner:self' is intentional and implements this logic).
query:
- 'is:closed -is:ignored (-is:wip OR owner:self) ' +
+ '(is:merged OR is:abandoned OR is:deferred) -is:ignored (-is:wip OR owner:self) ' +
'(owner:${user} OR reviewer:${user} OR assignee:${user} ' +
'OR cc:${user})',
suffixForDashboard: '-age:4w limit:10',
@@ -229,6 +237,7 @@ const DEFAULT_SECTIONS: DashboardSection[] = [
OUTGOING,
INCOMING,
CCED,
+ INTEGRATING,
CLOSED,
];
diff --git a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts
index 2901b8a43b..add8d9bbdd 100644
--- a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts
+++ b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts
@@ -80,7 +80,9 @@ const SEARCH_OPERATORS: ReadonlyArray<string> = [
'is:attention',
'is:cherrypick',
'is:closed',
+ 'is:deferred',
'is:ignored',
+ 'is:integrating',
'is:merge',
'is:merged',
'is:open',
@@ -88,6 +90,7 @@ const SEARCH_OPERATORS: ReadonlyArray<string> = [
'is:private',
'is:reviewed',
'is:reviewer',
+ 'is:staged',
'is:starred',
'is:submittable',
'is:watched',
@@ -117,9 +120,12 @@ const SEARCH_OPERATORS: ReadonlyArray<string> = [
'status:',
'status:abandoned',
'status:closed',
+ 'status:deferred',
+ 'status:integrating',
'status:merged',
'status:open',
'status:reviewed',
+ 'status:staged',
'submissionid:',
'topic:',
'tr:',
diff --git a/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status.ts b/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status.ts
index 0bd02d55f9..eb467d5cca 100644
--- a/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status.ts
+++ b/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status.ts
@@ -37,6 +37,9 @@ export enum ChangeStates {
REVERT_CREATED = 'Revert Created',
REVERT_SUBMITTED = 'Revert Submitted',
WIP = 'WIP',
+ DEFERRED = 'Deferred',
+ INTEGRATING = 'Integrating',
+ STAGED = 'Staged',
}
const WIP_TOOLTIP =
diff --git a/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status_html.ts b/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status_html.ts
index 455bd4e0a9..168647ba07 100644
--- a/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status_html.ts
+++ b/polygerrit-ui/app/elements/shared/gr-change-status/gr-change-status_html.ts
@@ -32,6 +32,18 @@ export const htmlTemplate = html`
background-color: var(--status-abandoned);
color: var(--status-abandoned);
}
+ :host(.deferred) .chip {
+ background-color: var(--status-deferred);
+ color: var(--status-deferred);
+ }
+ :host(.integrating) .chip {
+ background-color: var(--status-integrating);
+ color: var(--status-integrating);
+ }
+ :host(.staged) .chip {
+ background-color: var(--status-staged);
+ color: var(--status-staged);
+ }
:host(.wip) .chip {
background-color: var(--status-wip);
color: var(--status-wip);
diff --git a/polygerrit-ui/app/styles/themes/app-theme.ts b/polygerrit-ui/app/styles/themes/app-theme.ts
index 8b00a79a46..c8dd8b5543 100644
--- a/polygerrit-ui/app/styles/themes/app-theme.ts
+++ b/polygerrit-ui/app/styles/themes/app-theme.ts
@@ -251,6 +251,9 @@ const styleSheet = safeStyleSheet`
/* status colors */
--status-merged: var(--green-700);
--status-abandoned: var(--gray-700);
+ --status-deferred: #5f6368;
+ --status-integrating: #999900;
+ --status-staged: #cccc00;
--status-wip: #795548;
--status-private: var(--purple-500);
--status-conflict: var(--red-600);
diff --git a/polygerrit-ui/app/styles/themes/dark-theme.ts b/polygerrit-ui/app/styles/themes/dark-theme.ts
index 05c6b7df2f..7415e34669 100644
--- a/polygerrit-ui/app/styles/themes/dark-theme.ts
+++ b/polygerrit-ui/app/styles/themes/dark-theme.ts
@@ -149,6 +149,9 @@ function getStyleEl() {
/* status colors */
--status-merged: var(--green-400);
--status-abandoned: var(--gray-300);
+ --status-deferred: #dadce0;
+ --status-integrating: #999900;
+ --status-staged: #cccc00;
--status-wip: #bcaaa4;
--status-private: var(--purple-200);
--status-conflict: var(--red-300);
diff --git a/polygerrit-ui/app/utils/access-util.ts b/polygerrit-ui/app/utils/access-util.ts
index 165eacf501..85131e607c 100644
--- a/polygerrit-ui/app/utils/access-util.ts
+++ b/polygerrit-ui/app/utils/access-util.ts
@@ -42,6 +42,7 @@ export enum AccessPermissionId {
SUBMIT_AS = 'submitAs',
TOGGLE_WIP_STATE = 'toggleWipState',
VIEW_PRIVATE_CHANGES = 'viewPrivateChanges',
+ QT_STAGE = 'stage',
PRIORITY = 'priority',
}
@@ -147,6 +148,10 @@ export const AccessPermissions: {[id: string]: AccessPermission} = {
id: AccessPermissionId.VIEW_PRIVATE_CHANGES,
name: 'View Private Changes',
},
+ [AccessPermissionId.QT_STAGE]: {
+ id: AccessPermissionId.QT_STAGE,
+ name: 'Stage',
+ },
};
export interface AccessPermission {
diff --git a/polygerrit-ui/app/utils/change-util.ts b/polygerrit-ui/app/utils/change-util.ts
index 278e7f3297..b43f427fa0 100644
--- a/polygerrit-ui/app/utils/change-util.ts
+++ b/polygerrit-ui/app/utils/change-util.ts
@@ -145,7 +145,8 @@ export function changeIsMerged(change?: ChangeInfo | ParsedChangeInfo | null) {
export function changeIsAbandoned(
change?: ChangeInfo | ParsedChangeInfo | null
) {
- return change?.status === ChangeStatus.ABANDONED;
+ return change?.status === ChangeStatus.ABANDONED ||
+ change?.status === ChangeStatus.DEFERRED;
}
export function changeStatuses(
@@ -157,6 +158,12 @@ export function changeStatuses(
states.push(ChangeStates.MERGED);
} else if (change.status === ChangeStatus.ABANDONED) {
states.push(ChangeStates.ABANDONED);
+ } else if (change.status === ChangeStatus.DEFERRED) {
+ states.push(ChangeStates.DEFERRED);
+ } else if (change.status === ChangeStatus.INTEGRATING) {
+ states.push(ChangeStates.INTEGRATING);
+ } else if (change.status === ChangeStatus.STAGED) {
+ states.push(ChangeStates.STAGED);
} else if (
change.mergeable === false ||
(opt_options && opt_options.mergeable === false)
diff --git a/polygerrit-ui/app/utils/message-util.ts b/polygerrit-ui/app/utils/message-util.ts
index 70dd286a71..7c236afed9 100644
--- a/polygerrit-ui/app/utils/message-util.ts
+++ b/polygerrit-ui/app/utils/message-util.ts
@@ -26,7 +26,12 @@ function getRevertChangeIdFromMessage(msg: ChangeMessageInfo): ChangeId {
}
export function getRevertCreatedChangeIds(messages: ChangeMessageInfo[]) {
- return messages
- .filter(m => m.tag === MessageTag.TAG_REVERT)
- .map(m => getRevertChangeIdFromMessage(m));
+ try {
+ return messages
+ .filter(m => m.tag === MessageTag.TAG_REVERT)
+ .map(m => getRevertChangeIdFromMessage(m));
+ }
+ catch(err) {
+ return [];
+ }
}