diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-08 00:10:24 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-08 00:10:24 +0000 |
commit | 9c1accf52813b2b4b98ce85c9ec4a16fdbb86ee1 (patch) | |
tree | a9b3c0191e4205184bda7920a0a7776db876fbdd | |
parent | c19944d9970b788d8523cee6ee05217a8afd7646 (diff) | |
download | gitlab-ce-9c1accf52813b2b4b98ce85c9ec4a16fdbb86ee1.tar.gz |
Add latest changes from gitlab-org/gitlab@master
-rw-r--r-- | app/services/files/base_service.rb | 15 | ||||
-rw-r--r-- | app/services/mattermost/create_team_service.rb | 2 | ||||
-rw-r--r-- | qa/qa/runtime/browser.rb | 1 | ||||
-rw-r--r-- | spec/features/merge_request/real_time_merge_widget_spec.rb | 87 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb | 2 | ||||
-rw-r--r-- | spec/requests/api/files_spec.rb | 28 | ||||
-rw-r--r-- | spec/services/files/delete_service_spec.rb | 4 | ||||
-rw-r--r-- | spec/services/files/multi_service_spec.rb | 14 | ||||
-rw-r--r-- | spec/services/files/update_service_spec.rb | 4 | ||||
-rw-r--r-- | spec/services/mattermost/create_team_service_spec.rb | 28 | ||||
-rw-r--r-- | spec/support/helpers/ci/template_helpers.rb | 4 | ||||
-rw-r--r-- | spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb | 12 | ||||
-rw-r--r-- | workhorse/go.mod | 2 | ||||
-rw-r--r-- | workhorse/go.sum | 4 |
14 files changed, 76 insertions, 131 deletions
diff --git a/app/services/files/base_service.rb b/app/services/files/base_service.rb index 8f722de2019..613785d01cc 100644 --- a/app/services/files/base_service.rb +++ b/app/services/files/base_service.rb @@ -26,16 +26,23 @@ module Files def file_has_changed?(path, commit_id) return false unless commit_id - last_commit = Gitlab::Git::Commit - .last_for_path(@start_project.repository, @start_branch, path, literal_pathspec: true) + last_commit_from_branch = get_last_commit_for_path(ref: @start_branch, path: path) - return false unless last_commit + return false unless last_commit_from_branch - last_commit.sha != commit_id + last_commit_from_commit_id = get_last_commit_for_path(ref: commit_id, path: path) + + return false unless last_commit_from_commit_id + + last_commit_from_branch.sha != last_commit_from_commit_id.sha end private + def get_last_commit_for_path(ref:, path:) + Gitlab::Git::Commit.last_for_path(@start_project.repository, ref, path, literal_pathspec: true) + end + def commit_email(git_user) return params[:author_email] if params[:author_email].present? return unless current_user diff --git a/app/services/mattermost/create_team_service.rb b/app/services/mattermost/create_team_service.rb index 9f6efab1e43..dc448cbc5eb 100644 --- a/app/services/mattermost/create_team_service.rb +++ b/app/services/mattermost/create_team_service.rb @@ -9,7 +9,7 @@ module Mattermost def execute # The user that creates the team will be Team Admin - ::Mattermost::Team.new(current_user).create(@group.mattermost_team_params) + ::Mattermost::Team.new(current_user).create(**@group.mattermost_team_params) rescue ::Mattermost::ClientError => e @group.errors.add(:mattermost_team, e.message) end diff --git a/qa/qa/runtime/browser.rb b/qa/qa/runtime/browser.rb index f01657c8deb..945823fb9c0 100644 --- a/qa/qa/runtime/browser.rb +++ b/qa/qa/runtime/browser.rb @@ -172,6 +172,7 @@ module QA } if QA::Runtime::Env.remote_grid + selenium_options[:browser] = :remote selenium_options[:url] = QA::Runtime::Env.remote_grid capabilities[:browserVersion] = 'latest' capabilities['sauce:options'] = { tunnelIdentifier: QA::Runtime::Env.remote_tunnel_id } diff --git a/spec/features/merge_request/real_time_merge_widget_spec.rb b/spec/features/merge_request/real_time_merge_widget_spec.rb deleted file mode 100644 index 299651feb53..00000000000 --- a/spec/features/merge_request/real_time_merge_widget_spec.rb +++ /dev/null @@ -1,87 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Merge request > Real-time merge widget', :js, feature_category: :code_review_workflow do - let_it_be_with_reload(:project) { create(:project, :public, :repository) } - let(:user) { project.creator } - let(:merge_request) { create(:merge_request, :simple, source_project: project, author: user) } - - before do - sign_in(user) - visit project_merge_request_path(project, merge_request) - end - - context 'when merge status changes' do - let(:trigger_action) do - # There are different service classes that can change the merge_status - # so we simulate it here. - merge_request.mark_as_unchecked! - GraphqlTriggers.merge_request_merge_status_updated(merge_request) - end - - let(:widget_text) { s_('mrWidget|Checking if merge request can be merged…') } - - it_behaves_like 'updates merge widget in real-time' - end - - context 'when MR gets closed' do - let(:trigger_action) do - MergeRequests::CloseService - .new(project: project, current_user: user) - .execute(merge_request) - end - - let(:widget_text) { s_('mrWidget|Closed by') } - - it_behaves_like 'updates merge widget in real-time' - end - - context 'when MR gets marked as draft' do - let(:trigger_action) do - MergeRequests::UpdateService - .new(project: project, current_user: user, params: { title: 'Draft: title' }) - .execute(merge_request) - end - - let(:widget_text) { 'Merge blocked: Select Mark as ready to remove it from Draft status.' } - - it_behaves_like 'updates merge widget in real-time' - end - - context 'when MR gets approved' do - let(:trigger_action) do - MergeRequests::ApprovalService - .new(project: project, current_user: user) - .execute(merge_request) - end - - let(:widget_text) { _('Ready to merge!') } - - before do - merge_request.update!(approvals_before_merge: 1) - end - - it_behaves_like 'updates merge widget in real-time' - end - - context 'when a new discussion is started and all threads must be resolved before merge' do - let(:trigger_action) do - Notes::CreateService.new(project, user, { - merge_request_diff_head_sha: merge_request.diff_head_sha, - noteable_id: merge_request.id, - noteable_type: merge_request.class.name, - note: 'Unresolved discussion', - type: 'DiscussionNote' - }).execute - end - - let(:widget_text) { s_('mrWidget|Merge blocked: all threads must be resolved.') } - - before do - project.update!(only_allow_merge_if_all_discussions_are_resolved: true) - end - - it_behaves_like 'updates merge widget in real-time' - end -end diff --git a/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb b/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb index 07cfa939623..995922b6922 100644 --- a/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb +++ b/spec/lib/gitlab/ci/templates/Jobs/build_gitlab_ci_yaml_spec.rb @@ -10,7 +10,7 @@ RSpec.describe 'Jobs/Build.gitlab-ci.yml' do describe 'AUTO_BUILD_IMAGE_VERSION' do it 'corresponds to a published image in the registry' do registry = "https://#{template_registry_host}" - repository = "gitlab-org/cluster-integration/auto-build-image" + repository = auto_build_image_repository reference = YAML.safe_load(template.content).dig('variables', 'AUTO_BUILD_IMAGE_VERSION') expect(public_image_exist?(registry, repository, reference)).to be true diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb index 487ab2d95aa..f68ea0cd84c 100644 --- a/spec/requests/api/files_spec.rb +++ b/spec/requests/api/files_spec.rb @@ -55,6 +55,11 @@ RSpec.describe API::Files, feature_category: :source_code_management do } end + let(:last_commit_for_path) do + Gitlab::Git::Commit + .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path)) + end + shared_context 'with author parameters' do let(:author_email) { 'user@example.org' } let(:author_name) { 'John Doe' } @@ -1202,7 +1207,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do end context 'when updating an existing file with stale last commit id' do - let(:params_with_stale_id) { params.merge(last_commit_id: 'stale') } + let(:params_with_stale_id) { params.merge(last_commit_id: last_commit_for_path.parent_id) } it 'returns a 400 bad request' do put api(route(file_path), user), params: params_with_stale_id @@ -1213,12 +1218,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do end context 'with correct last commit id' do - let(:last_commit) do - Gitlab::Git::Commit - .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path)) - end - - let(:params_with_correct_id) { params.merge(last_commit_id: last_commit.id) } + let(:params_with_correct_id) { params.merge(last_commit_id: last_commit_for_path.id) } it 'updates existing file in project repo' do put api(route(file_path), user), params: params_with_correct_id @@ -1228,12 +1228,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do end context 'when file path is invalid' do - let(:last_commit) do - Gitlab::Git::Commit - .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path)) - end - - let(:params_with_correct_id) { params.merge(last_commit_id: last_commit.id) } + let(:params_with_correct_id) { params.merge(last_commit_id: last_commit_for_path.id) } it 'returns a 400 bad request' do put api(route(invalid_file_path), user), params: params_with_correct_id @@ -1244,12 +1239,7 @@ RSpec.describe API::Files, feature_category: :source_code_management do end it_behaves_like 'when path is absolute' do - let(:last_commit) do - Gitlab::Git::Commit - .last_for_path(project.repository, 'master', Addressable::URI.unencode_component(file_path)) - end - - let(:params_with_correct_id) { params.merge(last_commit_id: last_commit.id) } + let(:params_with_correct_id) { params.merge(last_commit_id: last_commit_for_path.id) } subject { put api(route(absolute_path), user), params: params_with_correct_id } end diff --git a/spec/services/files/delete_service_spec.rb b/spec/services/files/delete_service_spec.rb index f5e75f45803..dd99e5f9742 100644 --- a/spec/services/files/delete_service_spec.rb +++ b/spec/services/files/delete_service_spec.rb @@ -52,8 +52,8 @@ RSpec.describe Files::DeleteService, feature_category: :source_code_management d end describe "#execute" do - context "when the file's last commit sha does not match the supplied last_commit_sha" do - let(:last_commit_sha) { "foo" } + context "when the file's last commit is earlier than the latest commit for this branch" do + let(:last_commit_sha) { Gitlab::Git::Commit.last_for_path(project.repository, project.default_branch, file_path).parent_id } it "returns a hash with the correct error message and a :error status" do expect { subject.execute } diff --git a/spec/services/files/multi_service_spec.rb b/spec/services/files/multi_service_spec.rb index 9b85d83e721..7149fa77d6a 100644 --- a/spec/services/files/multi_service_spec.rb +++ b/spec/services/files/multi_service_spec.rb @@ -19,6 +19,10 @@ RSpec.describe Files::MultiService, feature_category: :source_code_management do Gitlab::Git::Commit.last_for_path(project.repository, branch_name, original_file_path).sha end + let(:branch_commit_id) do + Gitlab::Git::Commit.find(project.repository, branch_name).sha + end + let(:default_action) do { action: action, @@ -78,6 +82,16 @@ RSpec.describe Files::MultiService, feature_category: :source_code_management do end end + context 'when file not changed, but later commit id is used' do + let(:actions) { [default_action.merge(last_commit_id: branch_commit_id)] } + + it 'accepts the commit' do + results = subject.execute + + expect(results[:status]).to eq(:success) + end + end + context 'when the file have not been modified' do it 'accepts the commit' do results = subject.execute diff --git a/spec/services/files/update_service_spec.rb b/spec/services/files/update_service_spec.rb index b464e47b0bc..6a9f9d6b86f 100644 --- a/spec/services/files/update_service_spec.rb +++ b/spec/services/files/update_service_spec.rb @@ -31,8 +31,8 @@ RSpec.describe Files::UpdateService, feature_category: :source_code_management d end describe "#execute" do - context "when the file's last commit sha does not match the supplied last_commit_sha" do - let(:last_commit_sha) { "foo" } + context "when the file's last commit sha is earlier than the latest change for that branch" do + let(:last_commit_sha) { Gitlab::Git::Commit.last_for_path(project.repository, project.default_branch, file_path).parent_id } it "returns a hash with the correct error message and a :error status" do expect { subject.execute } diff --git a/spec/services/mattermost/create_team_service_spec.rb b/spec/services/mattermost/create_team_service_spec.rb new file mode 100644 index 00000000000..b9e5162aab4 --- /dev/null +++ b/spec/services/mattermost/create_team_service_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Mattermost::CreateTeamService, feature_category: :integrations do + let(:user) { create(:user) } + let(:group) { create(:group) } + + subject { described_class.new(group, user) } + + it 'creates a team' do + expect_next_instance_of(::Mattermost::Team) do |instance| + expect(instance).to receive(:create).with(name: anything, display_name: anything, type: anything) + end + + subject.execute + end + + it 'adds an error if a team could not be created' do + expect_next_instance_of(::Mattermost::Team) do |instance| + expect(instance).to receive(:create).and_raise(::Mattermost::ClientError, 'client error') + end + + subject.execute + + expect(group.errors).to be_present + end +end diff --git a/spec/support/helpers/ci/template_helpers.rb b/spec/support/helpers/ci/template_helpers.rb index cd3ab4bd82d..1818dec5fc7 100644 --- a/spec/support/helpers/ci/template_helpers.rb +++ b/spec/support/helpers/ci/template_helpers.rb @@ -6,6 +6,10 @@ module Ci 'registry.gitlab.com' end + def auto_build_image_repository + "gitlab-org/cluster-integration/auto-build-image" + end + def public_image_exist?(registry, repository, image) public_image_manifest(registry, repository, image).present? end diff --git a/spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb b/spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb deleted file mode 100644 index d76d0f74e98..00000000000 --- a/spec/support/shared_examples/features/real_time_merge_widget_shared_examples.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -RSpec.shared_examples 'updates merge widget in real-time' do - specify do - wait_for_requests - - # Simulate a real-time update of merge widget - trigger_action - - expect(find('.mr-state-widget')).to have_content(widget_text) - end -end diff --git a/workhorse/go.mod b/workhorse/go.mod index 645f155af73..99b2c50f6a1 100644 --- a/workhorse/go.mod +++ b/workhorse/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v1.2.1 github.com/FZambia/sentinel v1.1.1 github.com/alecthomas/chroma/v2 v2.5.0 - github.com/aws/aws-sdk-go v1.44.210 + github.com/aws/aws-sdk-go v1.44.211 github.com/disintegration/imaging v1.6.2 github.com/getsentry/raven-go v0.2.0 github.com/golang-jwt/jwt/v4 v4.5.0 diff --git a/workhorse/go.sum b/workhorse/go.sum index ccb713d3468..3374893964b 100644 --- a/workhorse/go.sum +++ b/workhorse/go.sum @@ -544,8 +544,8 @@ github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4 github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.128/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.151/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go v1.44.210 h1:/cqRMHSSgzLEKILIDGwhaX2hiIpyRurw7MRy6aaSufg= -github.com/aws/aws-sdk-go v1.44.210/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.211 h1:YNr5DwdzG/8y9Tl0QrPTnC99aFUHgT5hhy6GpnnzHK4= +github.com/aws/aws-sdk-go v1.44.211/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.17.1 h1:02c72fDJr87N8RAC2s3Qu0YuvMRZKNZJ9F+lAehCazk= github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw= |