diff options
18 files changed, 170 insertions, 11 deletions
@@ -405,7 +405,7 @@ group :development do gem 'listen', '~> 3.7' # rubocop:todo Gemfile/MissingFeatureCategory - gem 'ruby-lsp', "~> 0.13.0", require: false, feature_category: :tooling + gem 'ruby-lsp', "~> 0.13.1", require: false, feature_category: :tooling gem 'ruby-lsp-rails', "~> 0.2.8", feature_category: :tooling diff --git a/Gemfile.checksum b/Gemfile.checksum index 96f8ebdbbc7..84c7b41a4ee 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -556,7 +556,7 @@ {"name":"rubocop-rails","version":"2.22.1","platform":"ruby","checksum":"db673cdb6321d8bb7627cd6cfb2cb36114acaa0e89581e4694b7304ce2acbd46"}, {"name":"rubocop-rspec","version":"2.25.0","platform":"ruby","checksum":"083f8a0481dbb9969b2a9eae85670a454fe91d46812e6ec97b34e7f6227b99f3"}, {"name":"ruby-fogbugz","version":"0.3.0","platform":"ruby","checksum":"5e04cde474648f498a71cf1e1a7ab42c66b953862fbe224f793ec0a7a1d5f657"}, -{"name":"ruby-lsp","version":"0.13.0","platform":"ruby","checksum":"80c148ee5eff6d729ff9bef52e58cb1d6a506a4feaaba9ed7963ef0430b9568f"}, +{"name":"ruby-lsp","version":"0.13.1","platform":"ruby","checksum":"8f1243beb92a49e24447edbd0c31a7ee3a400376757dea60f068fe4eba4a4dff"}, {"name":"ruby-lsp-rails","version":"0.2.8","platform":"ruby","checksum":"1730cafa65c04c9bc3b6e28b3454afb561ae71859be1f26f36b065975a5a57c8"}, {"name":"ruby-lsp-rspec","version":"0.1.8","platform":"ruby","checksum":"21db2255bad7ecf7297945c453d8e84af167d01776853f47aacb3bb50caa0ea3"}, {"name":"ruby-magic","version":"0.6.0","platform":"ruby","checksum":"7b2138877b7d23aff812c95564eba6473b74b815ef85beb0eb792e729a2b6101"}, diff --git a/Gemfile.lock b/Gemfile.lock index 48aeda1d90e..358df5c2839 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1462,7 +1462,7 @@ GEM ruby-fogbugz (0.3.0) crack (~> 0.4) multipart-post (~> 2.0) - ruby-lsp (0.13.0) + ruby-lsp (0.13.1) language_server-protocol (~> 3.17.0) prism (>= 0.18.0, < 0.19) sorbet-runtime (>= 0.5.5685) @@ -2042,7 +2042,7 @@ DEPENDENCIES rspec_profiling (~> 0.0.6) rubocop ruby-fogbugz (~> 0.3.0) - ruby-lsp (~> 0.13.0) + ruby-lsp (~> 0.13.1) ruby-lsp-rails (~> 0.2.8) ruby-lsp-rspec (~> 0.1.8) ruby-magic (~> 0.6) diff --git a/app/models/diff_viewer/base.rb b/app/models/diff_viewer/base.rb index 31118791075..4fd3ee8425c 100644 --- a/app/models/diff_viewer/base.rb +++ b/app/models/diff_viewer/base.rb @@ -72,6 +72,10 @@ module DiffViewer !@initially_binary && diff_file.binary_in_repo? end + def generated? + diff_file.generated? + end + # This method is used on the server side to check whether we can attempt to # render the diff_file at all. The human-readable error message can be # retrieved by #render_error_message. diff --git a/app/serializers/diff_viewer_entity.rb b/app/serializers/diff_viewer_entity.rb index f8d9778a3ee..294d50f5f10 100644 --- a/app/serializers/diff_viewer_entity.rb +++ b/app/serializers/diff_viewer_entity.rb @@ -5,6 +5,7 @@ class DiffViewerEntity < Grape::Entity expose :render_error, as: :error expose :render_error_message, as: :error_message expose :collapsed?, as: :collapsed + expose :generated?, as: :generated expose :whitespace_only do |_, options| options[:whitespace_only] end diff --git a/config/events/code_suggestions_authenticate.yml b/config/events/code_suggestions_authenticate.yml new file mode 100644 index 00000000000..d5e1c0fd34b --- /dev/null +++ b/config/events/code_suggestions_authenticate.yml @@ -0,0 +1,22 @@ +--- +description: Tracks the number of authentication requests to the `POST /code_suggestions/tokens` API endpoint. +category: InternalEventTracking +action: code_suggestions_authenticate +label_description: +property_description: +value_description: +extra_properties: +identifiers: +- user +product_section: dev +product_stage: create +product_group: code_creation +milestone: "16.7" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/138848 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/metrics/counts_28d/count_total_code_suggestions_authenticate_28d.yml b/config/metrics/counts_28d/count_total_code_suggestions_authenticate_28d.yml new file mode 100644 index 00000000000..3688d770c53 --- /dev/null +++ b/config/metrics/counts_28d/count_total_code_suggestions_authenticate_28d.yml @@ -0,0 +1,27 @@ +--- +key_path: count_total_code_suggestions_authenticate_28d +description: Tracks the number of authentication requests to the `POST /code_suggestions/tokens` API endpoint in the last 28 days. +product_section: dev +product_stage: create +product_group: code_creation +performance_indicator_type: [] +value_type: number +status: active +milestone: "16.7" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/138848 +time_frame: 28d +data_source: internal_events +data_category: optional +instrumentation_class: TotalCountMetric +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +options: + events: + - code_suggestions_authenticate +events: + - name: code_suggestions_authenticate diff --git a/config/metrics/counts_7d/count_total_code_suggestions_authenticate_7d.yml b/config/metrics/counts_7d/count_total_code_suggestions_authenticate_7d.yml new file mode 100644 index 00000000000..a2fe5a36c9b --- /dev/null +++ b/config/metrics/counts_7d/count_total_code_suggestions_authenticate_7d.yml @@ -0,0 +1,27 @@ +--- +key_path: count_total_code_suggestions_authenticate_7d +description: Tracks the number of authentication requests to the `POST /code_suggestions/tokens` API endpoint in the last 7 days. +product_section: dev +product_stage: create +product_group: code_creation +performance_indicator_type: [] +value_type: number +status: active +milestone: "16.7" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/138848 +time_frame: 7d +data_source: internal_events +data_category: optional +instrumentation_class: TotalCountMetric +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate +options: + events: + - code_suggestions_authenticate +events: + - name: code_suggestions_authenticate diff --git a/db/docs/batched_background_migrations/mark_duplicate_npm_packages_for_destruction.yml b/db/docs/batched_background_migrations/mark_duplicate_npm_packages_for_destruction.yml index 6cc77ebfaa8..fcd1cecb741 100644 --- a/db/docs/batched_background_migrations/mark_duplicate_npm_packages_for_destruction.yml +++ b/db/docs/batched_background_migrations/mark_duplicate_npm_packages_for_destruction.yml @@ -4,3 +4,4 @@ description: It seeks duplicate npm packages and marks them for destruction. feature_category: package_registry introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114695 milestone: '16.1' +finalized_by: '20231207221219' diff --git a/db/docs/ci_editor_ai_conversation_messages.yml b/db/docs/ci_editor_ai_conversation_messages.yml index fd7ab9bac61..de4ca6490a6 100644 --- a/db/docs/ci_editor_ai_conversation_messages.yml +++ b/db/docs/ci_editor_ai_conversation_messages.yml @@ -4,7 +4,8 @@ classes: - Ci::Editor::AiConversation::Message feature_categories: - pipeline_composition -description: "Represents an ai message for a user and project for the pipeline editor bot." +description: Represents an ai message for a user and project for the pipeline editor + bot. introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119840 milestone: '16.0' gitlab_schema: gitlab_ci diff --git a/db/post_migrate/20231207221219_finalize_mark_duplicate_npm_packages_for_destruction.rb b/db/post_migrate/20231207221219_finalize_mark_duplicate_npm_packages_for_destruction.rb new file mode 100644 index 00000000000..a9340cbebb8 --- /dev/null +++ b/db/post_migrate/20231207221219_finalize_mark_duplicate_npm_packages_for_destruction.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class FinalizeMarkDuplicateNpmPackagesForDestruction < Gitlab::Database::Migration[2.2] + milestone '16.7' + + disable_ddl_transaction! + + restrict_gitlab_migration gitlab_schema: :gitlab_main + + def up + ensure_batched_background_migration_is_finished( + job_class_name: 'MarkDuplicateNpmPackagesForDestruction', + table_name: :packages_packages, + column_name: :project_id, + job_arguments: [], + finalize: true + ) + end + + def down; end +end diff --git a/db/schema_migrations/20231207221219 b/db/schema_migrations/20231207221219 new file mode 100644 index 00000000000..67c81deb2be --- /dev/null +++ b/db/schema_migrations/20231207221219 @@ -0,0 +1 @@ +638b573c9ab658ddae603facd35a0861ac7a1257fcd7b6bf3b24a12fbd10bcaa
\ No newline at end of file diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb index de7be6efd72..6ddd8a208bc 100644 --- a/lib/gitlab/diff/file.rb +++ b/lib/gitlab/diff/file.rb @@ -9,7 +9,8 @@ module Gitlab delegate :new_file?, :deleted_file?, :renamed_file?, :unidiff, :old_path, :new_path, :a_mode, :b_mode, :mode_changed?, - :submodule?, :expanded?, :too_large?, :collapsed?, :line_count, :has_binary_notice?, to: :diff, prefix: false + :submodule?, :expanded?, :too_large?, :collapsed?, :line_count, :has_binary_notice?, + :generated?, to: :diff, prefix: false # Finding a viewer for a diff file happens based only on extension and whether the # diff file blobs are binary or text, which means 1 diff file should only be matched by 1 viewer, diff --git a/spec/fixtures/api/schemas/entities/diff_viewer.json b/spec/fixtures/api/schemas/entities/diff_viewer.json index b16f8d8b1a2..6fa1604e505 100644 --- a/spec/fixtures/api/schemas/entities/diff_viewer.json +++ b/spec/fixtures/api/schemas/entities/diff_viewer.json @@ -26,6 +26,12 @@ "boolean" ] }, + "generated": { + "type": [ + "boolean", + "null" + ] + }, "whitespace_only": { "type": [ "boolean", diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb index bc4fc49b1b7..2cd27472440 100644 --- a/spec/lib/gitlab/diff/file_spec.rb +++ b/spec/lib/gitlab/diff/file_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe Gitlab::Diff::File do include RepoHelpers - let(:project) { create(:project, :repository) } + let_it_be(:project) { create(:project, :repository) } let(:commit) { project.commit(sample_commit.id) } let(:diff) { commit.raw_diffs.first } let(:diff_file) { described_class.new(diff, diff_refs: commit.diff_refs, repository: project.repository) } @@ -51,6 +51,31 @@ RSpec.describe Gitlab::Diff::File do project.commit(branch_name).diffs.diff_files.first end + describe 'delegated methods' do + subject { diff_file } + + %i[ + new_file? + deleted_file? + renamed_file? + unidiff + old_path + new_path + a_mode + b_mode + mode_changed? + submodule? + expanded? + too_large? + collapsed? + line_count + has_binary_notice? + generated? + ].each do |method| + it { is_expected.to delegate_method(method).to(:diff) } + end + end + describe '#initialize' do let(:commit) { project.commit("532c837") } diff --git a/spec/models/diff_viewer/base_spec.rb b/spec/models/diff_viewer/base_spec.rb index 8ab7b090928..17925ef2576 100644 --- a/spec/models/diff_viewer/base_spec.rb +++ b/spec/models/diff_viewer/base_spec.rb @@ -100,6 +100,28 @@ RSpec.describe DiffViewer::Base do end end + describe '#generated?' do + before do + allow(diff_file).to receive(:generated?).and_return(generated) + end + + context 'when the diff file is generated' do + let(:generated) { true } + + it 'returns true' do + expect(viewer.generated?).to be_truthy + end + end + + context 'when the diff file is not generated' do + let(:generated) { false } + + it 'returns true' do + expect(viewer.generated?).to be_falsey + end + end + end + describe '#render_error' do context 'when the combined blob size is larger than the size limit' do before do diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb index 91b41501374..e65d9b6324a 100644 --- a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb +++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb @@ -5,7 +5,7 @@ module Sidekiq # We want the fetch operation to timeout every few seconds so the thread # can check if the process is shutting down. This constant is only used # for semi-reliable fetch. - DEFAULT_SEMI_RELIABLE_FETCH_TIMEOUT = 2 # seconds + DEFAULT_SEMI_RELIABLE_FETCH_TIMEOUT = 5 # seconds def initialize(options) super diff --git a/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb b/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb index 60cd81ba913..5bd40a80277 100644 --- a/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb +++ b/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb @@ -21,7 +21,7 @@ describe Sidekiq::SemiReliableFetch do it 'brpops with the default timeout timeout' do Sidekiq.redis do |connection| - expect(connection).to receive(:brpop).with("queue:stuff_to_do", { timeout: 2 }).once.and_call_original + expect(connection).to receive(:brpop).with("queue:stuff_to_do", { timeout: 5 }).once.and_call_original fetcher.retrieve_work end @@ -29,11 +29,11 @@ describe Sidekiq::SemiReliableFetch do end context 'when the timeout is set in the env' do - let(:timeout) { '5' } + let(:timeout) { '6' } it 'brpops with the default timeout timeout' do Sidekiq.redis do |connection| - expect(connection).to receive(:brpop).with("queue:stuff_to_do", { timeout: 5 }).once.and_call_original + expect(connection).to receive(:brpop).with("queue:stuff_to_do", { timeout: 6 }).once.and_call_original fetcher.retrieve_work end |