Commit 75dd7042940cc6fe7532d42612e1b0db0729a86d

Authored by Dmitriy Zaporozhets
1 parent d188adfd

Send update instructions after project namespace id changed or namespace path changed

app/mailers/notify.rb
@@ -102,6 +102,12 @@ class Notify < ActionMailer::Base @@ -102,6 +102,12 @@ class Notify < ActionMailer::Base
102 end 102 end
103 103
104 104
  105 + def project_was_moved_email(user_project_id)
  106 + @users_project = UsersProject.find user_project_id
  107 + @project = @users_project.project
  108 + mail(to: @users_project.user.email,
  109 + subject: subject("project was moved"))
  110 + end
105 111
106 # 112 #
107 # User 113 # User
app/models/namespace.rb
@@ -59,7 +59,10 @@ class Namespace < ActiveRecord::Base @@ -59,7 +59,10 @@ class Namespace < ActiveRecord::Base
59 if File.exists?(new_path) 59 if File.exists?(new_path)
60 raise "Already exists" 60 raise "Already exists"
61 end 61 end
62 - system("mv #{old_path} #{new_path}") 62 +
  63 + if system("mv #{old_path} #{new_path}")
  64 + send_update_instructions
  65 + end
63 end 66 end
64 end 67 end
65 68
@@ -67,4 +70,8 @@ class Namespace < ActiveRecord::Base @@ -67,4 +70,8 @@ class Namespace < ActiveRecord::Base
67 dir_path = File.join(Gitlab.config.gitolite.repos_path, path) 70 dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
68 system("rm -rf #{dir_path}") 71 system("rm -rf #{dir_path}")
69 end 72 end
  73 +
  74 + def send_update_instructions
  75 + projects.each(&:send_move_instructions)
  76 + end
70 end 77 end
app/models/project.rb
@@ -259,4 +259,10 @@ class Project < ActiveRecord::Base @@ -259,4 +259,10 @@ class Project < ActiveRecord::Base
259 merge_requests 259 merge_requests
260 end 260 end
261 end 261 end
  262 +
  263 + def send_move_instructions
  264 + self.users_projects.each do |member|
  265 + Notify.project_was_moved_email(member.id).deliver
  266 + end
  267 + end
262 end 268 end
app/observers/project_observer.rb
@@ -3,7 +3,8 @@ class ProjectObserver < ActiveRecord::Observer @@ -3,7 +3,8 @@ class ProjectObserver < ActiveRecord::Observer
3 project.update_repository 3 project.update_repository
4 end 4 end
5 5
6 - def after_save(project) 6 + def after_update(project)
  7 + project.send_move_instructions if project.namespace_id_changed?
7 end 8 end
8 9
9 def after_destroy(project) 10 def after_destroy(project)
app/views/notify/project_was_moved_email.html.haml 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +%td.content{align: "left", style: "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", valign: "top", width: "600"}
  2 + %table{border: "0", cellpadding: "0", cellspacing: "0", style: "color: #555; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", width: "600"}
  3 + %tr
  4 + %td{width: "21"}
  5 + %td
  6 + %h3
  7 + = "Project was moved in another location"
  8 + %td{width: "21"}
  9 + %tr
  10 + %td{width: "21"}
  11 + %td
  12 + %p
  13 + Project is now accessible via next link
  14 + = link_to project_url(@project) do
  15 + = @project.name_with_namespace
  16 + %p
  17 + You may want to update your local repository with new remote:
  18 + %br
  19 + %table{border: "0", cellpadding: "0", cellspacing: "0", width: "558"}
  20 + %tr
  21 + %td{valign: "top"}
  22 + %p{ style: "background:#f5f5f5; padding:10px; border:1px solid #ddd" }
  23 + git remote set-url origin #{@project.ssh_url_to_repo}
  24 + %br
  25 + %td{ width: "21"}