Skip to content

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

  1. 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;
     },
   },
  1. Open browser console
  2. Go to any merge request that has pipelines
  3. Observe that fetching updated merge train state is logged twice
Edited by Stanislav Lashmanov

Merge request reports

Loading