Commit 26622f4c8f96910b0f14e73bdebfb8198c693912
1 parent
a4d1bc17
Exists in
master
and in
4 other branches
Improve routing. Project access via namespace
Showing
4 changed files
with
21 additions
and
8 deletions
Show diff stats
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 < 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" | ... | ... |