summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/repositories_controller.rb13
-rw-r--r--test/functional/repositories_controller_test.rb30
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