Make Rebase on behalf of uploader default value
This is under feature flag.
Release-Notes: skip
Google-Bug-Id: b/269731839
Change-Id: Ic34b6635a0114e8e59672bb96a4b65c5d7cc25c0
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
index 5604b95..3982666 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
@@ -24,6 +24,9 @@
import {throwingErrorCallback} from '../../shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper';
import {fireNoBubbleNoCompose} from '../../../utils/event-util';
import {KnownExperimentId} from '../../../services/flags/flags';
+import {resolve} from '../../../models/dependency';
+import {changeModelToken} from '../../../models/change/change-model';
+import {subscribe} from '../../lit/subscription-controller';
export interface RebaseChange {
name: string;
@@ -81,6 +84,12 @@
@state()
recentChanges?: RebaseChange[];
+ @state()
+ allowConflicts = false;
+
+ @state()
+ isOwner = false;
+
@query('#rebaseOnParentInput')
private rebaseOnParentInput!: HTMLInputElement;
@@ -90,9 +99,6 @@
@query('#rebaseOnOtherInput')
rebaseOnOtherInput!: HTMLInputElement;
- @query('#rebaseOnBehalfOfUploader')
- private rebaseOnBehalfOfUploader?: HTMLInputElement;
-
@query('#rebaseAllowConflicts')
private rebaseAllowConflicts!: HTMLInputElement;
@@ -106,9 +112,16 @@
private readonly flagsService = getAppContext().flagsService;
+ private readonly getChangeModel = resolve(this, changeModelToken);
+
constructor() {
super();
this.query = input => this.getChangeSuggestions(input);
+ subscribe(
+ this,
+ () => this.getChangeModel().isOwner$,
+ x => (this.isOwner = x)
+ );
}
override willUpdate(changedProperties: PropertyValues): void {
@@ -232,26 +245,31 @@
>
</gr-autocomplete>
</div>
- ${when(
- this.flagsService.isEnabled(
- KnownExperimentId.REBASE_ON_BEHALF_OF_UPLOADER
- ),
- () => html`
- <div class="rebaseCheckbox">
- <input id="rebaseOnBehalfOfUploader" type="checkbox" checked />
- <label for="rebaseOnBehalfOfUploader"
- >Rebase on behalf of uploader</label
- >
- </div>
- `
- )}
<div class="rebaseCheckbox">
- <input id="rebaseAllowConflicts" type="checkbox" />
+ <input
+ id="rebaseAllowConflicts"
+ type="checkbox"
+ @change=${() => {
+ this.allowConflicts = !!this.rebaseAllowConflicts?.checked;
+ }}
+ />
<label for="rebaseAllowConflicts"
>Allow rebase with conflicts</label
>
</div>
${when(
+ this.flagsService.isEnabled(
+ KnownExperimentId.REBASE_ON_BEHALF_OF_UPLOADER
+ ) &&
+ !this.isOwner &&
+ this.allowConflicts,
+ () =>
+ html`<span class="message"
+ >Rebase cannot be done on behalf of the uploader when allowing
+ conflicts.</span
+ >`
+ )}
+ ${when(
this.hasParent,
() =>
html`<div class="rebaseCheckbox">
@@ -371,12 +389,24 @@
base: this.getSelectedBase(),
allowConflicts: this.rebaseAllowConflicts.checked,
rebaseChain: !!this.rebaseChain?.checked,
- onBehalfOfUploader: !!this.rebaseOnBehalfOfUploader?.checked,
+ onBehalfOfUploader: this.rebaseOnBehalfOfUploader(),
};
fireNoBubbleNoCompose(this, 'confirm-rebase', detail);
this.text = '';
}
+ private rebaseOnBehalfOfUploader() {
+ if (
+ !this.flagsService.isEnabled(
+ KnownExperimentId.REBASE_ON_BEHALF_OF_UPLOADER
+ )
+ ) {
+ return false;
+ }
+ if (this.allowConflicts) return false;
+ return true;
+ }
+
private handleCancelTap(e: Event) {
e.preventDefault();
e.stopPropagation();
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts
index 79d8647..3064014 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts
@@ -81,12 +81,6 @@
</gr-autocomplete>
</div>
<div class="rebaseCheckbox">
- <input id="rebaseOnBehalfOfUploader" type="checkbox" checked="" />
- <label for="rebaseOnBehalfOfUploader">
- Rebase on behalf of uploader
- </label>
- </div>
- <div class="rebaseCheckbox">
<input id="rebaseAllowConflicts" type="checkbox" />
<label for="rebaseAllowConflicts">
Allow rebase with conflicts