diff options
-rw-r--r-- | app/controllers/repositories_controller.rb | 13 | ||||
-rw-r--r-- | test/functional/repositories_controller_test.rb | 30 |
2 files changed, 36 insertions, 7 deletions
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index c79aa7c..04a50e8 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -21,12 +21,12 @@ #++ class RepositoriesController < ApplicationController - before_filter :login_required, :except => [:index, :show, :writable_by] + before_filter :login_required, :except => [:index, :show, :writable_by, :real_path] before_filter :find_repository_owner before_filter :require_adminship, :only => [:edit, :update, :new, :create, :edit, :update, :committers] before_filter :require_user_has_ssh_keys, :only => [:clone, :create_clone] before_filter :only_projects_can_add_new_repositories, :only => [:new, :create] - skip_before_filter :public_and_logged_in, :only => [:writable_by] + skip_before_filter :public_and_logged_in, :only => [:writable_by, :real_path] renders_in_site_specific_context :except => :writable_by def index @@ -173,12 +173,17 @@ class RepositoriesController < ApplicationController @repository = @owner.repositories.find_by_name_in_project!(params[:id], @containing_project) user = User.find_by_login(params[:username]) if user && user.can_write_to?(@repository) - render :text => "true #{@repository.real_gitdir}" + render :text => "true" else - render :text => "false nil" + render :text => "false" end end + def real_path + @repository = @owner.repositories.find_by_name_in_project!(params[:id], @containing_project) + render :text => "#{@repository.real_gitdir}" + end + def confirm_delete @repository = @owner.repositories.find_by_name_in_project!(params[:id], @containing_project) unless @repository.can_be_deleted_by?(current_user) diff --git a/test/functional/repositories_controller_test.rb b/test/functional/repositories_controller_test.rb index 6a01dd7..fa2b2bc 100644 --- a/test/functional/repositories_controller_test.rb +++ b/test/functional/repositories_controller_test.rb @@ -673,20 +673,20 @@ class RepositoriesControllerTest < ActionController::TestCase should "get projects/1/repositories/3/writable_by?username=johan is true" do do_writable_by_get :username => "johan" assert_response :success - assert_equal "true #{@repository.real_gitdir}", @response.body + assert_equal "true", @response.body end should "get projects/1/repositories/2/writable_by?username=johan is false" do do_writable_by_get :username => "johan", :project_id => projects(:moes).slug, :id => projects(:moes).repositories.first.name assert_response :success - assert_equal "false nil", @response.body + assert_equal "false", @response.body end should "get projects/1/repositories/2/writable_by?username=nonexistinguser is false" do do_writable_by_get :username => "nonexistinguser" assert_response :success - assert_equal "false nil", @response.body + assert_equal "false", @response.body end should "finds the repository in the whole project realm, if the (url) root is a project" do @@ -725,6 +725,30 @@ class RepositoriesControllerTest < ActionController::TestCase end end + def do_real_path_get(options={}) + get(:real_path, {:project_id => @project.slug, :id => @repository.name}.merge(options)) + end + + context "#real_path" do + setup do + login_as :johan + @project = projects(:johans) + @repository = @project.repositories.mainlines.first + end + + should " not require login" do + session[:user_id] = nil + do_real_path_get + assert_response :success + end + + should "get projects/1/repositories/3/real_path is true" do + do_real_path_get + assert_response :success + assert_equal @repository.real_gitdir, @response.body + end + end + def do_delete(repos) delete :destroy, :project_id => @project.slug, :id => repos.name end |