From 10a4b4f2acd7095a43807315d140422e83ef80fe Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 25 Jan 2019 18:35:05 +0000 Subject: [PATCH] Merge branch 'osw-adjusts-suggestions-unable-to-be-applied' into 'master' Adjusts suggestions unable to be applied Closes #56690 See merge request gitlab-org/gitlab-ce!24603 (cherry picked from commit 7c7916baee74e2532e77a94b84e8775a6a8dc2e5) 1b93b3b6 Adjusts suggestions unable to be applied --- app/assets/javascripts/notes/stores/actions.js | 11 ++++++----- app/services/suggestions/apply_service.rb | 15 ++++++++------- ...w-adjusts-suggestions-unable-to-be-applied.yml | 5 +++++ spec/services/suggestions/apply_service_spec.rb | 7 +++---- 4 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js index 65f85314fa0..2105a62cecb 100644 --- a/app/assets/javascripts/notes/stores/actions.js +++ b/app/assets/javascripts/notes/stores/actions.js @@ -415,12 +415,13 @@ export const submitSuggestion = ( commit(types.APPLY_SUGGESTION, { discussionId, noteId, suggestionId }); callback(); }) - .catch(() => { - Flash( - __('Something went wrong while applying the suggestion. Please try again.'), - 'alert', - flashContainer, + .catch(err => { + const defaultMessage = __( + 'Something went wrong while applying the suggestion. Please try again.', ); + const flashMessage = err.response.data ? `${err.response.data.message}.` : defaultMessage; + + Flash(__(flashMessage), 'alert', flashContainer); callback(); }); }; diff --git a/app/services/suggestions/apply_service.rb b/app/services/suggestions/apply_service.rb index cc47b46b527..1f720fc835f 100644 --- a/app/services/suggestions/apply_service.rb +++ b/app/services/suggestions/apply_service.rb @@ -11,7 +11,7 @@ module Suggestions return error('Suggestion is not appliable') end - unless latest_diff_refs?(suggestion) + unless latest_source_head?(suggestion) return error('The file has been changed') end @@ -29,12 +29,13 @@ module Suggestions private - # Checks whether the latest diff refs for the branch matches with - # the position refs we're using to update the file content. Since - # the persisted refs are updated async (for MergeRequest), - # it's more consistent to fetch this data directly from the repository. - def latest_diff_refs?(suggestion) - suggestion.position.diff_refs == suggestion.noteable.repository_diff_refs + # Checks whether the latest source branch HEAD matches with + # the position HEAD we're using to update the file content. Since + # the persisted HEAD is updated async (for MergeRequest), + # it's more consistent to fetch this data directly from the + # repository. + def latest_source_head?(suggestion) + suggestion.position.head_sha == suggestion.noteable.source_branch_sha end def file_update_params(suggestion) diff --git a/changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml b/changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml new file mode 100644 index 00000000000..3ba62b92413 --- /dev/null +++ b/changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml @@ -0,0 +1,5 @@ +--- +title: Adjusts suggestions unable to be applied +merge_request: 24603 +author: +type: fixed diff --git a/spec/services/suggestions/apply_service_spec.rb b/spec/services/suggestions/apply_service_spec.rb index e5ca1c155ed..8e77d582eb4 100644 --- a/spec/services/suggestions/apply_service_spec.rb +++ b/spec/services/suggestions/apply_service_spec.rb @@ -134,12 +134,11 @@ describe Suggestions::ApplyService do end end - context 'when diff ref from position is different from repo diff refs' do + context 'when HEAD from position is different from source branch HEAD on repo' do it 'returns error message' do - outdated_refs = Gitlab::Diff::DiffRefs.new(base_sha: 'foo', start_sha: 'bar', head_sha: 'outdated') - allow(suggestion).to receive(:appliable?) { true } - allow(suggestion.position).to receive(:diff_refs) { outdated_refs } + allow(suggestion.position).to receive(:head_sha) { 'old-sha' } + allow(suggestion.noteable).to receive(:source_branch_sha) { 'new-sha' } result = subject.execute(suggestion) -- GitLab