Clicking the Resolve WIP Status button completely removes the Merge area
Reported by @rspeicher in Slack:
It looks like the problem is the POST /remove_wip
returns something like this:
{
"id":3210,
"iid":10,
"source_project_full_path":"root/test-ci3",
"target_project_full_path":"root/test-ci3",
"email_patches_path":"/root/test-ci3/-/merge_requests/10.patch",
"plain_diff_path":"/root/test-ci3/-/merge_requests/10.diff",
"merge_request_basic_path":"/root/test-ci3/-/merge_requests/10.json?serializer=basic",
"merge_request_widget_path":"/root/test-ci3/-/merge_requests/10/widget.json",
"merge_request_cached_widget_path":"/root/test-ci3/-/merge_requests/10/cached_widget.json",
"commit_change_content_path":"/root/test-ci3/-/merge_requests/10/commit_change_content",
"conflicts_docs_path":"/help/user/project/merge_requests/resolve_conflicts.md",
"merge_request_pipelines_docs_path":"/help/ci/merge_request_pipelines/index.md",
"ci_environments_status_path":"/root/test-ci3/-/merge_requests/10/ci_environments_status",
"human_access":"Maintainer",
"new_project_pipeline_path":"/root/test-ci3/pipelines/new",
"blob_path":{
"head_path":"/root/test-ci3/-/blob/529e2fdee347b34f4b860ce8cf74190c8d9565e1"
},
"enabled_reports":{
"sast":false,
"container_scanning":false,
"dast":false,
"dependency_scanning":false,
"license_scanning":false
},
"pipeline_id":5041,
"vulnerability_feedback_path":"/root/test-ci3/-/vulnerability_feedback",
"create_vulnerability_feedback_issue_path":"/root/test-ci3/-/vulnerability_feedback",
"create_vulnerability_feedback_merge_request_path":"/root/test-ci3/-/vulnerability_feedback",
"create_vulnerability_feedback_dismissal_path":"/root/test-ci3/-/vulnerability_feedback",
"has_approvals_available":true,
"api_approvals_path":"/api/v4/projects/143/merge_requests/10/approvals",
"api_approval_settings_path":"/api/v4/projects/143/merge_requests/10/approval_settings",
"api_approve_path":"/api/v4/projects/143/merge_requests/10/approve",
"api_unapprove_path":"/api/v4/projects/143/merge_requests/10/unapprove",
"merge_train_when_pipeline_succeeds_docs_path":"/help/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md#startadd-to-merge-train-when-pipeline-succeeds",
"merge_immediately_docs_path":"/help/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md#immediately-merge-a-merge-request-with-a-merge-train",
"blocking_merge_requests":{
"total_count":0,
"hidden_count":0,
"visible_merge_requests":{
}
}
}
But this is missing the data in cached_widget.json
:
{
"id":3210,
"iid":10,
"description":"",
"title":"asdfa",
"auto_merge_enabled":false,
"state":"opened",
"merge_commit_sha":null,
"short_merge_commit_sha":null,
"merge_error":null,
"merge_status":"can_be_merged",
"merge_user_id":null,
"source_branch":"cadsfasdf100",
"source_project_id":143,
"target_branch":"master",
"target_branch_sha":"59cc0e0b88aa9ba53a1b2691469a6d0eb61ff147",
"target_project_id":143,
"squash":false,
"rebase_in_progress":false,
"default_squash_commit_message":"asdfa",
"commits_count":1,
"merge_ongoing":false,
"work_in_progress":false,
"has_conflicts":false,
"can_be_merged":true,
"remove_source_branch":true,
"source_branch_exists":true,
"branch_missing":false,
"commits_without_merge_commits":[
{
"message":"asdfa",
"short_id":"529e2fde",
"title":"asdfa"
}
],
"diff_head_sha":"529e2fdee347b34f4b860ce8cf74190c8d9565e1",
"metrics":null,
"diverged_commits_count":0,
"target_branch_commits_path":"/root/test-ci3/-/commits/master",
"target_branch_tree_path":"/root/test-ci3/-/tree/master",
"merge_commit_path":null,
"source_branch_path":"/root/test-ci3/-/branches/cadsfasdf100",
"source_branch_with_namespace_link":"\u003ca href=\"/root/test-ci3/-/tree/cadsfasdf100\"\u003ecadsfasdf100\u003c/a\u003e",
"diffs_path":"/root/test-ci3/-/merge_requests/10/diffs",
"merge_train_when_pipeline_succeeds_docs_path":"/help/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md#startadd-to-merge-train-when-pipeline-succeeds"
}
Just as we did in !26232 (merged), a dirty workaround is just to request an update:
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
index 118caac84b9..b8389d3a632 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
@@ -39,6 +39,7 @@ export default {
.removeWIP()
.then(res => res.data)
.then(data => {
+ eventHub.$emit('MRWidgetUpdateRequested');
eventHub.$emit('UpdateWidgetData', data);
createFlash(__('The merge request can now be merged.'), 'notice');
$('.merge-request .detail-page-description .title').text(this.mr.title);
But there are a number of other ways to solve this:
- In https://gitlab.com/gitlab-org/gitlab/blob/56b86feceeddf9cb63c09ffb60108040cbc4d1ea/app/assets/javascripts/vue_merge_request_widget/stores/mr_widget_store.js#L17, don't overwrite data if we don't have it.
- Make the
/remove_wip
endpoint return all the data needed for the widget: https://gitlab.com/gitlab-org/gitlab/blob/301a92ff87ef40a9b510c346593e7bfb1c269079/app/controllers/projects/merge_requests_controller.rb#L187-191.
Edited by Stan Hu