Fix wrong user on merge train restart
What does this MR do and why?
Fixes Restarting failed merged train shows wrong user (#481889 - closed).
This MR ensures merge train GraphQL query is always fetched from network and not cached. A cached query led to the wrong user displayed in the query.
How to set up and validate locally
- Apply the patch
Preview.patch
Subject: [PATCH] Trigger merge train
---
Index: app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue (revision 051e68f6ee320cf1ab4fa049c4d76c673995ebe9)
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_auto_merge_enabled.vue (date 1729179130809)
@@ -16,11 +16,17 @@
name: 'MRWidgetAutoMergeEnabled',
apollo: {
state: {
+ notifyOnNetworkStatusChange: true,
query: autoMergeEnabledQuery,
fetchPolicy: fetchPolicies.NETWORK_ONLY,
variables() {
return this.mergeRequestQueryVariables;
},
+ result(response) {
+ if (response?.loading) {
+ console.log('fetching updated merge train state');
+ }
+ },
update: (data) => data.project,
},
},
Index: app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue
--- a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue (revision 051e68f6ee320cf1ab4fa049c4d76c673995ebe9)
+++ b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue (date 1729120280697)
@@ -47,6 +47,8 @@
import MrWidgetReadyToMerge from './components/states/new_ready_to_merge.vue';
import MergeChecks from './components/merge_checks.vue';
+let triggered = false;
+
export default {
// False positive i18n lint: https://gitlab.com/gitlab-org/frontend/eslint-plugin-i18n/issues/25
// eslint-disable-next-line @gitlab/require-i18n-strings
@@ -94,6 +96,16 @@
return this.pollInterval;
},
result(response) {
+ this.autoMergeSet = true;
+ this.$nextTick(() => {
+ if (!triggered) {
+ setTimeout(() => {
+ this.autoMergeSet = false;
+ }, 5000);
+ triggered = true;
+ }
+ });
+
// 7 is the value for when the network status is ready
if (response.networkStatus !== 7) return;
@@ -157,6 +169,7 @@
issuableId: false,
startingPollInterval: STATE_QUERY_POLLING_INTERVAL_DEFAULT,
pollInterval: STATE_QUERY_POLLING_INTERVAL_DEFAULT,
+ autoMergeSet: false,
};
},
computed: {
@@ -234,6 +247,7 @@
return this.hasMergeError || this.showMergePipelineForkWarning;
},
mergeBlockedComponentVisible() {
+ if (this.autoMergeSet) return true;
return !(
[
'checking',
@@ -249,6 +263,7 @@
);
},
autoMergeEnabled() {
+ if (this.autoMergeSet) return true;
return this.mr.autoMergeEnabled;
},
},
- Open browser console
- Go to any merge request that has pipelines
- Observe that
fetching updated merge train state
is logged twice
Edited by Stanislav Lashmanov