From c86ec1d072338034a312bb4be0ff175892fa01b7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 26 Oct 2022 15:10:10 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop.yml | 1 - app/assets/javascripts/behaviors/copy_code.js | 3 +- .../javascripts/blob/blob_blame_link.js | 14 +- .../blob/blob_line_permalink_updater.js | 6 +- app/assets/javascripts/blob/utils.js | 16 ++ .../components/blob_content_viewer.vue | 2 +- .../components/blob_viewers/rich_viewer.vue | 8 +- .../source_viewer/components/chunk.vue | 27 ++- .../source_viewer/components/chunk_line.vue | 10 +- .../source_viewer/source_viewer.vue | 4 + .../rpm/repository_metadata/base_builder.rb | 46 ------ .../repository_metadata/build_filelist_xml.rb | 14 -- .../repository_metadata/build_other_xml.rb | 14 -- .../build_other_xml_service.rb | 39 +++++ ...ry_xml.rb => build_primary_xml_service.rb} | 28 ++-- ...omd_xml.rb => build_repomd_xml_service.rb} | 2 +- .../repository_metadata/update_xml_service.rb | 61 +++++++ app/views/projects/_files.html.haml | 2 +- app/views/projects/blob/_blob.html.haml | 2 +- ...en_packages_total_unique_counts_weekly.yml | 1 + ...220909143617_i_package_rpm_user_weekly.yml | 25 +++ ...4805_i_package_rpm_deploy_token_weekly.yml | 25 +++ ...kage_events_i_package_rpm_pull_package.yml | 25 +++ ...kage_events_i_package_rpm_push_package.yml | 25 +++ doc/administration/lfs/index.md | 2 +- doc/user/tasks.md | 5 +- .../jira_connect/subscriptions.rb | 2 +- lib/api/rpm_project_packages.rb | 16 ++ lib/gitlab/database/migration_helpers.rb | 18 ++ lib/gitlab/email/receiver.rb | 11 ++ .../counter_events/package_events.yml | 2 + .../known_events/package_events.yml | 8 + lib/unnested_in_filters/rewriter.rb | 77 ++++++++- spec/fixtures/packages/rpm/payload.json | 15 +- spec/frontend/blob/blob_blame_link_spec.js | 12 +- spec/frontend/blob/utils_spec.js | 28 ++++ .../deprecated_jquery_dropdown_spec.js | 14 +- .../source_viewer/components/chunk_spec.js | 29 +++- .../source_viewer/source_viewer_spec.js | 49 ++---- .../gitlab/database/migration_helpers_spec.rb | 110 ++++++++++++- spec/lib/gitlab/email/receiver_spec.rb | 62 ++++++- spec/lib/gitlab/sidekiq_migrate_jobs_spec.rb | 20 +-- spec/lib/unnested_in_filters/rewriter_spec.rb | 45 +++++ .../jira_connect/subscriptions_spec.rb | 2 +- .../requests/api/rpm_project_packages_spec.rb | 46 +++--- spec/services/branches/create_service_spec.rb | 23 --- .../repository_metadata/base_builder_spec.rb | 33 ---- .../build_filelist_xml_spec.rb | 21 --- .../build_other_xml_service_spec.rb | 29 ++++ .../build_other_xml_spec.rb | 21 --- ...c.rb => build_primary_xml_service_spec.rb} | 18 +- ...ec.rb => build_repomd_xml_service_spec.rb} | 2 +- .../update_xml_service_spec.rb | 155 ++++++++++++++++++ .../handling_retried_jobs_shared_context.rb | 26 +++ .../base_rpm_service_shared_examples.rb | 52 ------ 55 files changed, 981 insertions(+), 372 deletions(-) delete mode 100644 app/services/packages/rpm/repository_metadata/base_builder.rb delete mode 100644 app/services/packages/rpm/repository_metadata/build_filelist_xml.rb delete mode 100644 app/services/packages/rpm/repository_metadata/build_other_xml.rb create mode 100644 app/services/packages/rpm/repository_metadata/build_other_xml_service.rb rename app/services/packages/rpm/repository_metadata/{build_primary_xml.rb => build_primary_xml_service.rb} (76%) rename app/services/packages/rpm/repository_metadata/{build_repomd_xml.rb => build_repomd_xml_service.rb} (97%) create mode 100644 app/services/packages/rpm/repository_metadata/update_xml_service.rb create mode 100644 config/metrics/counts_7d/20220909143617_i_package_rpm_user_weekly.yml create mode 100644 config/metrics/counts_7d/20220913104805_i_package_rpm_deploy_token_weekly.yml create mode 100644 config/metrics/counts_all/20220906074055_package_events_i_package_rpm_pull_package.yml create mode 100644 config/metrics/counts_all/20220906074525_package_events_i_package_rpm_push_package.yml delete mode 100644 spec/services/packages/rpm/repository_metadata/base_builder_spec.rb delete mode 100644 spec/services/packages/rpm/repository_metadata/build_filelist_xml_spec.rb create mode 100644 spec/services/packages/rpm/repository_metadata/build_other_xml_service_spec.rb delete mode 100644 spec/services/packages/rpm/repository_metadata/build_other_xml_spec.rb rename spec/services/packages/rpm/repository_metadata/{build_primary_xml_spec.rb => build_primary_xml_service_spec.rb} (51%) rename spec/services/packages/rpm/repository_metadata/{build_repomd_xml_spec.rb => build_repomd_xml_service_spec.rb} (99%) create mode 100644 spec/services/packages/rpm/repository_metadata/update_xml_service_spec.rb create mode 100644 spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb delete mode 100644 spec/support/shared_examples/services/base_rpm_service_shared_examples.rb diff --git a/.rubocop.yml b/.rubocop.yml index 7de4ff3faf6..8224f104674 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -717,7 +717,6 @@ Gitlab/RailsLogger: - 'spec/**/*.rb' - 'ee/spec/**/*.rb' -# WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/267606 RSpec/FactoryBot/InlineAssociation: Include: - 'spec/factories/**/*.rb' diff --git a/app/assets/javascripts/behaviors/copy_code.js b/app/assets/javascripts/behaviors/copy_code.js index a653769b60f..ae186aba32d 100644 --- a/app/assets/javascripts/behaviors/copy_code.js +++ b/app/assets/javascripts/behaviors/copy_code.js @@ -53,9 +53,10 @@ export const initCopyCodeButton = (selector = '#content-body') => { customElements.define('copy-code', CopyCodeButton); } + const exclude = document.querySelector('.file-content.code'); // this behavior is not needed when viewing raw file content, so excluding it as the unnecessary dom lookups can become expensive const el = document.querySelector(selector); - if (!el) return () => {}; + if (!el || exclude) return () => {}; const observer = new MutationObserver(() => addCodeButton()); diff --git a/app/assets/javascripts/blob/blob_blame_link.js b/app/assets/javascripts/blob/blob_blame_link.js index 41dfd7b82b8..a5191a3d513 100644 --- a/app/assets/javascripts/blob/blob_blame_link.js +++ b/app/assets/javascripts/blob/blob_blame_link.js @@ -1,4 +1,6 @@ -function addBlameLink(containerSelector, linkClass) { +import { getPageParamValue, getPageSearchString } from './utils'; + +export function addBlameLink(containerSelector, linkClass) { const containerEl = document.querySelector(containerSelector); if (!containerEl) { @@ -13,10 +15,14 @@ function addBlameLink(containerSelector, linkClass) { lineLinkCopy.classList.remove(linkClass, 'diff-line-num'); const { lineNumber } = lineLink.dataset; - const { blamePath } = document.querySelector('.line-numbers').dataset; const blameLink = document.createElement('a'); + const { blamePath } = document.querySelector('.line-numbers').dataset; blameLink.classList.add('file-line-blame'); - blameLink.href = `${blamePath}#L${lineNumber}`; + const blamePerPage = document.querySelector('.js-per-page')?.dataset?.blamePerPage; + const pageNumber = getPageParamValue(lineNumber, blamePerPage); + const searchString = getPageSearchString(blamePath, pageNumber); + + blameLink.href = `${blamePath}${searchString}#L${lineNumber}`; const wrapper = document.createElement('div'); wrapper.classList.add('line-links', 'diff-line-num'); @@ -27,5 +33,3 @@ function addBlameLink(containerSelector, linkClass) { } }); } - -export default addBlameLink; diff --git a/app/assets/javascripts/blob/blob_line_permalink_updater.js b/app/assets/javascripts/blob/blob_line_permalink_updater.js index df38c5400e2..928035d7c1e 100644 --- a/app/assets/javascripts/blob/blob_line_permalink_updater.js +++ b/app/assets/javascripts/blob/blob_line_permalink_updater.js @@ -1,4 +1,5 @@ import { getLocationHash } from '../lib/utils/url_utility'; +import { getPageParamValue, getPageSearchString } from './utils'; const lineNumberRe = /^(L|LC)[0-9]+/; @@ -16,7 +17,10 @@ const updateLineNumbersOnBlobPermalinks = (linksToUpdate) => { permalinkButton.dataset.originalHref = href; return href; })(); - permalinkButton.setAttribute('href', `${baseHref}${hashUrlString}`); + const lineNum = parseInt(hash.split('L')[1], 10); + const page = getPageParamValue(lineNum); + const searchString = getPageSearchString(baseHref, page); + permalinkButton.setAttribute('href', `${baseHref}${searchString}${hashUrlString}`); }); } }; diff --git a/app/assets/javascripts/blob/utils.js b/app/assets/javascripts/blob/utils.js index bbc061dd36e..92c6277d4f1 100644 --- a/app/assets/javascripts/blob/utils.js +++ b/app/assets/javascripts/blob/utils.js @@ -1,4 +1,5 @@ import Editor from '~/editor/source_editor'; +import { getBaseURL } from '~/lib/utils/url_utility'; export function initSourceEditor({ el, ...args }) { const editor = new Editor({ @@ -13,4 +14,19 @@ export function initSourceEditor({ el, ...args }) { }); } +const blameLinesPerPage = document.querySelector('.js-per-page')?.dataset?.blamePerPage; + +export const getPageParamValue = (lineNum, blamePerPage = blameLinesPerPage) => { + if (!blamePerPage) return ''; + const page = Math.ceil(parseInt(lineNum, 10) / parseInt(blamePerPage, 10)); + return page <= 1 ? '' : page; +}; + +export const getPageSearchString = (path, page) => { + if (!page) return ''; + const url = new URL(path, getBaseURL()); + url.searchParams.set('page', page); + return url.search; +}; + export default () => ({}); diff --git a/app/assets/javascripts/repository/components/blob_content_viewer.vue b/app/assets/javascripts/repository/components/blob_content_viewer.vue index bf1667d8734..101625a4b72 100644 --- a/app/assets/javascripts/repository/components/blob_content_viewer.vue +++ b/app/assets/javascripts/repository/components/blob_content_viewer.vue @@ -14,7 +14,7 @@ import WebIdeLink from '~/vue_shared/components/web_ide_link.vue'; import CodeIntelligence from '~/code_navigation/components/app.vue'; import LineHighlighter from '~/blob/line_highlighter'; import blobInfoQuery from 'shared_queries/repository/blob_info.query.graphql'; -import addBlameLink from '~/blob/blob_blame_link'; +import { addBlameLink } from '~/blob/blob_blame_link'; import projectInfoQuery from '../queries/project_info.query.graphql'; import getRefMixin from '../mixins/get_ref'; import userInfoQuery from '../queries/user_info.query.graphql'; diff --git a/app/assets/javascripts/vue_shared/components/blob_viewers/rich_viewer.vue b/app/assets/javascripts/vue_shared/components/blob_viewers/rich_viewer.vue index dc4d1bd56e9..ed0eb9cc0b8 100644 --- a/app/assets/javascripts/vue_shared/components/blob_viewers/rich_viewer.vue +++ b/app/assets/javascripts/vue_shared/components/blob_viewers/rich_viewer.vue @@ -15,8 +15,14 @@ export default { mounted() { handleBlobRichViewer(this.$refs.content, this.type); }, + safeHtmlConfig: { + ADD_TAGS: ['copy-code'], + }, }; diff --git a/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk.vue b/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk.vue index 9a44df43c4d..f4292183f7b 100644 --- a/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk.vue +++ b/app/assets/javascripts/vue_shared/components/source_viewer/components/chunk.vue @@ -1,5 +1,6 @@