diff --git a/changelogs/unreleased/dz-move-mr-routes-2.yml b/changelogs/unreleased/dz-move-mr-routes-2.yml new file mode 100644 index 0000000000000000000000000000000000000000..60a77149ab1e0ce3bd58bee90d22c1d455f04fa3 --- /dev/null +++ b/changelogs/unreleased/dz-move-mr-routes-2.yml @@ -0,0 +1,5 @@ +--- +title: Copy merge request routes to the - scope +merge_request: 22082 +author: +type: changed diff --git a/config/routes/merge_requests.rb b/config/routes/merge_requests.rb new file mode 100644 index 0000000000000000000000000000000000000000..fd80c21deb1a01020bb19c31ced60569f6fcd990 --- /dev/null +++ b/config/routes/merge_requests.rb @@ -0,0 +1,76 @@ +# frozen_string_literal: true +resources :merge_requests, concerns: :awardable, except: [:new, :create, :show], constraints: { id: /\d+/ } do + member do + get :show # Insert this first to ensure redirections using merge_requests#show match this route + get :commit_change_content + post :merge + post :cancel_auto_merge + get :pipeline_status + get :ci_environments_status + post :toggle_subscription + post :remove_wip + post :assign_related_issues + get :discussions, format: :json + post :rebase + get :test_reports + get :exposed_artifacts + + scope constraints: ->(req) { req.format == :json }, as: :json do + get :commits + get :pipelines + get :diffs, to: 'merge_requests/diffs#show' + get :diffs_batch, to: 'merge_requests/diffs#diffs_batch' + get :diffs_metadata, to: 'merge_requests/diffs#diffs_metadata' + get :widget, to: 'merge_requests/content#widget' + get :cached_widget, to: 'merge_requests/content#cached_widget' + end + + scope action: :show do + get :commits, defaults: { tab: 'commits' } + get :pipelines, defaults: { tab: 'pipelines' } + get :diffs, defaults: { tab: 'diffs' } + end + + get :diff_for_path, controller: 'merge_requests/diffs' + + scope controller: 'merge_requests/conflicts' do + get :conflicts, action: :show + get :conflict_for_path + post :resolve_conflicts + end + end + + collection do + get :diff_for_path + post :bulk_update + end + + resources :discussions, only: [:show], constraints: { id: /\h{40}/ } do + member do + post :resolve + delete :resolve, action: :unresolve + end + end +end + +scope path: 'merge_requests', controller: 'merge_requests/creations' do + post '', action: :create, as: nil + + scope path: 'new', as: :new_merge_request do + get '', action: :new + + scope constraints: ->(req) { req.format == :json }, as: :json do + get :diffs + get :pipelines + end + + scope action: :new do + get :diffs, defaults: { tab: 'diffs' } + get :pipelines, defaults: { tab: 'pipelines' } + end + + get :diff_for_path + get :branch_from + get :branch_to + end +end diff --git a/config/routes/project.rb b/config/routes/project.rb index e8ad8ba2a635d9b6a258baa40a5cbd62f5fa8960..47dc549aa7c5ae68f1e3e21d551c1daef796bc4d 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -328,80 +328,15 @@ end end - resources :merge_requests, concerns: :awardable, except: [:new, :create, :show], constraints: { id: /\d+/ } do - member do - get :show # Insert this first to ensure redirections using merge_requests#show match this route - get :commit_change_content - post :merge - post :cancel_auto_merge - get :pipeline_status - get :ci_environments_status - post :toggle_subscription - post :remove_wip - post :assign_related_issues - get :discussions, format: :json - post :rebase - get :test_reports - get :exposed_artifacts - - scope constraints: ->(req) { req.format == :json }, as: :json do - get :commits - get :pipelines - get :diffs, to: 'merge_requests/diffs#show' - get :diffs_batch, to: 'merge_requests/diffs#diffs_batch' - get :diffs_metadata, to: 'merge_requests/diffs#diffs_metadata' - get :widget, to: 'merge_requests/content#widget' - get :cached_widget, to: 'merge_requests/content#cached_widget' - end - - scope action: :show do - get :commits, defaults: { tab: 'commits' } - get :pipelines, defaults: { tab: 'pipelines' } - get :diffs, defaults: { tab: 'diffs' } - end - - get :diff_for_path, controller: 'merge_requests/diffs' - - scope controller: 'merge_requests/conflicts' do - get :conflicts, action: :show - get :conflict_for_path - post :resolve_conflicts - end - end - - collection do - get :diff_for_path - post :bulk_update - end - - resources :discussions, only: [:show], constraints: { id: /\h{40}/ } do - member do - post :resolve - delete :resolve, action: :unresolve - end - end - end - - scope path: 'merge_requests', controller: 'merge_requests/creations' do - post '', action: :create, as: nil - - scope path: 'new', as: :new_merge_request do - get '', action: :new - - scope constraints: ->(req) { req.format == :json }, as: :json do - get :diffs - get :pipelines - end - - scope action: :new do - get :diffs, defaults: { tab: 'diffs' } - get :pipelines, defaults: { tab: 'pipelines' } - end - - get :diff_for_path - get :branch_from - get :branch_to - end + # Unscoped route. It will be replaced with redirect to /-/merge_requests/ + # Issue https://gitlab.com/gitlab-org/gitlab/issues/118849 + draw :merge_requests + + # To ensure an old unscoped routing is used for the UI we need to + # add prefix 'as' to the scope routing and place it below original MR routing. + # Issue https://gitlab.com/gitlab-org/gitlab/issues/118849 + scope '-', as: 'scoped' do + draw :merge_requests end resources :pipelines, only: [:index, :new, :create, :show] do diff --git a/ee/config/routes/merge_requests_ee.rb b/ee/config/routes/merge_requests_ee.rb new file mode 100644 index 0000000000000000000000000000000000000000..5e72ad51ab9fa061bf7e06c36f82cc5385f48539 --- /dev/null +++ b/ee/config/routes/merge_requests_ee.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +resources :merge_requests, only: [], constraints: { id: /\d+/ } do + member do + get '/descriptions/:version_id/diff', action: :description_diff, as: :description_diff + get :metrics_reports + get :license_management_reports + get :container_scanning_reports + get :dependency_scanning_reports + get :sast_reports + get :dast_reports + + get :approvals + post :approvals, action: :approve + delete :approvals, action: :unapprove + + post :rebase + end + + resources :approvers, only: :destroy + delete 'approvers', to: 'approvers#destroy_via_user_id', as: :approver_via_user_id + resources :approver_groups, only: :destroy + + scope module: :merge_requests do + resources :drafts, only: [:index, :update, :create, :destroy] do + collection do + post :publish + delete :discard + end + end + end +end diff --git a/ee/config/routes/project.rb b/ee/config/routes/project.rb index 391857bd71ffb542cbafd7630f31fdb80e392450..6e1dd8e5fd0e764c3b4895f2a7ab1866bb03c18b 100644 --- a/ee/config/routes/project.rb +++ b/ee/config/routes/project.rb @@ -137,35 +137,15 @@ get '/service_desk' => 'service_desk#show', as: :service_desk put '/service_desk' => 'service_desk#update', as: :service_desk_refresh - resources :merge_requests, only: [], constraints: { id: /\d+/ } do - member do - get '/descriptions/:version_id/diff', action: :description_diff, as: :description_diff - get :metrics_reports - get :license_management_reports - get :container_scanning_reports - get :dependency_scanning_reports - get :sast_reports - get :dast_reports - - get :approvals - post :approvals, action: :approve - delete :approvals, action: :unapprove - - post :rebase - end - - resources :approvers, only: :destroy - delete 'approvers', to: 'approvers#destroy_via_user_id', as: :approver_via_user_id - resources :approver_groups, only: :destroy - - scope module: :merge_requests do - resources :drafts, only: [:index, :update, :create, :destroy] do - collection do - post :publish - delete :discard - end - end - end + # Unscoped route. It will be replaced with redirect to /-/merge_requests/ + # Issue https://gitlab.com/gitlab-org/gitlab/issues/118849 + draw :merge_requests_ee + + # To ensure an old unscoped routing is used for the UI we need to + # add prefix 'as' to the scope routing and place it below original MR routing. + # Issue https://gitlab.com/gitlab-org/gitlab/issues/118849 + scope '-', as: 'scoped' do + draw :merge_requests_ee end post '/restore' => '/projects#restore', as: :restore diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb index 287db20448aca0b5646a28c15b006102f9fdb6e3..b736d58bf58464dd7905aff1ba5d351e25e27876 100644 --- a/spec/routing/project_routing_spec.rb +++ b/spec/routing/project_routing_spec.rb @@ -314,6 +314,12 @@ expect(get('/gitlab/gitlabhq/merge_requests/1/pipelines')).to route_to('projects/merge_requests#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: '1', tab: 'pipelines') end + it 'to #show from scoped route' do + expect(get('/gitlab/gitlabhq/-/merge_requests/1.diff')).to route_to('projects/merge_requests#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: '1', format: 'diff') + expect(get('/gitlab/gitlabhq/-/merge_requests/1.patch')).to route_to('projects/merge_requests#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: '1', format: 'patch') + expect(get('/gitlab/gitlabhq/-/merge_requests/1/diffs')).to route_to('projects/merge_requests#show', namespace_id: 'gitlab', project_id: 'gitlabhq', id: '1', tab: 'diffs') + end + it_behaves_like 'RESTful project resources' do let(:controller) { 'merge_requests' } let(:actions) { [:index, :edit, :show, :update] }