Commit 26622f4c8f96910b0f14e73bdebfb8198c693912

Authored by Dmitriy Zaporozhets
1 parent a4d1bc17

Improve routing. Project access via namespace

app/controllers/application_controller.rb
@@ -63,7 +63,10 @@ class ApplicationController < ActionController::Base @@ -63,7 +63,10 @@ class ApplicationController < ActionController::Base
63 end 63 end
64 64
65 def project 65 def project
66 - @project ||= current_user.projects.find_by_code(params[:project_id] || params[:id]) 66 + id = params[:project_id] || params[:id]
  67 + id = id.split("/") if id.include?("/")
  68 +
  69 + @project ||= current_user.projects.find_by_code(id)
67 @project || render_404 70 @project || render_404
68 end 71 end
69 72
app/models/project.rb
@@ -135,7 +135,11 @@ class Project < ActiveRecord::Base @@ -135,7 +135,11 @@ class Project < ActiveRecord::Base
135 end 135 end
136 136
137 def to_param 137 def to_param
138 - code 138 + if namespace
  139 + namespace.code + "/" + code
  140 + else
  141 + code
  142 + end
139 end 143 end
140 144
141 def web_url 145 def web_url
@@ -201,4 +205,7 @@ class Project < ActiveRecord::Base @@ -201,4 +205,7 @@ class Project < ActiveRecord::Base
201 path 205 path
202 end 206 end
203 end 207 end
  208 +
  209 + def move_repo
  210 + end
204 end 211 end
app/observers/project_observer.rb
1 class ProjectObserver < ActiveRecord::Observer 1 class ProjectObserver < ActiveRecord::Observer
2 - def after_save(project)  
3 - project.update_repository  
4 - 2 + def before_save(project)
5 # Move repository if namespace changed 3 # Move repository if namespace changed
6 if project.namespace_id_changed? 4 if project.namespace_id_changed?
7 move_project(project) 5 move_project(project)
8 end 6 end
9 end 7 end
10 8
  9 + def after_save(project)
  10 + project.update_repository
  11 + end
  12 +
11 def after_destroy(project) 13 def after_destroy(project)
12 log_info("Project \"#{project.name}\" was removed") 14 log_info("Project \"#{project.name}\" was removed")
13 15
@@ -35,7 +37,8 @@ class ProjectObserver &lt; ActiveRecord::Observer @@ -35,7 +37,8 @@ class ProjectObserver &lt; ActiveRecord::Observer
35 old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git") 37 old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git")
36 new_path = File.join(new_dir_path, "#{project.path}.git") 38 new_path = File.join(new_dir_path, "#{project.path}.git")
37 39
38 - binding.pry  
39 `mv #{old_path} #{new_path}` 40 `mv #{old_path} #{new_path}`
  41 +
  42 + log_info "Project #{project.name} was moved from #{old_path} to #{new_path}"
40 end 43 end
41 end 44 end
config/routes.rb
@@ -18,7 +18,7 @@ Gitlab::Application.routes.draw do @@ -18,7 +18,7 @@ Gitlab::Application.routes.draw do
18 project_root: Gitlab.config.git_base_path, 18 project_root: Gitlab.config.git_base_path,
19 upload_pack: Gitlab.config.git_upload_pack, 19 upload_pack: Gitlab.config.git_upload_pack,
20 receive_pack: Gitlab.config.git_receive_pack 20 receive_pack: Gitlab.config.git_receive_pack
21 - }), at: '/:path', constraints: { path: /[\w\.-]+\.git/ } 21 + }), at: '/:path', constraints: { path: /[-\/\w\.-]+\.git/ }
22 22
23 # 23 #
24 # Help 24 # Help
@@ -107,7 +107,7 @@ Gitlab::Application.routes.draw do @@ -107,7 +107,7 @@ Gitlab::Application.routes.draw do
107 # 107 #
108 # Project Area 108 # Project Area
109 # 109 #
110 - resources :projects, constraints: { id: /[^\/]+/ }, except: [:new, :create, :index], path: "/" do 110 + resources :projects, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ }, except: [:new, :create, :index], path: "/" do
111 member do 111 member do
112 get "wall" 112 get "wall"
113 get "graph" 113 get "graph"