Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-13 06:10:36 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-13 06:10:36 +0300
commit44696847f6f67ecd065d273f971a3aeec3187673 (patch)
tree49433d6be6593bf7bcaa81dd5a48534608bb4471 /app
parentdce8d0c6a7fdc7cca4df3b00b11d68000d117e2f (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/pages/projects/blob/show/index.js2
-rw-r--r--app/assets/javascripts/pages/projects/show/index.js2
-rw-r--r--app/assets/javascripts/pages/projects/tree/show/index.js2
-rw-r--r--app/assets/javascripts/ref/components/ambiguous_ref_modal.vue80
-rw-r--r--app/assets/javascripts/ref/constants.js1
-rw-r--r--app/assets/javascripts/ref/init_ambiguous_ref_modal.js20
-rw-r--r--app/services/projects/transfer_service.rb32
-rw-r--r--app/services/repositories/base_service.rb4
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.