diff --git a/Gemfile b/Gemfile index 2b1f4481437..b46b5f49360 100644 --- a/Gemfile +++ b/Gemfile @@ -413,7 +413,7 @@ gem 'thrift', '>= 0.16.0', feature_category: :shared # I18n gem 'rails-i18n', '~> 7.0', '>= 7.0.9', feature_category: :internationalization gem 'gettext_i18n_rails', '~> 1.13.0', feature_category: :internationalization -gem 'gettext', '~> 3.4', '>= 3.4.9', +gem 'gettext', '~> 3.5', '>= 3.5.1', require: false, group: [:development, :test], feature_category: :internationalization @@ -593,7 +593,7 @@ group :test do gem 'graphlyte', '~> 1.0.0', feature_category: :shared gem 'shoulda-matchers', '~> 5.1.0', require: false, feature_category: :shared - gem 'email_spec', '~> 2.2.0', feature_category: :shared + gem 'email_spec', '~> 2.3.0', feature_category: :shared gem 'webmock', '~> 3.24.0', feature_category: :shared gem 'rails-controller-testing', feature_category: :shared gem 'concurrent-ruby', '~> 1.1', feature_category: :shared diff --git a/Gemfile.checksum b/Gemfile.checksum index a3c6699e7cf..4ed685c572a 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -148,7 +148,7 @@ {"name":"elasticsearch-rails","version":"7.2.1","platform":"ruby","checksum":"0750dc0e956358d9a3a0912a8186c266ef19f8de0b178c61996ed1a6998156e4"}, {"name":"elasticsearch-transport","version":"7.17.11","platform":"ruby","checksum":"d18057d5295e4c39fe80084ede9e00e9c0e0d74580348985f8677b2fb7f70f03"}, {"name":"email_reply_trimmer","version":"0.1.6","platform":"ruby","checksum":"9fede222ce660993e4e2e3dad282535ceb7914e246eb8302c19aa9e021f7326e"}, -{"name":"email_spec","version":"2.2.0","platform":"ruby","checksum":"60b7980580a835e7f676db60667f17a2d60e8e0e39c26d81cfc231805c544d79"}, +{"name":"email_spec","version":"2.3.0","platform":"ruby","checksum":"df23be7a131186f7a3d5be3b35eaac9196f9ac13bd26c9c3d59341e13d852d11"}, {"name":"email_validator","version":"2.2.4","platform":"ruby","checksum":"5ab238095bec7aef9389f230e9e0c64c5081cdf91f19d6c5cecee0a93af20604"}, {"name":"encryptor","version":"3.0.0","platform":"ruby","checksum":"abf23f94ab4d864b8cea85b43f3432044a60001982cda7c33c1cd90da8db1969"}, {"name":"erubi","version":"1.12.0","platform":"ruby","checksum":"27bedb74dfb1e04ff60674975e182d8ca787f2224f2e8143268c7696f42e4723"}, @@ -216,7 +216,7 @@ {"name":"gdk-toogle","version":"0.9.5","platform":"ruby","checksum":"38b8972576d324c0905e5a2935592c21ec36bedb4bf1e6d195257ee20ebad249"}, {"name":"gemoji","version":"3.0.1","platform":"ruby","checksum":"80553f2f4932a7a95fb1b3c7c63f7dd937e7c8c610164bbdea28fd06eba5f36d"}, {"name":"get_process_mem","version":"0.2.7","platform":"ruby","checksum":"4afd3c3641dd6a817c09806c7d6d509d8a9984512ac38dea8b917426bbf77eba"}, -{"name":"gettext","version":"3.4.9","platform":"ruby","checksum":"292864fe6a15c224cee4125a4a72fab426fdbb280e4cff3cfe44935f549b009a"}, +{"name":"gettext","version":"3.5.1","platform":"ruby","checksum":"03ec7f71ea7e2cf1fdcd5e08682e98b81601922fdbee890b7bc6f63b0e1a512a"}, {"name":"gettext_i18n_rails","version":"1.13.0","platform":"ruby","checksum":"d4a4739d928b6ce52a2d694d33a831dcb06c7c8e197b3172fc73dfaa20ac8ee6"}, {"name":"git","version":"1.18.0","platform":"ruby","checksum":"c9b80462e4565cd3d7a9ba8440c41d2c52244b17b0dad0bfddb46de70630c465"}, {"name":"gitaly","version":"17.8.1","platform":"ruby","checksum":"6268ff47ea4a7480ca116f16dadaeca626eda345a04a0cfef812d2072797d6ed"}, @@ -376,7 +376,7 @@ {"name":"licensee","version":"9.17.1","platform":"ruby","checksum":"0be022c66d8853d35b08171a0f2575d5ccb5aef8a7020a1815938b4f26f4089a"}, {"name":"listen","version":"3.7.1","platform":"ruby","checksum":"3b80caa7aa77fae836916c2f9e3fbcafbd15f5d695dd487c1f5b5e7e465efe29"}, {"name":"llhttp-ffi","version":"0.4.0","platform":"ruby","checksum":"e5f7327db3cf8007e648342ef76347d6e0ae545a8402e519cca9c886eb37b001"}, -{"name":"locale","version":"2.1.3","platform":"ruby","checksum":"b6ddee011e157817cb98e521b3ce7cb626424d5882f1e844aafdee3e8b212725"}, +{"name":"locale","version":"2.1.4","platform":"ruby","checksum":"522f9973ef3eee64aac9bca06d21db2fba675fa3d2cf61d21f42d1ca18a9f780"}, {"name":"lockbox","version":"1.3.0","platform":"ruby","checksum":"ca8e5806e4e0c56d1d762ac5cf401940ff53fc37554ef623d3313c7a6331a3ea"}, {"name":"logger","version":"1.5.3","platform":"ruby","checksum":"ed443128c2c9254db1a3573c53708b00319c01022b40dcce60a873911831d67b"}, {"name":"lograge","version":"0.11.2","platform":"ruby","checksum":"4cbd1554b86f545d795eff15a0c24fd25057d2ac4e1caa5fc186168b3da932ef"}, @@ -522,7 +522,7 @@ {"name":"png_quantizator","version":"0.2.1","platform":"ruby","checksum":"6023d4d064125c3a7e02929c95b7320ed6ac0d7341f9e8de0c9ea6576ef3106b"}, {"name":"premailer","version":"1.23.0","platform":"ruby","checksum":"f0d7f6ba299559c96ddf982aa5263f85e5617c86437c8d8ffff120813b2d7efb"}, {"name":"premailer-rails","version":"1.12.0","platform":"ruby","checksum":"c13815d161b9bc7f7d3d81396b0bb0a61a90fa9bd89931548bf4e537c7710400"}, -{"name":"prime","version":"0.1.2","platform":"ruby","checksum":"d4e956cadfaf04de036dc7dc74f95bf6a285a62cc509b28b7a66b245d19fe3a4"}, +{"name":"prime","version":"0.1.3","platform":"ruby","checksum":"baf031c50d6ce923594913befc8ac86a3251bffb9d6a5e8b03687962054e53e3"}, {"name":"prism","version":"1.2.0","platform":"ruby","checksum":"24ff9cd3232346e68052659f14c9a618022ea98935f774df465206aba5c06d2f"}, {"name":"proc_to_ast","version":"0.1.0","platform":"ruby","checksum":"92a73fa66e2250a83f8589f818b0751bcf227c68f85916202df7af85082f8691"}, {"name":"prometheus-client-mmap","version":"1.2.8","platform":"aarch64-linux-gnu","checksum":"7a3e8d7e95f7e53a6870381135f5f4b6c8c3f3b244b7cd760e3582c5abd86512"}, @@ -698,7 +698,7 @@ {"name":"simplecov-lcov","version":"0.8.0","platform":"ruby","checksum":"0115f31cb7ef5ec4334f5d9382c67fd43de2e5270e21b65bfc693da82dd713c1"}, {"name":"simplecov_json_formatter","version":"0.1.4","platform":"ruby","checksum":"529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428"}, {"name":"simpleidn","version":"0.2.3","platform":"ruby","checksum":"08ce96f03fa1605286be22651ba0fc9c0b2d6272c9b27a260bc88be05b0d2c29"}, -{"name":"singleton","version":"0.1.1","platform":"ruby","checksum":"b410b0417fcbb17bdfbc2d478ddba4c91e873d6e51c9d2d16b345c5ee5491c54"}, +{"name":"singleton","version":"0.3.0","platform":"ruby","checksum":"83ea1bca5f4aa34d00305ab842a7862ea5a8a11c73d362cb52379d94e9615778"}, {"name":"sixarm_ruby_unaccent","version":"1.2.0","platform":"ruby","checksum":"0043a6077bdf2c4b03040152676a07f8bf77144f9b007b1960ee5c94d13a4384"}, {"name":"slack-messenger","version":"2.3.6","platform":"ruby","checksum":"58581e587debcbb769336cc7ebe4eb6ae411947fccf347e967a17ac9813e66d8"}, {"name":"snaky_hash","version":"2.0.0","platform":"ruby","checksum":"fe8b2e39e8ff69320f7812af73ea06401579e29ff1734a7009567391600687de"}, diff --git a/Gemfile.lock b/Gemfile.lock index 826f590e2ac..f379040892b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -575,9 +575,9 @@ GEM faraday (>= 1, < 3) multi_json email_reply_trimmer (0.1.6) - email_spec (2.2.0) + email_spec (2.3.0) htmlentities (~> 4.3.3) - launchy (~> 2.1) + launchy (>= 2.1, < 4.0) mail (~> 2.7) email_validator (2.2.4) activemodel @@ -706,7 +706,7 @@ GEM gemoji (3.0.1) get_process_mem (0.2.7) ffi (~> 1.0) - gettext (3.4.9) + gettext (3.5.1) erubi locale (>= 2.0.5) prime @@ -1116,7 +1116,7 @@ GEM llhttp-ffi (0.4.0) ffi-compiler (~> 1.0) rake (~> 13.0) - locale (2.1.3) + locale (2.1.4) lockbox (1.3.0) logger (1.5.3) lograge (0.11.2) @@ -1447,7 +1447,7 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - prime (0.1.2) + prime (0.1.3) forwardable singleton prism (1.2.0) @@ -1766,7 +1766,7 @@ GEM simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) simpleidn (0.2.3) - singleton (0.1.1) + singleton (0.3.0) sixarm_ruby_unaccent (1.2.0) slack-messenger (2.3.6) re2 (~> 2.7, >= 2.7.0) @@ -2057,7 +2057,7 @@ DEPENDENCIES elasticsearch-model (~> 7.2) elasticsearch-rails (~> 7.2) email_reply_trimmer (~> 0.1) - email_spec (~> 2.2.0) + email_spec (~> 2.3.0) error_tracking_open_api! factory_bot_rails (~> 6.4.3) faraday (~> 2) @@ -2079,7 +2079,7 @@ DEPENDENCIES fugit (~> 1.11.1) fuubar (~> 2.2.0) gdk-toogle (~> 0.9, >= 0.9.5) - gettext (~> 3.4, >= 3.4.9) + gettext (~> 3.5, >= 3.5.1) gettext_i18n_rails (~> 1.13.0) git (~> 1.8) gitaly (~> 17.8.0) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index ddc65e97d62..54eb3d0f854 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -148,7 +148,7 @@ {"name":"elasticsearch-rails","version":"7.2.1","platform":"ruby","checksum":"0750dc0e956358d9a3a0912a8186c266ef19f8de0b178c61996ed1a6998156e4"}, {"name":"elasticsearch-transport","version":"7.17.11","platform":"ruby","checksum":"d18057d5295e4c39fe80084ede9e00e9c0e0d74580348985f8677b2fb7f70f03"}, {"name":"email_reply_trimmer","version":"0.1.6","platform":"ruby","checksum":"9fede222ce660993e4e2e3dad282535ceb7914e246eb8302c19aa9e021f7326e"}, -{"name":"email_spec","version":"2.2.0","platform":"ruby","checksum":"60b7980580a835e7f676db60667f17a2d60e8e0e39c26d81cfc231805c544d79"}, +{"name":"email_spec","version":"2.3.0","platform":"ruby","checksum":"df23be7a131186f7a3d5be3b35eaac9196f9ac13bd26c9c3d59341e13d852d11"}, {"name":"email_validator","version":"2.2.4","platform":"ruby","checksum":"5ab238095bec7aef9389f230e9e0c64c5081cdf91f19d6c5cecee0a93af20604"}, {"name":"encryptor","version":"3.0.0","platform":"ruby","checksum":"abf23f94ab4d864b8cea85b43f3432044a60001982cda7c33c1cd90da8db1969"}, {"name":"erubi","version":"1.12.0","platform":"ruby","checksum":"27bedb74dfb1e04ff60674975e182d8ca787f2224f2e8143268c7696f42e4723"}, @@ -216,7 +216,7 @@ {"name":"gdk-toogle","version":"0.9.5","platform":"ruby","checksum":"38b8972576d324c0905e5a2935592c21ec36bedb4bf1e6d195257ee20ebad249"}, {"name":"gemoji","version":"3.0.1","platform":"ruby","checksum":"80553f2f4932a7a95fb1b3c7c63f7dd937e7c8c610164bbdea28fd06eba5f36d"}, {"name":"get_process_mem","version":"0.2.7","platform":"ruby","checksum":"4afd3c3641dd6a817c09806c7d6d509d8a9984512ac38dea8b917426bbf77eba"}, -{"name":"gettext","version":"3.4.9","platform":"ruby","checksum":"292864fe6a15c224cee4125a4a72fab426fdbb280e4cff3cfe44935f549b009a"}, +{"name":"gettext","version":"3.5.1","platform":"ruby","checksum":"03ec7f71ea7e2cf1fdcd5e08682e98b81601922fdbee890b7bc6f63b0e1a512a"}, {"name":"gettext_i18n_rails","version":"1.13.0","platform":"ruby","checksum":"d4a4739d928b6ce52a2d694d33a831dcb06c7c8e197b3172fc73dfaa20ac8ee6"}, {"name":"git","version":"1.18.0","platform":"ruby","checksum":"c9b80462e4565cd3d7a9ba8440c41d2c52244b17b0dad0bfddb46de70630c465"}, {"name":"gitaly","version":"17.8.1","platform":"ruby","checksum":"6268ff47ea4a7480ca116f16dadaeca626eda345a04a0cfef812d2072797d6ed"}, @@ -379,7 +379,7 @@ {"name":"licensee","version":"9.17.1","platform":"ruby","checksum":"0be022c66d8853d35b08171a0f2575d5ccb5aef8a7020a1815938b4f26f4089a"}, {"name":"listen","version":"3.7.1","platform":"ruby","checksum":"3b80caa7aa77fae836916c2f9e3fbcafbd15f5d695dd487c1f5b5e7e465efe29"}, {"name":"llhttp-ffi","version":"0.4.0","platform":"ruby","checksum":"e5f7327db3cf8007e648342ef76347d6e0ae545a8402e519cca9c886eb37b001"}, -{"name":"locale","version":"2.1.3","platform":"ruby","checksum":"b6ddee011e157817cb98e521b3ce7cb626424d5882f1e844aafdee3e8b212725"}, +{"name":"locale","version":"2.1.4","platform":"ruby","checksum":"522f9973ef3eee64aac9bca06d21db2fba675fa3d2cf61d21f42d1ca18a9f780"}, {"name":"lockbox","version":"1.3.0","platform":"ruby","checksum":"ca8e5806e4e0c56d1d762ac5cf401940ff53fc37554ef623d3313c7a6331a3ea"}, {"name":"logger","version":"1.5.3","platform":"ruby","checksum":"ed443128c2c9254db1a3573c53708b00319c01022b40dcce60a873911831d67b"}, {"name":"lograge","version":"0.11.2","platform":"ruby","checksum":"4cbd1554b86f545d795eff15a0c24fd25057d2ac4e1caa5fc186168b3da932ef"}, @@ -527,7 +527,7 @@ {"name":"premailer","version":"1.23.0","platform":"ruby","checksum":"f0d7f6ba299559c96ddf982aa5263f85e5617c86437c8d8ffff120813b2d7efb"}, {"name":"premailer-rails","version":"1.12.0","platform":"ruby","checksum":"c13815d161b9bc7f7d3d81396b0bb0a61a90fa9bd89931548bf4e537c7710400"}, {"name":"prettyprint","version":"0.2.0","platform":"ruby","checksum":"2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193"}, -{"name":"prime","version":"0.1.2","platform":"ruby","checksum":"d4e956cadfaf04de036dc7dc74f95bf6a285a62cc509b28b7a66b245d19fe3a4"}, +{"name":"prime","version":"0.1.3","platform":"ruby","checksum":"baf031c50d6ce923594913befc8ac86a3251bffb9d6a5e8b03687962054e53e3"}, {"name":"prism","version":"1.2.0","platform":"ruby","checksum":"24ff9cd3232346e68052659f14c9a618022ea98935f774df465206aba5c06d2f"}, {"name":"proc_to_ast","version":"0.1.0","platform":"ruby","checksum":"92a73fa66e2250a83f8589f818b0751bcf227c68f85916202df7af85082f8691"}, {"name":"prometheus-client-mmap","version":"1.2.8","platform":"aarch64-linux-gnu","checksum":"7a3e8d7e95f7e53a6870381135f5f4b6c8c3f3b244b7cd760e3582c5abd86512"}, @@ -709,7 +709,7 @@ {"name":"simplecov-lcov","version":"0.8.0","platform":"ruby","checksum":"0115f31cb7ef5ec4334f5d9382c67fd43de2e5270e21b65bfc693da82dd713c1"}, {"name":"simplecov_json_formatter","version":"0.1.4","platform":"ruby","checksum":"529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428"}, {"name":"simpleidn","version":"0.2.3","platform":"ruby","checksum":"08ce96f03fa1605286be22651ba0fc9c0b2d6272c9b27a260bc88be05b0d2c29"}, -{"name":"singleton","version":"0.1.1","platform":"ruby","checksum":"b410b0417fcbb17bdfbc2d478ddba4c91e873d6e51c9d2d16b345c5ee5491c54"}, +{"name":"singleton","version":"0.3.0","platform":"ruby","checksum":"83ea1bca5f4aa34d00305ab842a7862ea5a8a11c73d362cb52379d94e9615778"}, {"name":"sixarm_ruby_unaccent","version":"1.2.0","platform":"ruby","checksum":"0043a6077bdf2c4b03040152676a07f8bf77144f9b007b1960ee5c94d13a4384"}, {"name":"slack-messenger","version":"2.3.6","platform":"ruby","checksum":"58581e587debcbb769336cc7ebe4eb6ae411947fccf347e967a17ac9813e66d8"}, {"name":"snaky_hash","version":"2.0.0","platform":"ruby","checksum":"fe8b2e39e8ff69320f7812af73ea06401579e29ff1734a7009567391600687de"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index 996ca6c3264..c9f0682e895 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -587,9 +587,9 @@ GEM faraday (>= 1, < 3) multi_json email_reply_trimmer (0.1.6) - email_spec (2.2.0) + email_spec (2.3.0) htmlentities (~> 4.3.3) - launchy (~> 2.1) + launchy (>= 2.1, < 4.0) mail (~> 2.7) email_validator (2.2.4) activemodel @@ -718,7 +718,7 @@ GEM gemoji (3.0.1) get_process_mem (0.2.7) ffi (~> 1.0) - gettext (3.4.9) + gettext (3.5.1) erubi locale (>= 2.0.5) prime @@ -1133,7 +1133,7 @@ GEM llhttp-ffi (0.4.0) ffi-compiler (~> 1.0) rake (~> 13.0) - locale (2.1.3) + locale (2.1.4) lockbox (1.3.0) logger (1.5.3) lograge (0.11.2) @@ -1467,7 +1467,7 @@ GEM net-smtp premailer (~> 1.7, >= 1.7.9) prettyprint (0.2.0) - prime (0.1.2) + prime (0.1.3) forwardable singleton prism (1.2.0) @@ -1799,7 +1799,7 @@ GEM simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) simpleidn (0.2.3) - singleton (0.1.1) + singleton (0.3.0) sixarm_ruby_unaccent (1.2.0) slack-messenger (2.3.6) re2 (~> 2.7, >= 2.7.0) @@ -2092,7 +2092,7 @@ DEPENDENCIES elasticsearch-model (~> 7.2) elasticsearch-rails (~> 7.2) email_reply_trimmer (~> 0.1) - email_spec (~> 2.2.0) + email_spec (~> 2.3.0) error_tracking_open_api! factory_bot_rails (~> 6.4.3) faraday (~> 2) @@ -2114,7 +2114,7 @@ DEPENDENCIES fugit (~> 1.11.1) fuubar (~> 2.2.0) gdk-toogle (~> 0.9, >= 0.9.5) - gettext (~> 3.4, >= 3.4.9) + gettext (~> 3.5, >= 3.5.1) gettext_i18n_rails (~> 1.13.0) git (~> 1.8) gitaly (~> 17.8.0) diff --git a/app/assets/javascripts/blob/components/blob_header_filepath.vue b/app/assets/javascripts/blob/components/blob_header_filepath.vue index 1e8b7c55725..719eff1b993 100644 --- a/app/assets/javascripts/blob/components/blob_header_filepath.vue +++ b/app/assets/javascripts/blob/components/blob_header_filepath.vue @@ -3,6 +3,7 @@ import { GlBadge, GlLink } from '@gitlab/ui'; import { numberToHumanSize } from '~/lib/utils/number_utils'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import FileIcon from '~/vue_shared/components/file_icon.vue'; +import featureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; export default { components: { @@ -11,6 +12,7 @@ export default { GlBadge, GlLink, }, + mixins: [featureFlagMixin()], props: { blob: { type: Object, @@ -72,6 +74,7 @@ export default { {{ repo.importSource.fullName }} - +
@@ -192,14 +196,14 @@ export default { @select="onSelect" />
/
diff --git a/app/assets/javascripts/repository/components/header_area/breadcrumbs.vue b/app/assets/javascripts/repository/components/header_area/breadcrumbs.vue index 5c8ddb815bc..3d0fc4994d2 100644 --- a/app/assets/javascripts/repository/components/header_area/breadcrumbs.vue +++ b/app/assets/javascripts/repository/components/header_area/breadcrumbs.vue @@ -10,12 +10,15 @@ import projectPathQuery from '~/repository/queries/project_path.query.graphql'; import projectShortPathQuery from '~/repository/queries/project_short_path.query.graphql'; import UploadBlobModal from '~/repository/components/upload_blob_modal.vue'; import NewDirectoryModal from '~/repository/components/new_directory_modal.vue'; +import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; +import featureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; const UPLOAD_BLOB_MODAL_ID = 'modal-upload-blob'; const NEW_DIRECTORY_MODAL_ID = 'modal-new-directory'; export default { components: { + ClipboardButton, GlDisclosureDropdown, UploadBlobModal, NewDirectoryModal, @@ -44,7 +47,7 @@ export default { directives: { GlModal: GlModalDirective, }, - mixins: [getRefMixin], + mixins: [getRefMixin, featureFlagMixin()], inject: { projectRootPath: { default: '', @@ -297,6 +300,12 @@ export default { newDirectoryPath() { return joinPaths(this.newDirPath, this.currentPath); }, + gfmCopyText() { + return `\`${this.currentPath}\``; + }, + showCopyButton() { + return this.glFeatures.blobOverflowMenu && this.currentPath?.trim().length; + }, }, methods: { isLast(i) { @@ -310,7 +319,7 @@ export default {