Merge "Document skipping default submit rule if project has prolog rules"
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts
index 9f0c780..931579b 100644
--- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts
@@ -165,7 +165,14 @@
<section
class$="[[_computeDisplayState(_showAllSections, change, _SECTION.OWNER)]]"
>
- <span class="title">Owner</span>
+ <span class="title">
+ <gr-tooltip-content
+ has-tooltip=""
+ title="This user created or uploaded the first patchset of this change."
+ >
+ Owner
+ </gr-tooltip-content>
+ </span>
<span class="value">
<gr-account-chip
account="[[change.owner]]"
@@ -187,7 +194,14 @@
</span>
</section>
<section class$="[[_computeShowRoleClass(change, _CHANGE_ROLE.UPLOADER)]]">
- <span class="title">Uploader</span>
+ <span class="title">
+ <gr-tooltip-content
+ has-tooltip=""
+ title="This user uploaded the patchset to Gerrit (typically by running the 'git push' command)."
+ >
+ Uploader
+ </gr-tooltip-content>
+ </span>
<span class="value">
<gr-account-chip
account="[[_getNonOwnerRole(change, _CHANGE_ROLE.UPLOADER)]]"
@@ -197,7 +211,14 @@
</span>
</section>
<section class$="[[_computeShowRoleClass(change, _CHANGE_ROLE.AUTHOR)]]">
- <span class="title">Author</span>
+ <span class="title">
+ <gr-tooltip-content
+ has-tooltip=""
+ title="This user wrote the code change."
+ >
+ Author
+ </gr-tooltip-content>
+ </span>
<span class="value">
<gr-account-chip
account="[[_getNonOwnerRole(change, _CHANGE_ROLE.AUTHOR)]]"
@@ -206,7 +227,14 @@
</span>
</section>
<section class$="[[_computeShowRoleClass(change, _CHANGE_ROLE.COMMITTER)]]">
- <span class="title">Committer</span>
+ <span class="title">
+ <gr-tooltip-content
+ has-tooltip=""
+ title="This user committed the code change to the Git repository (typically to the local Git repo before uploading)."
+ >
+ Committer
+ </gr-tooltip-content>
+ </span>
<span class="value">
<gr-account-chip
account="[[_getNonOwnerRole(change, _CHANGE_ROLE.COMMITTER)]]"
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts
index 89983ad..59338df 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts
@@ -309,12 +309,12 @@
as="headerEndpoint"
>
<gr-endpoint-decorator name$="[[headerEndpoint]]" role="columnheader">
- <gr-endpoint-param
- name="change"
- value="[[change]]"
- ></gr-endpoint-param>
+ <gr-endpoint-param name="change" value="[[change]]">
+ </gr-endpoint-param>
<gr-endpoint-param name="patchRange" value="[[patchRange]]">
</gr-endpoint-param>
+ <gr-endpoint-param name="files" value="[[_files]]">
+ </gr-endpoint-param>
</gr-endpoint-decorator>
</template>
</template>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-image-viewer/gr-image-viewer.ts b/polygerrit-ui/app/elements/diff/gr-diff-image-viewer/gr-image-viewer.ts
index a1e89f5..1d6bc95 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-image-viewer/gr-image-viewer.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-image-viewer/gr-image-viewer.ts
@@ -51,6 +51,8 @@
const DEFAULT_AUTOMATIC_BLINK_TIME_MS = 1000;
+const AUTOMATIC_BLINK_BUTTON_ACTIVE_AREA_PIXELS = 350;
+
/**
* This components allows the user to rapidly switch between two given images
* rendered in the same location, to make subtle differences more noticeable.
@@ -78,6 +80,8 @@
@internalProperty() protected automaticBlink = false;
+ @internalProperty() protected automaticBlinkShown = false;
+
@internalProperty() protected zoomedImageStyle: StyleInfo = {};
@query('.imageArea') protected imageArea!: HTMLDivElement;
@@ -86,6 +90,8 @@
@query('#source-image') protected sourceImage!: HTMLImageElement;
+ @query('#automatic-blink-button') protected automaticBlinkButton?: Element;
+
private imageSize: Dimensions = {width: 0, height: 0};
@internalProperty()
@@ -188,14 +194,7 @@
gr-zoomed-image.revision {
border-color: var(--revision-image-border-color, rgb(170, 242, 170));
}
- .automatic-blink-area {
- position: absolute;
- width: 30%;
- height: 100%;
- right: 0;
- bottom: 0;
- }
- .automatic-blink-button {
+ #automatic-blink-button {
position: absolute;
right: var(--spacing-xl);
bottom: var(--spacing-xl);
@@ -206,8 +205,8 @@
--primary-button-background-color
);
}
- .automatic-blink-area:hover .automatic-blink-button,
- .automatic-blink-button:focus-visible {
+ #automatic-blink-button.show,
+ #automatic-blink-button:focus-visible {
opacity: 1;
}
.checkerboard {
@@ -492,15 +491,14 @@
`;
const automaticBlink = html`
- <div class="automatic-blink-area">
- <paper-fab
- class="automatic-blink-button"
- title="Automatic blink"
- icon="gr-icons:${this.automaticBlink ? 'pause' : 'playArrow'}"
- @click="${this.toggleAutomaticBlink}"
- >
- </paper-fab>
- </div>
+ <paper-fab
+ id="automatic-blink-button"
+ class="${classMap({show: this.automaticBlinkShown})}"
+ title="Automatic blink"
+ icon="gr-icons:${this.automaticBlink ? 'pause' : 'playArrow'}"
+ @click="${this.toggleAutomaticBlink}"
+ >
+ </paper-fab>
`;
// To pass CSS mixins for @apply to Polymer components, they need to be
@@ -564,7 +562,11 @@
return html`
${customStyle}
- <div class="imageArea" @mousemove="${this.mousemoveMagnifier}">
+ <div
+ class="imageArea"
+ @mousemove="${this.mousemoveImageArea}"
+ @mouseleave="${this.mouseleaveImageArea}"
+ >
<gr-zoomed-image
class="${classMap({
base: this.baseSelected,
@@ -699,6 +701,28 @@
);
}
+ mousemoveImageArea(event: MouseEvent) {
+ if (this.automaticBlinkButton) {
+ this.updateAutomaticBlinkVisibility(event);
+ }
+ this.mousemoveMagnifier(event);
+ }
+
+ private updateAutomaticBlinkVisibility(event: MouseEvent) {
+ const rect = this.automaticBlinkButton!.getBoundingClientRect();
+ const centerX = rect.left + (rect.right - rect.left) / 2;
+ const centerY = rect.top + (rect.bottom - rect.top) / 2;
+ const distX = Math.abs(centerX - event.clientX);
+ const distY = Math.abs(centerY - event.clientY);
+ this.automaticBlinkShown =
+ distX < AUTOMATIC_BLINK_BUTTON_ACTIVE_AREA_PIXELS &&
+ distY < AUTOMATIC_BLINK_BUTTON_ACTIVE_AREA_PIXELS;
+ }
+
+ mouseleaveImageArea() {
+ this.automaticBlinkShown = false;
+ }
+
mousedownMagnifier(event: MouseEvent) {
if (event.buttons === 1) {
this.ownsMouseDown = true;
diff --git a/polygerrit-ui/app/services/app-context-init.ts b/polygerrit-ui/app/services/app-context-init.ts
index dab894e..9af86d2 100644
--- a/polygerrit-ui/app/services/app-context-init.ts
+++ b/polygerrit-ui/app/services/app-context-init.ts
@@ -73,7 +73,7 @@
authService: () => new Auth(appContext.eventEmitter),
restApiService: () => new GrRestApiInterface(appContext.authService),
changeService: () => new ChangeService(),
- checksService: () => new ChecksService(),
+ checksService: () => new ChecksService(appContext.reportingService),
jsApiService: () => new GrJsApiInterface(),
storageService: () => new GrStorageService(),
configService: () => new ConfigService(),
diff --git a/polygerrit-ui/app/services/checks/checks-service.ts b/polygerrit-ui/app/services/checks/checks-service.ts
index 250cea5..c517fb89 100644
--- a/polygerrit-ui/app/services/checks/checks-service.ts
+++ b/polygerrit-ui/app/services/checks/checks-service.ts
@@ -54,6 +54,7 @@
import {getCurrentRevision} from '../../utils/change-util';
import {getShaByPatchNum} from '../../utils/patch-set-util';
import {assertIsDefined} from '../../utils/common-util';
+import {ReportingService} from '../gr-reporting/gr-reporting';
export class ChecksService {
private readonly providers: {[name: string]: ChecksProvider} = {};
@@ -64,7 +65,7 @@
private readonly documentVisibilityChange$ = new BehaviorSubject(undefined);
- constructor() {
+ constructor(readonly reporting: ReportingService) {
checkToPluginMap$.subscribe(map => {
this.checkToPluginMap = map;
});
@@ -150,8 +151,7 @@
commmitMessage: getCurrentRevision(change)?.commit?.message,
changeInfo: change,
};
- updateStateSetLoading(pluginName);
- return from(this.providers[pluginName].fetch(data));
+ return this.fetchResults(pluginName, data);
}
),
catchError(e => {
@@ -183,4 +183,16 @@
}
});
}
+
+ private fetchResults(pluginName: string, data: ChangeData) {
+ updateStateSetLoading(pluginName);
+ const timer = this.reporting.getTimer('ChecksPluginFetch');
+ const fetchPromise = this.providers[pluginName]
+ .fetch(data)
+ .then(response => {
+ timer.end({pluginName});
+ return response;
+ });
+ return from(fetchPromise);
+ }
}
diff --git a/polygerrit-ui/app/services/gr-reporting/gr-reporting.ts b/polygerrit-ui/app/services/gr-reporting/gr-reporting.ts
index d7081ce..bbdb02a 100644
--- a/polygerrit-ui/app/services/gr-reporting/gr-reporting.ts
+++ b/polygerrit-ui/app/services/gr-reporting/gr-reporting.ts
@@ -24,7 +24,7 @@
export interface Timer {
reset(): this;
- end(): this;
+ end(eventDetails?: EventDetails): this;
withMaximum(maximum: number): this;
}
diff --git a/polygerrit-ui/app/services/gr-reporting/gr-reporting_impl.ts b/polygerrit-ui/app/services/gr-reporting/gr-reporting_impl.ts
index 5fd4234..4e6ece2 100644
--- a/polygerrit-ui/app/services/gr-reporting/gr-reporting_impl.ts
+++ b/polygerrit-ui/app/services/gr-reporting/gr-reporting_impl.ts
@@ -713,7 +713,7 @@
},
// Stop the timer and report the intervening time.
- end: () => {
+ end: (eventDetails?: EventDetails) => {
if (called) {
throw new Error(`Timer for "${name}" already ended.`);
}
@@ -725,7 +725,7 @@
return timer;
}
- this._reportTiming(name, time);
+ this._reportTiming(name, time, eventDetails);
return timer;
},