diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 46808dbd30f..8acc6dc127f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,6 +16,7 @@ stages: - notify - release-environments - benchmark + - ai-gateway # always use `gitlab-org` runners, however # in cases where jobs require Docker-in-Docker, the job diff --git a/.gitlab/ci/aigw-tagging.gitlab-ci.yml b/.gitlab/ci/aigw-tagging.gitlab-ci.yml index a6244184b6c..02554eeab3b 100644 --- a/.gitlab/ci/aigw-tagging.gitlab-ci.yml +++ b/.gitlab/ci/aigw-tagging.gitlab-ci.yml @@ -1,5 +1,5 @@ trigger-ai-gateway-tagging: - stage: release-environments + stage: ai-gateway image: curlimages/curl:latest script: - | @@ -9,5 +9,5 @@ trigger-ai-gateway-tagging: -F "variables[GITLAB_VERSION]=${CI_COMMIT_TAG}" \ "https://gitlab.com/api/v4/projects/39903947/trigger/pipeline" extends: - - .release-environments:rules:ai-gateway-tagging + - .ai-gateway:rules:tagging allow_failure: true diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 89b62a15686..2cc0fd473a8 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -3368,7 +3368,10 @@ when: never - !reference [".releases:rules:canonical-dot-com-security-gitlab-stable-branch-only", rules] -.release-environments:rules:ai-gateway-tagging: +############################## +# ai-gateway rules # +############################## +.ai-gateway:rules:tagging: rules: - if: '$AIGW_PIPELINE_TRIGGER_TOKEN == null' when: never diff --git a/.gitlab/ci/test-on-omnibus/main.gitlab-ci.yml b/.gitlab/ci/test-on-omnibus/main.gitlab-ci.yml index 8c203409b42..fcd02c92c22 100644 --- a/.gitlab/ci/test-on-omnibus/main.gitlab-ci.yml +++ b/.gitlab/ci/test-on-omnibus/main.gitlab-ci.yml @@ -432,8 +432,7 @@ metrics: - if: $QA_SUITES =~ /Test::Instance::Metrics/ - !reference [.rules:test:manual, rules] -# TODO: re-enable after gitlab-org/quality/quality-engineering/team-tasks#3153 is resolved -.elasticsearch: +elasticsearch: extends: .qa variables: QA_SCENARIO: "Test::Integration::Elasticsearch" diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 1887f9b7e47..171bab21b65 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -b1708d07f38376a2c0b12b7f3d6bffbc87357a67 +935c88d1737e9c58da7e13a9b913fdfc7faedc49 diff --git a/Gemfile b/Gemfile index 6cb830dc4af..3638176c97b 100644 --- a/Gemfile +++ b/Gemfile @@ -32,7 +32,7 @@ gem 'bundler-checksum', '~> 0.1.0', path: 'vendor/gems/bundler-checksum', requir if next? gem 'rails', '~> 7.1.4', feature_category: :shared else - gem 'rails', '~> 7.0.8.4', feature_category: :shared + gem 'rails', '~> 7.0.8.6', feature_category: :shared end gem 'activerecord-gitlab', path: 'gems/activerecord-gitlab' # rubocop:todo Gemfile/MissingFeatureCategory diff --git a/Gemfile.checksum b/Gemfile.checksum index 75d7d5d54c6..dc2e3e17ff4 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -2,18 +2,18 @@ {"name":"CFPropertyList","version":"3.0.5","platform":"ruby","checksum":"a78551cd4768d78ebca98488c27e33652ef818be64697a54676d34e6434674a4"}, {"name":"RedCloth","version":"4.3.4","platform":"ruby","checksum":"5231b2fdd91a933915cba330e5fd1a74025e77b56f57b7404c7191ebf2812297"}, {"name":"acme-client","version":"2.0.18","platform":"ruby","checksum":"3feab341926ffc16eb65babe51ba4dad8180c13e21e774871344e0b3502ef275"}, -{"name":"actioncable","version":"7.0.8.4","platform":"ruby","checksum":"7997fbc32d49c2cffbfe050540a316c96d287b9ef09fa6fe659821373dc186b0"}, -{"name":"actionmailbox","version":"7.0.8.4","platform":"ruby","checksum":"3326fd92baabc3ff9d6e0931dc455769e9571604202af49b2d4cb84cf0062074"}, -{"name":"actionmailer","version":"7.0.8.4","platform":"ruby","checksum":"f9f3a782b6cc9568fb1e61395f13ca4cf79afaa1fca85a1d314aef63cd3abac1"}, -{"name":"actionpack","version":"7.0.8.4","platform":"ruby","checksum":"2e4809808c176b0dd35d3b9a23cb4896596ff50d15740accf6af83588a2a60a2"}, -{"name":"actiontext","version":"7.0.8.4","platform":"ruby","checksum":"1ed8fb8cebdcc34fcaecf3b1404d48b2ea69fef9ae3f91ca4b9b672f6778a4bc"}, -{"name":"actionview","version":"7.0.8.4","platform":"ruby","checksum":"45c1d33730073bb6f34b10abd81c5967ac0faff28cd4097103470022a1f52e0f"}, -{"name":"activejob","version":"7.0.8.4","platform":"ruby","checksum":"21eb13e3279eb6dcf8c9bfe90c0f78879f04ffd55c62302c47b73ccd5b6ca4ac"}, -{"name":"activemodel","version":"7.0.8.4","platform":"ruby","checksum":"ef4e092d8644121b3e756e831bed6a16878317d02b9611bec8efcfdaee6525d6"}, -{"name":"activerecord","version":"7.0.8.4","platform":"ruby","checksum":"8b49aac0258527680e79e04020951462c121c74ad1f69d41ce6f30b9b7047bde"}, +{"name":"actioncable","version":"7.0.8.6","platform":"ruby","checksum":"f48b0ff8414dfbb2b38e639bf49e86677dfd1b16580ce9e0a3ffa1bb4c0a4057"}, +{"name":"actionmailbox","version":"7.0.8.6","platform":"ruby","checksum":"8f9deed46e38fc97d86d34e9552ffd5aae81491b139f8df91ef2616ab5628857"}, +{"name":"actionmailer","version":"7.0.8.6","platform":"ruby","checksum":"e3f058a5e378e72b8a90577aaa325f23e1d718b437fe9430411eb0324ba8f71d"}, +{"name":"actionpack","version":"7.0.8.6","platform":"ruby","checksum":"b648e5d21270cc4ba47f37067ec791d68d0454e4df6b18000b659d7325a1dca7"}, +{"name":"actiontext","version":"7.0.8.6","platform":"ruby","checksum":"262c19dffa2a5136f0852ee8ba2838c07113851444e5d3ccc77159624e120bc9"}, +{"name":"actionview","version":"7.0.8.6","platform":"ruby","checksum":"2c15e4139a87aa96910afb24717d93fdb4f407c078580ace2a5885d5c2e9393e"}, +{"name":"activejob","version":"7.0.8.6","platform":"ruby","checksum":"7c79d5e3d37708e0ece41726134b6544f272f27c1efd75815c85aa9e3a076c3d"}, +{"name":"activemodel","version":"7.0.8.6","platform":"ruby","checksum":"35d2c776a89773e339664893c012ec218934e19b646ebabbc8972c2da1fadab8"}, +{"name":"activerecord","version":"7.0.8.6","platform":"ruby","checksum":"ee2a4cc131ea73c31af05d3eccf26901b365c64251d9fd1ba9da7298980c1a93"}, {"name":"activerecord-explain-analyze","version":"0.1.0","platform":"ruby","checksum":"5debb11fe23f35b91953a80677d80ba9284ee737fd9d148c1d7603ce45217f7b"}, -{"name":"activestorage","version":"7.0.8.4","platform":"ruby","checksum":"cbfc2d9a708aa47822f1bfc36180c835515d3a22a160b43e8fe74ddc80e8b8e1"}, -{"name":"activesupport","version":"7.0.8.4","platform":"ruby","checksum":"69047070402b20fbaeebbeb56d21238db457c54c7e66f356dcba683e500ae197"}, +{"name":"activestorage","version":"7.0.8.6","platform":"ruby","checksum":"6ea7c01d22aac82457155d19a72aafb5d5fa49b79bc852b8e0b0d5c3aac5dbda"}, +{"name":"activesupport","version":"7.0.8.6","platform":"ruby","checksum":"41b69384f1578ef0b34d73b73215d6df12e4d30bf49e3c7e01aa49a53d03423e"}, {"name":"addressable","version":"2.8.7","platform":"ruby","checksum":"462986537cf3735ab5f3c0f557f14155d778f4b43ea4f485a9deb9c8f7c58232"}, {"name":"aes_key_wrap","version":"1.1.0","platform":"ruby","checksum":"b935f4756b37375895db45669e79dfcdc0f7901e12d4e08974d5540c8e0776a5"}, {"name":"akismet","version":"3.0.0","platform":"ruby","checksum":"74991b8e3d3257eeea996b47069abb8da2006c84a144255123e8dffd1c86b230"}, @@ -545,12 +545,12 @@ {"name":"rack-session","version":"1.0.2","platform":"ruby","checksum":"a02115e5420b4de036839b9811e3f7967d73446a554b42aa45106af335851d76"}, {"name":"rack-test","version":"2.1.0","platform":"ruby","checksum":"0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb"}, {"name":"rack-timeout","version":"0.7.0","platform":"ruby","checksum":"757337e9793cca999bb73a61fe2a7d4280aa9eefbaf787ce3b98d860749c87d9"}, -{"name":"rails","version":"7.0.8.4","platform":"ruby","checksum":"7e418423a57ffde4466422f0afab676fbd8f23a7b47f5431fb38ab3dda9765eb"}, +{"name":"rails","version":"7.0.8.6","platform":"ruby","checksum":"315fc5cf374425f00a6816d270a9061821038fa1ce993531ede4c014a8a782e8"}, {"name":"rails-controller-testing","version":"1.0.5","platform":"ruby","checksum":"741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94"}, {"name":"rails-dom-testing","version":"2.0.3","platform":"ruby","checksum":"b140c4f39f6e609c8113137b9a60dfc2ecb89864e496f87f23a68b3b8f12d8d1"}, {"name":"rails-html-sanitizer","version":"1.6.0","platform":"ruby","checksum":"86e9f19d2e6748890dcc2633c8945ca45baa08a1df9d8c215ce17b3b0afaa4de"}, {"name":"rails-i18n","version":"7.0.10","platform":"ruby","checksum":"efae16e0ac28c0f42e98555c8db1327d69ab02058c8b535e0933cb106dd931ca"}, -{"name":"railties","version":"7.0.8.4","platform":"ruby","checksum":"00ae09707da0b738071930a15a8196edc0b6748ac76cd2e6fd0b180f3aa6e70b"}, +{"name":"railties","version":"7.0.8.6","platform":"ruby","checksum":"0ff07181e40d5e001ec2ee8e1db5af501d874e08133016f1230790807a0496b9"}, {"name":"rainbow","version":"3.1.1","platform":"ruby","checksum":"039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a"}, {"name":"rake","version":"13.0.6","platform":"ruby","checksum":"5ce4bf5037b4196c24ac62834d8db1ce175470391026bd9e557d669beeb19097"}, {"name":"rb-fsevent","version":"0.11.2","platform":"ruby","checksum":"43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe"}, diff --git a/Gemfile.lock b/Gemfile.lock index 03513050437..a5e3655b7f5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -232,70 +232,70 @@ GEM acme-client (2.0.18) faraday (>= 1.0, < 3.0.0) faraday-retry (>= 1.0, < 3.0.0) - actioncable (7.0.8.4) - actionpack (= 7.0.8.4) - activesupport (= 7.0.8.4) + actioncable (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8.4) - actionpack (= 7.0.8.4) - activejob (= 7.0.8.4) - activerecord (= 7.0.8.4) - activestorage (= 7.0.8.4) - activesupport (= 7.0.8.4) + actionmailbox (7.0.8.6) + actionpack (= 7.0.8.6) + activejob (= 7.0.8.6) + activerecord (= 7.0.8.6) + activestorage (= 7.0.8.6) + activesupport (= 7.0.8.6) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.8.4) - actionpack (= 7.0.8.4) - actionview (= 7.0.8.4) - activejob (= 7.0.8.4) - activesupport (= 7.0.8.4) + actionmailer (7.0.8.6) + actionpack (= 7.0.8.6) + actionview (= 7.0.8.6) + activejob (= 7.0.8.6) + activesupport (= 7.0.8.6) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.8.4) - actionview (= 7.0.8.4) - activesupport (= 7.0.8.4) + actionpack (7.0.8.6) + actionview (= 7.0.8.6) + activesupport (= 7.0.8.6) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8.4) - actionpack (= 7.0.8.4) - activerecord (= 7.0.8.4) - activestorage (= 7.0.8.4) - activesupport (= 7.0.8.4) + actiontext (7.0.8.6) + actionpack (= 7.0.8.6) + activerecord (= 7.0.8.6) + activestorage (= 7.0.8.6) + activesupport (= 7.0.8.6) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8.4) - activesupport (= 7.0.8.4) + actionview (7.0.8.6) + activesupport (= 7.0.8.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.8.4) - activesupport (= 7.0.8.4) + activejob (7.0.8.6) + activesupport (= 7.0.8.6) globalid (>= 0.3.6) - activemodel (7.0.8.4) - activesupport (= 7.0.8.4) - activerecord (7.0.8.4) - activemodel (= 7.0.8.4) - activesupport (= 7.0.8.4) + activemodel (7.0.8.6) + activesupport (= 7.0.8.6) + activerecord (7.0.8.6) + activemodel (= 7.0.8.6) + activesupport (= 7.0.8.6) activerecord-explain-analyze (0.1.0) activerecord (>= 4) pg - activestorage (7.0.8.4) - actionpack (= 7.0.8.4) - activejob (= 7.0.8.4) - activerecord (= 7.0.8.4) - activesupport (= 7.0.8.4) + activestorage (7.0.8.6) + actionpack (= 7.0.8.6) + activejob (= 7.0.8.6) + activerecord (= 7.0.8.6) + activesupport (= 7.0.8.6) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.8.4) + activesupport (7.0.8.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -1487,20 +1487,20 @@ GEM rack-test (2.1.0) rack (>= 1.3) rack-timeout (0.7.0) - rails (7.0.8.4) - actioncable (= 7.0.8.4) - actionmailbox (= 7.0.8.4) - actionmailer (= 7.0.8.4) - actionpack (= 7.0.8.4) - actiontext (= 7.0.8.4) - actionview (= 7.0.8.4) - activejob (= 7.0.8.4) - activemodel (= 7.0.8.4) - activerecord (= 7.0.8.4) - activestorage (= 7.0.8.4) - activesupport (= 7.0.8.4) + rails (7.0.8.6) + actioncable (= 7.0.8.6) + actionmailbox (= 7.0.8.6) + actionmailer (= 7.0.8.6) + actionpack (= 7.0.8.6) + actiontext (= 7.0.8.6) + actionview (= 7.0.8.6) + activejob (= 7.0.8.6) + activemodel (= 7.0.8.6) + activerecord (= 7.0.8.6) + activestorage (= 7.0.8.6) + activesupport (= 7.0.8.6) bundler (>= 1.15.0) - railties (= 7.0.8.4) + railties (= 7.0.8.6) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -1514,9 +1514,9 @@ GEM rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.8.4) - actionpack (= 7.0.8.4) - activesupport (= 7.0.8.4) + railties (7.0.8.6) + actionpack (= 7.0.8.6) + activesupport (= 7.0.8.6) method_source rake (>= 12.2) thor (~> 1.0) @@ -2244,7 +2244,7 @@ DEPENDENCIES rack-oauth2 (~> 2.2.1) rack-proxy (~> 0.7.7) rack-timeout (~> 0.7.0) - rails (~> 7.0.8.4) + rails (~> 7.0.8.6) rails-controller-testing rails-i18n (~> 7.0, >= 7.0.9) rainbow (~> 3.0) diff --git a/app/assets/javascripts/rapid_diffs/adapters.js b/app/assets/javascripts/rapid_diffs/adapters.js index f2892200ca4..3ba1e747e3b 100644 --- a/app/assets/javascripts/rapid_diffs/adapters.js +++ b/app/assets/javascripts/rapid_diffs/adapters.js @@ -1,7 +1,5 @@ import { ExpandLinesAdapter } from '~/rapid_diffs/expand_lines/adapter'; -/** @module RapidDiffs */ - const RAPID_DIFFS_VIEWERS = { text_inline: 'text_inline', text_parallel: 'text_parallel', @@ -11,24 +9,3 @@ export const VIEWER_ADAPTERS = { [RAPID_DIFFS_VIEWERS.text_inline]: [ExpandLinesAdapter], [RAPID_DIFFS_VIEWERS.text_parallel]: [ExpandLinesAdapter], }; - -/** @typedef {HTMLDivElement} diffElement */ -/** @typedef {string} viewer */ - -/** - * @typedef {Object} adapterContext - * @property {viewer} viewer - * @property {diffElement} diffElement - */ - -/** - * @typedef {PointerEvent} PointerEventWithTarget - * @property {HTMLElement} target - */ - -/** - * @typedef {Object} diffFileAdapter - * @property {function(this: adapterContext, event: PointerEventWithTarget): void} [onClick] - Handle click events that happen on the diff file. - * @property {function(this: adapterContext): void} [onVisible] - Executes when diff files becomes visible. - * @property {function(this: adapterContext): void} [onInvisible] - Executes when diff files becomes invisible. - */ diff --git a/app/assets/javascripts/rapid_diffs/diff_file.js b/app/assets/javascripts/rapid_diffs/diff_file.js index 89f2b347dd5..0b4f773d3d4 100644 --- a/app/assets/javascripts/rapid_diffs/diff_file.js +++ b/app/assets/javascripts/rapid_diffs/diff_file.js @@ -1,8 +1,9 @@ import { VIEWER_ADAPTERS } from './adapters'; // required for easier mocking in tests import IntersectionObserver from './intersection_observer'; +import * as events from './events'; -/** @module RapidDiffs */ +const eventNames = Object.values(events); const sharedObserver = new IntersectionObserver((entries) => { entries.forEach((entry) => { @@ -15,49 +16,81 @@ const sharedObserver = new IntersectionObserver((entries) => { }); export class DiffFile extends HTMLElement { - /** @type {diffElement} */ diffElement; - /** @type {viewer} */ viewer; + // intermediate state storage for adapters + sink = {}; adapterConfig = VIEWER_ADAPTERS; - constructor() { - super(); - this.boundOnClick = this.onClick.bind(this); + static findByFileHash(hash) { + return document.querySelector(`diff-file#${hash}`); + } + + static getAll() { + return document.querySelectorAll('diff-file'); } mount() { const [diffElement] = this.children; this.diffElement = diffElement; this.viewer = this.dataset.viewer; + this.observeVisibility(); + this.diffElement.addEventListener('click', this.onClick.bind(this)); + this.trigger(events.MOUNTED); + } + + trigger(event, ...args) { + if (!eventNames.includes(event)) + throw new Error( + `Missing event declaration: ${event}. Did you forget to declare this in ~/rapid_diffs/events.js?`, + ); + this.adapters.forEach((adapter) => adapter[event]?.call?.(this.adapterContext, ...args)); + } + + observeVisibility() { + if (!this.adapters.some((adapter) => adapter[events.VISIBLE] || adapter[events.INVISIBLE])) + return; sharedObserver.observe(this); } onVisible() { - this.diffElement.addEventListener('click', this.boundOnClick); - this.adapters.forEach((adapter) => adapter.onVisible?.call?.(this.adapterContext)); + this.trigger(events.VISIBLE); } onInvisible() { - this.adapters.forEach((adapter) => adapter.onInvisible?.call?.(this.adapterContext)); - this.diffElement.removeEventListener('click', this.boundOnClick); + this.trigger(events.INVISIBLE); } onClick(event) { - this.adapters.forEach((adapter) => adapter.onClick?.call?.(this.adapterContext, event)); + const clickActionElement = event.target.closest('[data-click]'); + if (clickActionElement) { + const clickAction = clickActionElement.dataset.click; + this.adapters.forEach((adapter) => + adapter.clicks?.[clickAction]?.call?.(this.adapterContext, event), + ); + } + this.trigger(events.CLICK, event); + } + + get data() { + const data = { ...this.dataset }; + // viewer is dynamic, should be accessed via this.viewer + delete data.viewer; + return data; } - /** @returns {adapterContext} */ get adapterContext() { return { diffElement: this.diffElement, viewer: this.viewer, + sink: this.sink, + data: this.data, + trigger: this.trigger, }; } - /** @returns {diffFileAdapter[]} */ get adapters() { - return this.adapterConfig[this.viewer]; + return this.adapterConfig[this.viewer] || []; } } diff --git a/app/assets/javascripts/rapid_diffs/events.js b/app/assets/javascripts/rapid_diffs/events.js new file mode 100644 index 00000000000..c07c2dda720 --- /dev/null +++ b/app/assets/javascripts/rapid_diffs/events.js @@ -0,0 +1,4 @@ +export const MOUNTED = 'mounted'; +export const CLICK = 'click'; +export const VISIBLE = 'visible'; +export const INVISIBLE = 'invisible'; diff --git a/app/assets/javascripts/rapid_diffs/expand_lines/adapter.js b/app/assets/javascripts/rapid_diffs/expand_lines/adapter.js index d79e36f72ba..8fc0014e6a8 100644 --- a/app/assets/javascripts/rapid_diffs/expand_lines/adapter.js +++ b/app/assets/javascripts/rapid_diffs/expand_lines/adapter.js @@ -16,27 +16,29 @@ const viewersMap = { text_parallel: 'parallel', }; -/** @type {diffFileAdapter} */ export const ExpandLinesAdapter = { - async onClick(event) { - const { target } = event; - const { expandPrevLine, expandNextLine } = target.dataset; - const parent = target.closest('tr'); - if (parent.dataset.loading || (!expandPrevLine && !expandNextLine)) return; + clicks: { + async expandLines(event) { + const { target } = event; + const { expandPrevLine, expandNextLine } = target.dataset; + if (!expandPrevLine && !expandNextLine) return; + const parent = target.closest('tr'); + if (parent.dataset.loading) return; - parent.dataset.loading = true; + parent.dataset.loading = true; - const { blobDiffPath } = this.diffElement.dataset; - const lines = await getLines({ - expandPrevLine, - lineData: collectLineData(parent), - blobDiffPath, - view: viewersMap[this.viewer], - }); + const { blobDiffPath } = this.data; + const lines = await getLines({ + expandPrevLine, + lineData: collectLineData(parent), + blobDiffPath, + view: viewersMap[this.viewer], + }); - const method = expandPrevLine ? 'beforebegin' : 'afterend'; - // eslint-disable-next-line no-unsanitized/method - parent.insertAdjacentHTML(method, lines); - parent.remove(); + const method = expandPrevLine ? 'beforebegin' : 'afterend'; + // eslint-disable-next-line no-unsanitized/method + parent.insertAdjacentHTML(method, lines); + parent.remove(); + }, }, }; diff --git a/app/assets/javascripts/super_sidebar/components/global_search/command_palette/command_palette_items.vue b/app/assets/javascripts/super_sidebar/components/global_search/command_palette/command_palette_items.vue index 67df7aff6dd..2b8d1642c27 100644 --- a/app/assets/javascripts/super_sidebar/components/global_search/command_palette/command_palette_items.vue +++ b/app/assets/javascripts/super_sidebar/components/global_search/command_palette/command_palette_items.vue @@ -191,7 +191,7 @@ export default { return fuzzaldrinPlus.filter(items, this.searchQuery, { key }); }, async getProjectFiles() { - if (!this.projectFiles.length) { + if (this.projectFilesPath && !this.projectFiles.length) { this.loading = true; try { diff --git a/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_summary.vue b/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_summary.vue index 9fab0998241..79b5dfdfc21 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_summary.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_summary.vue @@ -138,7 +138,7 @@ export default {