diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-13 06:10:36 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-13 06:10:36 +0300 |
commit | 44696847f6f67ecd065d273f971a3aeec3187673 (patch) | |
tree | 49433d6be6593bf7bcaa81dd5a48534608bb4471 /app | |
parent | dce8d0c6a7fdc7cca4df3b00b11d68000d117e2f (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
8 files changed, 107 insertions, 36 deletions
diff --git a/app/assets/javascripts/pages/projects/blob/show/index.js b/app/assets/javascripts/pages/projects/blob/show/index.js index a3d930433c3..07662e4411e 100644 --- a/app/assets/javascripts/pages/projects/blob/show/index.js +++ b/app/assets/javascripts/pages/projects/blob/show/index.js @@ -21,6 +21,7 @@ import RefSelector from '~/ref/components/ref_selector.vue'; import { joinPaths, visitUrl } from '~/lib/utils/url_utility'; import { parseBoolean } from '~/lib/utils/common_utils'; import HighlightWorker from '~/vue_shared/components/source_viewer/workers/highlight_worker?worker'; +import initAmbiguousRefModal from '~/ref/init_ambiguous_ref_modal'; Vue.use(Vuex); Vue.use(VueApollo); @@ -62,6 +63,7 @@ const initRefSwitcher = () => { }; initRefSwitcher(); +initAmbiguousRefModal(); if (viewBlobEl) { const { diff --git a/app/assets/javascripts/pages/projects/show/index.js b/app/assets/javascripts/pages/projects/show/index.js index bee0731d711..98c58515d24 100644 --- a/app/assets/javascripts/pages/projects/show/index.js +++ b/app/assets/javascripts/pages/projects/show/index.js @@ -7,6 +7,7 @@ import initTerraformNotification from '~/projects/terraform_notification'; import { initUploadFileTrigger } from '~/projects/upload_file'; import initReadMore from '~/read_more'; import initForksButton from '~/forks/init_forks_button'; +import initAmbiguousRefModal from '~/ref/init_ambiguous_ref_modal'; // Project show page loads different overview content based on user preferences if (document.getElementById('js-tree-list')) { @@ -45,6 +46,7 @@ initTerraformNotification(); initReadMore(); initStarButton(); +initAmbiguousRefModal(); if (document.querySelector('.js-autodevops-banner')) { import(/* webpackChunkName: 'userCallOut' */ '~/user_callout') diff --git a/app/assets/javascripts/pages/projects/tree/show/index.js b/app/assets/javascripts/pages/projects/tree/show/index.js index 17c17014ece..d87f8898c63 100644 --- a/app/assets/javascripts/pages/projects/tree/show/index.js +++ b/app/assets/javascripts/pages/projects/tree/show/index.js @@ -2,7 +2,9 @@ import $ from 'jquery'; import initTree from 'ee_else_ce/repository'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation'; import NewCommitForm from '~/new_commit_form'; +import initAmbiguousRefModal from '~/ref/init_ambiguous_ref_modal'; new NewCommitForm($('.js-create-dir-form')); // eslint-disable-line no-new initTree(); +initAmbiguousRefModal(); new ShortcutsNavigation(); // eslint-disable-line no-new diff --git a/app/assets/javascripts/ref/components/ambiguous_ref_modal.vue b/app/assets/javascripts/ref/components/ambiguous_ref_modal.vue new file mode 100644 index 00000000000..d17144669fe --- /dev/null +++ b/app/assets/javascripts/ref/components/ambiguous_ref_modal.vue @@ -0,0 +1,80 @@ +<!-- eslint-disable vue/multi-word-component-names --> +<script> +import { GlModal, GlButton, GlSprintf } from '@gitlab/ui'; +import { sprintf, s__ } from '~/locale'; +import { visitUrl } from '~/lib/utils/url_utility'; +import { REF_TYPE_PARAM_NAME, TAG_REF_TYPE, BRANCH_REF_TYPE } from '../constants'; + +export default { + i18n: { + title: s__('AmbiguousRef|Which reference do you want to view?'), + description: sprintf( + s__('AmbiguousRef|There is a branch and a tag with the same name of %{ref}.'), + ), + secondaryDescription: s__('AmbiguousRef|Which reference would you like to view?'), + viewTagButton: s__('AmbiguousRef|View tag'), + viewBranchButton: s__('AmbiguousRef|View branch'), + }, + tagRefType: TAG_REF_TYPE, + branchRefType: BRANCH_REF_TYPE, + components: { + GlModal, + GlButton, + GlSprintf, + }, + + props: { + refName: { + type: String, + required: true, + }, + }, + mounted() { + this.$refs.ambiguousRefModal.show(); + }, + methods: { + navigate(refType) { + const url = new URL(window.location.href); + url.searchParams.set(REF_TYPE_PARAM_NAME, refType); + + visitUrl(url.toString()); + }, + }, +}; +</script> + +<template> + <gl-modal + ref="ambiguousRefModal" + modal-id="ambiguous-ref" + :title="$options.i18n.title" + @primary="navigate" + > + <p class="gl-mb-0"> + <gl-sprintf :message="$options.i18n.description"> + <template #ref + ><code>{{ refName }}</code></template + > + </gl-sprintf> + </p> + + <p> + {{ $options.i18n.secondaryDescription }} + </p> + + <template #modal-footer> + <gl-button + category="secondary" + variant="confirm" + @click="() => navigate($options.tagRefType)" + >{{ $options.i18n.viewTagButton }}</gl-button + > + <gl-button + category="secondary" + variant="confirm" + @click="() => navigate($options.branchRefType)" + >{{ $options.i18n.viewBranchButton }}</gl-button + > + </template> + </gl-modal> +</template> diff --git a/app/assets/javascripts/ref/constants.js b/app/assets/javascripts/ref/constants.js index 7699c4fd863..5fd4660b8e3 100644 --- a/app/assets/javascripts/ref/constants.js +++ b/app/assets/javascripts/ref/constants.js @@ -9,6 +9,7 @@ export const BRANCH_REF_TYPE = 'heads'; export const TAG_REF_TYPE = 'tags'; export const TAG_REF_TYPE_ICON = 'tag'; export const BRANCH_REF_TYPE_ICON = 'branch'; +export const REF_TYPE_PARAM_NAME = 'ref_type'; export const X_TOTAL_HEADER = 'x-total'; diff --git a/app/assets/javascripts/ref/init_ambiguous_ref_modal.js b/app/assets/javascripts/ref/init_ambiguous_ref_modal.js new file mode 100644 index 00000000000..00fb8f10401 --- /dev/null +++ b/app/assets/javascripts/ref/init_ambiguous_ref_modal.js @@ -0,0 +1,20 @@ +import Vue from 'vue'; +import { parseBoolean } from '~/lib/utils/common_utils'; +import { getParameterByName } from '~/lib/utils/url_utility'; +import AmbiguousRefModal from './components/ambiguous_ref_modal.vue'; +import { REF_TYPE_PARAM_NAME, TAG_REF_TYPE, BRANCH_REF_TYPE } from './constants'; + +export default (el = document.querySelector('#js-ambiguous-ref-modal')) => { + const refType = getParameterByName(REF_TYPE_PARAM_NAME); + const isRefTypeSet = refType === TAG_REF_TYPE || refType === BRANCH_REF_TYPE; // if ref_type is already set in the URL, we don't want to display the modal + if (!el || isRefTypeSet || !parseBoolean(el.dataset.ambiguous)) return false; + + const { ref } = el.dataset; + + return new Vue({ + el, + render(createElement) { + return createElement(AmbiguousRefModal, { props: { refName: ref } }); + }, + }); +}; diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 3d08039942b..30d9e1922cc 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -124,9 +124,6 @@ module Projects # Notifications project.send_move_instructions(@old_path) - # Directories on disk - move_project_folders(project) - transfer_missing_group_resources(@old_group) # Move uploads @@ -235,44 +232,15 @@ module Projects end def rollback_side_effects - rollback_folder_move project.reset update_namespace_and_visibility(@old_namespace) update_repository_configuration(@old_path) end - def rollback_folder_move - return if project.hashed_storage?(:repository) - - move_repo_folder(@new_path, @old_path) - move_repo_folder(new_wiki_repo_path, old_wiki_repo_path) - move_repo_folder(new_design_repo_path, old_design_repo_path) - end - - def move_repo_folder(from_name, to_name) - gitlab_shell.mv_repository(project.repository_storage, from_name, to_name) - end - def execute_system_hooks system_hook_service.execute_hooks_for(project, :transfer) end - def move_project_folders(project) - return if project.hashed_storage?(:repository) - - # Move main repository - unless move_repo_folder(@old_path, @new_path) - raise TransferError, s_("TransferProject|Cannot move project") - end - - # Disk path is changed; we need to ensure we reload it - project.reload_repository! - - # Move wiki and design repos also if present - move_repo_folder(old_wiki_repo_path, new_wiki_repo_path) - move_repo_folder(old_design_repo_path, new_design_repo_path) - end - def move_project_uploads(project) return if project.hashed_storage?(:attachments) diff --git a/app/services/repositories/base_service.rb b/app/services/repositories/base_service.rb index bf7ac2e5fd8..371ff2fc499 100644 --- a/app/services/repositories/base_service.rb +++ b/app/services/repositories/base_service.rb @@ -15,10 +15,6 @@ class Repositories::BaseService < BaseService gitlab_shell.repository_exists?(repository.shard, path + '.git') end - def mv_repository(from_path, to_path) - gitlab_shell.mv_repository(repository.shard, from_path, to_path) - end - # If we get a Gitaly error, the repository may be corrupted. We can # ignore these errors since we're going to trash the repositories # anyway. |