Commit 1d156c9c8ee0d81370844d58c2863cb4b780489e

Authored by Dmitriy Zaporozhets
1 parent d0987301

Fix project lookup. Show error if project transfer fails

app/assets/javascripts/main.js.coffee
... ... @@ -7,6 +7,12 @@ window.slugify = (text) ->
7 7 window.ajaxGet = (url) ->
8 8 $.ajax({type: "GET", url: url, dataType: "script"})
9 9  
  10 +window.errorMessage = (message) ->
  11 + ehtml = $("<p>")
  12 + ehtml.addClass("error_message")
  13 + ehtml.html(message)
  14 + ehtml
  15 +
10 16 # Disable button if text field is empty
11 17 window.disableButtonIfEmptyField = (field_selector, button_selector) ->
12 18 field = $(field_selector)
... ...
app/controllers/projects_controller.rb
... ... @@ -46,6 +46,10 @@ class ProjectsController &lt; ProjectResourceController
46 46 format.js
47 47 end
48 48 end
  49 +
  50 + rescue Project::TransferError => ex
  51 + @error = ex
  52 + render :update_failed
49 53 end
50 54  
51 55 def show
... ...
app/models/project.rb
... ... @@ -26,6 +26,8 @@ class Project &lt; ActiveRecord::Base
26 26 include Authority
27 27 include Team
28 28  
  29 + class TransferError < StandardError; end
  30 +
29 31 attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
30 32 :wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
31 33  
... ... @@ -101,7 +103,7 @@ class Project &lt; ActiveRecord::Base
101 103 namespace_id = Namespace.find_by_path(id.first).id
102 104 where(namespace_id: namespace_id).find_by_path(id.last)
103 105 else
104   - find_by_path(id)
  106 + where(path: id, namespace_id: nil).last
105 107 end
106 108 end
107 109  
... ... @@ -270,12 +272,18 @@ class Project &lt; ActiveRecord::Base
270 272 self.path
271 273 end
272 274  
  275 + if Project.where(path: self.path, namespace_id: new_namespace.try(:id)).present?
  276 + raise TransferError.new("Project with same path in target namespace already exists")
  277 + end
  278 +
273 279 Gitlab::ProjectMover.new(self, old_dir, new_dir).execute
274 280  
275 281 git_host.move_repository(old_repo, self)
276 282  
277 283 save!
278 284 end
  285 + rescue Gitlab::ProjectMover::ProjectMoveError => ex
  286 + raise TransferError.new(ex.message)
279 287 end
280 288  
281 289 def name_with_namespace
... ...
app/views/projects/_form.html.haml
... ... @@ -22,7 +22,7 @@
22 22 %span Namespace
23 23 .controls
24 24 - if can? current_user, :change_namespace, @project
25   - = f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}
  25 + = f.select :namespace_id, namespaces_options(@project.namespace_id || Namespace::global_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}
26 26 &nbsp;
27 27 %span.cred Be careful. Changing project namespace can have unintended side effects
28 28 - else
... ...
app/views/projects/update_failed.js.haml 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +:plain
  2 + $(".save-project-loader").replaceWith(errorMessage('#{escape_javascript(@error.message)}'));
... ...