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 63 end
64 64  
65 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 70 @project || render_404
68 71 end
69 72  
... ...
app/models/project.rb
... ... @@ -135,7 +135,11 @@ class Project < ActiveRecord::Base
135 135 end
136 136  
137 137 def to_param
138   - code
  138 + if namespace
  139 + namespace.code + "/" + code
  140 + else
  141 + code
  142 + end
139 143 end
140 144  
141 145 def web_url
... ... @@ -201,4 +205,7 @@ class Project < ActiveRecord::Base
201 205 path
202 206 end
203 207 end
  208 +
  209 + def move_repo
  210 + end
204 211 end
... ...
app/observers/project_observer.rb
1 1 class ProjectObserver < ActiveRecord::Observer
2   - def after_save(project)
3   - project.update_repository
4   -
  2 + def before_save(project)
5 3 # Move repository if namespace changed
6 4 if project.namespace_id_changed?
7 5 move_project(project)
8 6 end
9 7 end
10 8  
  9 + def after_save(project)
  10 + project.update_repository
  11 + end
  12 +
11 13 def after_destroy(project)
12 14 log_info("Project \"#{project.name}\" was removed")
13 15  
... ... @@ -35,7 +37,8 @@ class ProjectObserver &lt; ActiveRecord::Observer
35 37 old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git")
36 38 new_path = File.join(new_dir_path, "#{project.path}.git")
37 39  
38   - binding.pry
39 40 `mv #{old_path} #{new_path}`
  41 +
  42 + log_info "Project #{project.name} was moved from #{old_path} to #{new_path}"
40 43 end
41 44 end
... ...
config/routes.rb
... ... @@ -18,7 +18,7 @@ Gitlab::Application.routes.draw do
18 18 project_root: Gitlab.config.git_base_path,
19 19 upload_pack: Gitlab.config.git_upload_pack,
20 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 24 # Help
... ... @@ -107,7 +107,7 @@ Gitlab::Application.routes.draw do
107 107 #
108 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 111 member do
112 112 get "wall"
113 113 get "graph"
... ...