From 1d156c9c8ee0d81370844d58c2863cb4b780489e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 13 Dec 2012 18:42:15 +0200 Subject: [PATCH] Fix project lookup. Show error if project transfer fails --- app/assets/javascripts/main.js.coffee | 6 ++++++ app/controllers/projects_controller.rb | 4 ++++ app/models/project.rb | 10 +++++++++- app/views/projects/_form.html.haml | 2 +- app/views/projects/update_failed.js.haml | 2 ++ 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 app/views/projects/update_failed.js.haml diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index bdb83f4..3334439 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -7,6 +7,12 @@ window.slugify = (text) -> window.ajaxGet = (url) -> $.ajax({type: "GET", url: url, dataType: "script"}) +window.errorMessage = (message) -> + ehtml = $("

") + ehtml.addClass("error_message") + ehtml.html(message) + ehtml + # Disable button if text field is empty window.disableButtonIfEmptyField = (field_selector, button_selector) -> field = $(field_selector) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 272a6e9..985dcfe 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -46,6 +46,10 @@ class ProjectsController < ProjectResourceController format.js end end + + rescue Project::TransferError => ex + @error = ex + render :update_failed end def show diff --git a/app/models/project.rb b/app/models/project.rb index b463a72..4687087 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -26,6 +26,8 @@ class Project < ActiveRecord::Base include Authority include Team + class TransferError < StandardError; end + attr_accessible :name, :path, :description, :default_branch, :issues_enabled, :wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin] @@ -101,7 +103,7 @@ class Project < ActiveRecord::Base namespace_id = Namespace.find_by_path(id.first).id where(namespace_id: namespace_id).find_by_path(id.last) else - find_by_path(id) + where(path: id, namespace_id: nil).last end end @@ -270,12 +272,18 @@ class Project < ActiveRecord::Base self.path end + if Project.where(path: self.path, namespace_id: new_namespace.try(:id)).present? + raise TransferError.new("Project with same path in target namespace already exists") + end + Gitlab::ProjectMover.new(self, old_dir, new_dir).execute git_host.move_repository(old_repo, self) save! end + rescue Gitlab::ProjectMover::ProjectMoveError => ex + raise TransferError.new(ex.message) end def name_with_namespace diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index 448293c..d0da214 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -22,7 +22,7 @@ %span Namespace .controls - if can? current_user, :change_namespace, @project - = f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'} + = f.select :namespace_id, namespaces_options(@project.namespace_id || Namespace::global_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}   %span.cred Be careful. Changing project namespace can have unintended side effects - else diff --git a/app/views/projects/update_failed.js.haml b/app/views/projects/update_failed.js.haml new file mode 100644 index 0000000..a3ac5f4 --- /dev/null +++ b/app/views/projects/update_failed.js.haml @@ -0,0 +1,2 @@ +:plain + $(".save-project-loader").replaceWith(errorMessage('#{escape_javascript(@error.message)}')); -- libgit2 0.21.2