diff options
Diffstat (limited to 'polygerrit-ui')
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 []; + } } |