route: scm: fix git and mercurial changes action

If branch name has special character, "View revisions" link has route error.
For example, Redmine Mercurial hgsubversion mirror has "../sandbox/rails-3.2" named branch.

Git default branch of bare repository is defined at HEAD.
In most cases, it is *master*.
Mercurial GUI standard behavior is showing all revisions on top page.
So, Redmine default branch is *nil*.
Mercurial top page "View revisions" link has route error.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9617 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Toshi MARUYAMA 2012-05-03 14:49:29 +00:00
parent 2c28d6b5d1
commit b4350ca91a
2 changed files with 52 additions and 20 deletions

View File

@ -214,6 +214,9 @@ RedmineApp::Application.routes.draw do
get 'projects/:id/repository/:repository_id/statistics', :to => 'repositories#stats' get 'projects/:id/repository/:repository_id/statistics', :to => 'repositories#stats'
get 'projects/:id/repository/:repository_id/graph', :to => 'repositories#graph' get 'projects/:id/repository/:repository_id/graph', :to => 'repositories#graph'
get 'projects/:id/repository/:repository_id/changes(/*path(.:ext))',
:to => 'repositories#changes'
get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision' get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision'
get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision' get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision'
post 'projects/:id/repository/:repository_id/revisions/:rev/issues', :to => 'repositories#add_related_issue' post 'projects/:id/repository/:repository_id/revisions/:rev/issues', :to => 'repositories#add_related_issue'
@ -228,13 +231,16 @@ RedmineApp::Application.routes.draw do
get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path(.:ext))', get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path(.:ext))',
:controller => 'repositories', :controller => 'repositories',
:constraints => { :constraints => {
:action => /(browse|show|entry|changes|annotate|diff)/, :action => /(browse|show|entry|annotate|diff)/,
:rev => /[a-z0-9\.\-_]+/ :rev => /[a-z0-9\.\-_]+/
} }
get 'projects/:id/repository/statistics', :to => 'repositories#stats' get 'projects/:id/repository/statistics', :to => 'repositories#stats'
get 'projects/:id/repository/graph', :to => 'repositories#graph' get 'projects/:id/repository/graph', :to => 'repositories#graph'
get 'projects/:id/repository/changes(/*path(.:ext))',
:to => 'repositories#changes'
get 'projects/:id/repository/revisions', :to => 'repositories#revisions' get 'projects/:id/repository/revisions', :to => 'repositories#revisions'
get 'projects/:id/repository/revisions/:rev', :to => 'repositories#revision' get 'projects/:id/repository/revisions/:rev', :to => 'repositories#revision'
get 'projects/:id/repository/revision', :to => 'repositories#revision' get 'projects/:id/repository/revision', :to => 'repositories#revision'
@ -249,7 +255,7 @@ RedmineApp::Application.routes.draw do
get 'projects/:id/repository/revisions/:rev/:action(/*path(.:ext))', get 'projects/:id/repository/revisions/:rev/:action(/*path(.:ext))',
:controller => 'repositories', :controller => 'repositories',
:constraints => { :constraints => {
:action => /(browse|show|entry|changes|annotate|diff)/, :action => /(browse|show|entry|annotate|diff)/,
:rev => /[a-z0-9\.\-_]+/ :rev => /[a-z0-9\.\-_]+/
} }
get 'projects/:id/repository/:repository_id/:format(/*path(.:ext))', :to => 'repositories#entry', :format => /raw/ get 'projects/:id/repository/:repository_id/:format(/*path(.:ext))', :to => 'repositories#entry', :format => /raw/

View File

@ -134,16 +134,29 @@ class RoutingRepositoriesTest < ActionController::IntegrationTest
) )
assert_routing( assert_routing(
{ :method => 'get', { :method => 'get',
:path => "/projects/redmine/repository/revisions/2457/changes" }, :path => "/projects/redmine/repository/changes" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine', { :controller => 'repositories', :action => 'changes', :id => 'redmine' }
:rev => '2457' }
)
assert_routing(
{ :method => 'get',
:path => "/projects/redmine/repository/revisions/2457/changes/#{@path_hash[:path]}" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine',
:path => @path_hash[:param] , :rev => '2457'}
) )
['2457', 'master', 'slash/slash'].each do |rev|
assert_routing(
{ :method => 'get',
:path => "/projects/redmine/repository/changes" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine',
:rev => rev },
{},
{ :rev => rev }
)
end
['2457', 'master', 'slash/slash'].each do |rev|
assert_routing(
{ :method => 'get',
:path => "/projects/redmine/repository/changes/#{@path_hash[:path]}" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine',
:path => @path_hash[:param], :rev => rev },
{},
{ :rev => rev }
)
end
assert_routing( assert_routing(
{ :method => 'get', { :method => 'get',
:path => "/projects/redmine/repository/revisions/2457/diff" }, :path => "/projects/redmine/repository/revisions/2457/diff" },
@ -215,16 +228,29 @@ class RoutingRepositoriesTest < ActionController::IntegrationTest
) )
assert_routing( assert_routing(
{ :method => 'get', { :method => 'get',
:path => "/projects/redmine/repository/foo/revisions/2457/changes" }, :path => "/projects/redmine/repository/foo/changes" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine', :repository_id => 'foo', { :controller => 'repositories', :action => 'changes', :id => 'redmine', :repository_id => 'foo' }
:rev => '2457' }
)
assert_routing(
{ :method => 'get',
:path => "/projects/redmine/repository/foo/revisions/2457/changes/#{@path_hash[:path]}" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine', :repository_id => 'foo',
:path => @path_hash[:param] , :rev => '2457'}
) )
['2457', 'master', 'slash/slash'].each do |rev|
assert_routing(
{ :method => 'get',
:path => "/projects/redmine/repository/foo/changes" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine',
:repository_id => 'foo', :rev => rev },
{},
{ :rev => rev }
)
end
['2457', 'master', 'slash/slash'].each do |rev|
assert_routing(
{ :method => 'get',
:path => "/projects/redmine/repository/foo/changes/#{@path_hash[:path]}" },
{ :controller => 'repositories', :action => 'changes', :id => 'redmine',
:repository_id => 'foo', :path => @path_hash[:param], :rev => rev },
{},
{ :rev => rev }
)
end
assert_routing( assert_routing(
{ :method => 'get', { :method => 'get',
:path => "/projects/redmine/repository/foo/revisions/2457/diff" }, :path => "/projects/redmine/repository/foo/revisions/2457/diff" },