Commit e38e2ce29a2d0ce731bafd5012eae8d21de05d4b
Exists in
master
and in
4 other branches
Merge pull request #3154 from hiroponz/fix-routing-error
Fix routing error
Showing
5 changed files
with
21 additions
and
15 deletions
Show diff stats
config/routes.rb
... | ... | @@ -165,7 +165,7 @@ Gitlab::Application.routes.draw do |
165 | 165 | # |
166 | 166 | # Project Area |
167 | 167 | # |
168 | - resources :projects, constraints: { id: /[a-zA-Z.0-9_\-\/]+/ }, except: [:new, :create, :index], path: "/" do | |
168 | + resources :projects, constraints: { id: /(?:[a-zA-Z.0-9_\-]+\/)?[a-zA-Z.0-9_\-]+/ }, except: [:new, :create, :index], path: "/" do | |
169 | 169 | member do |
170 | 170 | get "wall" |
171 | 171 | get "files" |
... | ... | @@ -174,10 +174,10 @@ Gitlab::Application.routes.draw do |
174 | 174 | resources :blob, only: [:show], constraints: {id: /.+/} |
175 | 175 | resources :tree, only: [:show, :edit, :update], constraints: {id: /.+/} |
176 | 176 | resources :commit, only: [:show], constraints: {id: /[[:alnum:]]{6,40}/} |
177 | - resources :commits, only: [:show], constraints: {id: /.+/} | |
177 | + resources :commits, only: [:show], constraints: {id: /(?:[^.]|\.(?!atom$))+/, format: /atom/} | |
178 | 178 | resources :compare, only: [:index, :create] |
179 | 179 | resources :blame, only: [:show], constraints: {id: /.+/} |
180 | - resources :graph, only: [:show], constraints: {id: /.+/} | |
180 | + resources :graph, only: [:show], constraints: {id: /(?:[^.]|\.(?!json$))+/, format: /json/} | |
181 | 181 | match "/compare/:from...:to" => "compare#show", as: "compare", |
182 | 182 | :via => [:get, :post], constraints: {from: /.+/, to: /.+/} |
183 | 183 | ... | ... |
features/steps/project/project_network_graph.rb
... | ... | @@ -27,6 +27,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps |
27 | 27 | |
28 | 28 | And 'I switch ref to "stable"' do |
29 | 29 | page.select 'stable', :from => 'ref' |
30 | + sleep 2 | |
30 | 31 | end |
31 | 32 | |
32 | 33 | And 'page should select "stable" in select box' do |
... | ... | @@ -44,6 +45,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps |
44 | 45 | fill_in 'q', :with => '98d6492' |
45 | 46 | find('button').click |
46 | 47 | end |
48 | + sleep 2 | |
47 | 49 | end |
48 | 50 | |
49 | 51 | And 'page should have "v2.1.0" on graph' do | ... | ... |
lib/extracts_path.rb
... | ... | @@ -105,12 +105,6 @@ module ExtractsPath |
105 | 105 | # Automatically renders `not_found!` if a valid tree path could not be |
106 | 106 | # resolved (e.g., when a user inserts an invalid path or ref). |
107 | 107 | def assign_ref_vars |
108 | - # Handle formats embedded in the id | |
109 | - if params[:id].ends_with?('.atom') | |
110 | - params[:id].gsub!(/\.atom$/, '') | |
111 | - request.format = :atom | |
112 | - end | |
113 | - | |
114 | 108 | path = CGI::unescape(request.fullpath.dup) |
115 | 109 | |
116 | 110 | @ref, @path = extract_ref(path) | ... | ... |
spec/controllers/commits_controller_spec.rb
... | ... | @@ -13,7 +13,7 @@ describe CommitsController do |
13 | 13 | describe "GET show" do |
14 | 14 | context "as atom feed" do |
15 | 15 | it "should render as atom" do |
16 | - get :show, project_id: project.path, id: "master.atom" | |
16 | + get :show, project_id: project.path, id: "master", format: "atom" | |
17 | 17 | response.should be_success |
18 | 18 | response.content_type.should == 'application/atom+xml' |
19 | 19 | end | ... | ... |
spec/routing/project_routing_spec.rb
... | ... | @@ -56,7 +56,6 @@ end |
56 | 56 | # projects POST /projects(.:format) projects#create |
57 | 57 | # new_project GET /projects/new(.:format) projects#new |
58 | 58 | # wall_project GET /:id/wall(.:format) projects#wall |
59 | -# graph_project GET /:id/graph(.:format) projects#graph | |
60 | 59 | # files_project GET /:id/files(.:format) projects#files |
61 | 60 | # edit_project GET /:id/edit(.:format) projects#edit |
62 | 61 | # project GET /:id(.:format) projects#show |
... | ... | @@ -75,10 +74,6 @@ describe ProjectsController, "routing" do |
75 | 74 | get("/gitlabhq/wall").should route_to('projects#wall', id: 'gitlabhq') |
76 | 75 | end |
77 | 76 | |
78 | - it "to #graph" do | |
79 | - get("/gitlabhq/graph/master").should route_to('graph#show', project_id: 'gitlabhq', id: 'master') | |
80 | - end | |
81 | - | |
82 | 77 | it "to #files" do |
83 | 78 | get("/gitlabhq/files").should route_to('projects#files', id: 'gitlabhq') |
84 | 79 | end |
... | ... | @@ -202,6 +197,7 @@ describe RefsController, "routing" do |
202 | 197 | it "to #logs_tree" do |
203 | 198 | get("/gitlabhq/refs/stable/logs_tree").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable') |
204 | 199 | get("/gitlabhq/refs/stable/logs_tree/foo/bar/baz").should route_to('refs#logs_tree', project_id: 'gitlabhq', id: 'stable', path: 'foo/bar/baz') |
200 | + get("/gitlab/gitlabhq/refs/stable/logs_tree/files.scss").should route_to('refs#logs_tree', project_id: 'gitlab/gitlabhq', id: 'stable', path: 'files.scss') | |
205 | 201 | end |
206 | 202 | end |
207 | 203 | |
... | ... | @@ -301,6 +297,10 @@ describe CommitsController, "routing" do |
301 | 297 | let(:actions) { [:show] } |
302 | 298 | let(:controller) { 'commits' } |
303 | 299 | end |
300 | + | |
301 | + it "to #show" do | |
302 | + get("/gitlab/gitlabhq/commits/master.atom").should route_to('commits#show', project_id: 'gitlab/gitlabhq', id: "master", format: "atom") | |
303 | + end | |
304 | 304 | end |
305 | 305 | |
306 | 306 | # project_team_members GET /:project_id/team_members(.:format) team_members#index |
... | ... | @@ -385,6 +385,7 @@ end |
385 | 385 | describe BlameController, "routing" do |
386 | 386 | it "to #show" do |
387 | 387 | get("/gitlabhq/blame/master/app/models/project.rb").should route_to('blame#show', project_id: 'gitlabhq', id: 'master/app/models/project.rb') |
388 | + get("/gitlab/gitlabhq/blame/master/files.scss").should route_to('blame#show', project_id: 'gitlab/gitlabhq', id: 'master/files.scss') | |
388 | 389 | end |
389 | 390 | end |
390 | 391 | |
... | ... | @@ -393,6 +394,7 @@ describe BlobController, "routing" do |
393 | 394 | it "to #show" do |
394 | 395 | get("/gitlabhq/blob/master/app/models/project.rb").should route_to('blob#show', project_id: 'gitlabhq', id: 'master/app/models/project.rb') |
395 | 396 | get("/gitlabhq/blob/master/app/models/compare.rb").should route_to('blob#show', project_id: 'gitlabhq', id: 'master/app/models/compare.rb') |
397 | + get("/gitlab/gitlabhq/blob/master/files.scss").should route_to('blob#show', project_id: 'gitlab/gitlabhq', id: 'master/files.scss') | |
396 | 398 | end |
397 | 399 | end |
398 | 400 | |
... | ... | @@ -400,6 +402,7 @@ end |
400 | 402 | describe TreeController, "routing" do |
401 | 403 | it "to #show" do |
402 | 404 | get("/gitlabhq/tree/master/app/models/project.rb").should route_to('tree#show', project_id: 'gitlabhq', id: 'master/app/models/project.rb') |
405 | + get("/gitlab/gitlabhq/tree/master/files.scss").should route_to('tree#show', project_id: 'gitlab/gitlabhq', id: 'master/files.scss') | |
403 | 406 | end |
404 | 407 | end |
405 | 408 | |
... | ... | @@ -420,3 +423,10 @@ describe CompareController, "routing" do |
420 | 423 | get("/gitlabhq/compare/issue/1234...stable").should route_to('compare#show', project_id: 'gitlabhq', from: 'issue/1234', to: 'stable') |
421 | 424 | end |
422 | 425 | end |
426 | + | |
427 | +describe GraphController, "routing" do | |
428 | + it "to #show" do | |
429 | + get("/gitlabhq/graph/master").should route_to('graph#show', project_id: 'gitlabhq', id: 'master') | |
430 | + get("/gitlabhq/graph/master.json").should route_to('graph#show', project_id: 'gitlabhq', id: 'master', format: "json") | |
431 | + end | |
432 | +end | ... | ... |