Skip to content

Commit

Permalink
Renamed Git/RJGit controllers to 'adapters'. Fixed RJGit Adapter to w…
Browse files Browse the repository at this point in the history
…ork with released RJGit gem and the new RJGit::Config class.
  • Loading branch information
dometto committed Apr 23, 2013
1 parent a26656d commit 20a3eae
Show file tree
Hide file tree
Showing 9 changed files with 76 additions and 68 deletions.
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

7 changes: 7 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ task :default => :test

desc "Run the tests."
task :test do
rename_test_git_dir
Dir.glob("tests/*_test.rb").each do |file|
require "./#{file}"
end
Expand All @@ -22,3 +23,9 @@ end

desc "Start everything."
multitask :start => [ 'grack:start' ]

def rename_test_git_dir
dot_git = File.join(File.dirname(__FILE__), 'tests', 'example')
puts dot_git
cp_r File.join(dot_git, '_git'), File.join(dot_git, 'test_repo', '.git'), :remove_destination => true
end
4 changes: 2 additions & 2 deletions config.ru
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
use Rack::ShowExceptions

require 'git_http'
require 'git_controller'
require 'git_adapter'

config = {
:project_root => "./",
:controller => GitController,
:adapter => GitAdapter,
:git_path => '/usr/bin/git',
:upload_pack => true,
:receive_pack => true,
Expand Down
2 changes: 1 addition & 1 deletion lib/git_controller.rb → lib/git_adapter.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class GitController
class GitAdapter
attr_accessor :git_path

def initialize(path = nil)
Expand Down
4 changes: 2 additions & 2 deletions lib/git_http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ class App

def initialize(config = false)
set_config(config)
@git = config[:controller] ? config[:controller].new : GitController.new
@git.path = config[:git_path] if config[:controller].method_defined?(:path)
@git = config[:adapter] ? config[:adapter].new : GitAdapter.new
@git.path = config[:git_path] if config[:adapter].method_defined?(:path)
end

def set_config(config)
Expand Down
19 changes: 8 additions & 11 deletions lib/rjgit_controller.rb → lib/rjgit_adapter.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
require "~/projects/repotag/gems/rjgit/lib/rjgit.rb"
require "rjgit"

class RJGitController
class RJGitAdapter

def repo(repository_path)
RJGit::Repo.new(repository_path)
Expand Down Expand Up @@ -45,22 +45,19 @@ def update_server_info(repository_path, opts = {}, &block)
def get_config_setting(repository_path, key)
repository = repo(repository_path)
domains = key.split(".")
return nil if domains.length < 2
begin
loop_settings = repository.config
rescue
return nil
end
domains.each do |domain|
return nil unless (loop_settings.is_a?(RJGit::Config::Group) || loop_settings.is_a?(RJGit::Config))
loop_settings = loop_settings[domain]
break if loop_settings == nil
end
if loop_settings == nil then
return nil
else
return loop_settings.value
begin
loop_settings = loop_settings[domain]
rescue
return nil
end
end
return loop_settings.is_a?(Hash) ? loop_settings : loop_settings.to_s
end

end
10 changes: 5 additions & 5 deletions tests/gitcontroller_test.rb → tests/gitadapter_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
require 'test/unit'
require 'mocha/setup'

require './lib/git_controller'
require './lib/git_adapter'


class GitControllerTest < Test::Unit::TestCase
class GitAdapterTest < Test::Unit::TestCase

GIT_STATUS_RESPONSE = "nothing to commit (working directory clean)"

Expand All @@ -14,16 +14,16 @@ def git
end

def example
File.expand_path(File.join(File.dirname(__FILE__),'example'))
File.expand_path(File.join(File.dirname(__FILE__),'example','test_repo'))
end

def setup
@test_git = GitController.new(git)
@test_git = GitAdapter.new(git)
end

def test_init
assert_equal git, @test_git.git_path
@test_git = GitController.new('/tmp/git')
@test_git = GitAdapter.new('/tmp/git')
assert_equal '/tmp/git', @test_git.git_path
end

Expand Down
74 changes: 39 additions & 35 deletions tests/main_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,56 @@
require 'digest/sha1'

require './lib/git_http'
require './lib/git_controller'
require './lib/git_adapter'
require 'pp'

class GitHttpTest < Test::Unit::TestCase
include Rack::Test::Methods

def example
File.expand_path(File.dirname(__FILE__))
File.join(File.expand_path(File.dirname(__FILE__)),'example')
end

def test_repo
File.join(example, 'test_repo')
end

def app
config = {
:project_root => example,
:upload_pack => true,
:receive_pack => true,
:controller => GitController,
:adapter => GitAdapter,
:git_path => 'git'
}
GitHttp::App.new(config)
end

def test_upload_pack_advertisement
get "/example/info/refs?service=git-upload-pack"
get "/test_repo/info/refs?service=git-upload-pack"
assert_equal 200, r.status
assert_equal "application/x-git-upload-pack-advertisement", r.headers["Content-Type"]
assert_equal "001e# service=git-upload-pack", r.body.split("\n").first
assert_match 'multi_ack_detailed', r.body
end

def test_no_access_wrong_content_type_up
post "/example/git-upload-pack"
post "/test_repo/git-upload-pack"
assert_equal 403, r.status
end

def test_no_access_wrong_content_type_rp
post "/example/git-receive-pack"
post "/test_repo/git-receive-pack"
assert_equal 403, r.status
end

def test_no_access_wrong_method_rcp
get "/example/git-upload-pack"
get "/test_repo/git-upload-pack"
assert_equal 400, r.status
end

def test_no_access_wrong_command_rcp
post "/example/git-upload-packfile"
post "/test_repo/git-upload-packfile"
assert_equal 404, r.status
end

Expand All @@ -62,13 +66,13 @@ def test_no_access_wrong_path_rcp

def test_upload_pack_rpc
IO.stubs(:popen).returns(MockProcess.new)
post "/example/git-upload-pack", {}, {"CONTENT_TYPE" => "application/x-git-upload-pack-request"}
post "/test_repo/git-upload-pack", {}, {"CONTENT_TYPE" => "application/x-git-upload-pack-request"}
assert_equal 200, r.status
assert_equal "application/x-git-upload-pack-result", r.headers["Content-Type"]
end

def test_receive_pack_advertisement
get "/example/info/refs?service=git-receive-pack"
get "/test_repo/info/refs?service=git-receive-pack"
assert_equal 200, r.status
assert_equal "application/x-git-receive-pack-advertisement", r.headers["Content-Type"]
assert_equal "001f# service=git-receive-pack", r.body.split("\n").first
Expand All @@ -79,113 +83,113 @@ def test_receive_pack_advertisement

def test_recieve_pack_rpc
IO.stubs(:popen).yields(MockProcess.new)
post "/example/git-receive-pack", {}, {"CONTENT_TYPE" => "application/x-git-receive-pack-request"}
post "/test_repo/git-receive-pack", {}, {"CONTENT_TYPE" => "application/x-git-receive-pack-request"}
assert_equal 200, r.status
assert_equal "application/x-git-receive-pack-result", r.headers["Content-Type"]
end

def test_info_refs_dumb
get "/example/.git/info/refs"
get "/test_repo/.git/info/refs"
assert_equal 200, r.status
end

def test_info_packs
get "/example/.git/objects/info/packs"
get "/test_repo/.git/objects/info/packs"
assert_equal 200, r.status
assert_match /P pack-(.*?).pack/, r.body
end

def test_loose_objects
path, content = write_test_objects
get "/example/.git/objects/#{path}"
get "/test_repo/.git/objects/#{path}"
assert_equal 200, r.status
assert_equal content, r.body
remove_test_objects
end

def test_pack_file
path, content = write_test_objects
get "/example/.git/objects/pack/pack-#{content}.pack"
get "/test_repo/.git/objects/pack/pack-#{content}.pack"
assert_equal 200, r.status
assert_equal content, r.body
remove_test_objects
end

def test_index_file
path, content = write_test_objects
get "/example/.git/objects/pack/pack-#{content}.idx"
get "/test_repo/.git/objects/pack/pack-#{content}.idx"
assert_equal 200, r.status
assert_equal content, r.body
remove_test_objects
end

def test_text_file
get "/example/.git/HEAD"
get "/test_repo/.git/HEAD"
assert_equal 200, r.status
assert_equal 41, r.body.size # submodules have detached head
assert_equal 23, r.body.size
end

def test_no_size_avail
File.stubs('size?').returns(false)
get "/example/.git/HEAD"
get "/test_repo/.git/HEAD"
assert_equal 200, r.status
assert_equal 41, r.body.size # submodules have detached head
assert_equal 23, r.body.size
end

def test_config_upload_pack_off
a1 = app
a1.set_config_setting(:upload_pack, false)
session = Rack::Test::Session.new(a1)
session.get "/example/info/refs?service=git-upload-pack"
session.get "/test_repo/info/refs?service=git-upload-pack"
assert_equal 404, session.last_response.status
end

def test_config_receive_pack_off
a1 = app
a1.set_config_setting(:receive_pack, false)
session = Rack::Test::Session.new(a1)
session.get "/example/info/refs?service=git-receive-pack"
session.get "/test_repo/info/refs?service=git-receive-pack"
assert_equal 404, session.last_response.status
end

def test_config_bad_service
get "/example/info/refs?service=git-receive-packfile"
get "/test_repo/info/refs?service=git-receive-packfile"
assert_equal 404, r.status
end

def test_get_config_setting_receive_pack
app1 = GitHttp::App.new({:project_root => example, :controller=>GitController})
app1 = GitHttp::App.new({:project_root => example, :adapter=>GitAdapter})
session = Rack::Test::Session.new(app1)
abs_path = File.expand_path(File.join(example,'example'))
abs_path = test_repo

app1.git.stubs(:get_config_setting).with(abs_path,'http.receivepack').returns('')
session.get "/example/info/refs?service=git-receive-pack"
session.get "/test_repo/info/refs?service=git-receive-pack"
assert_equal 404, session.last_response.status

app1.git.stubs(:get_config_setting).with(abs_path,'http.receivepack').returns('true')
session.get "/example/info/refs?service=git-receive-pack"
session.get "/test_repo/info/refs?service=git-receive-pack"
assert_equal 200, session.last_response.status

app1.git.stubs(:get_config_setting).with(abs_path,'http.receivepack').returns('false')
session.get "/example/info/refs?service=git-receive-pack"
session.get "/test_repo/info/refs?service=git-receive-pack"
assert_equal 404, session.last_response.status
end

def test_get_config_setting_upload_pack
app1 = GitHttp::App.new({:project_root => example, :controller=>GitController})
app1 = GitHttp::App.new({:project_root => example, :adapter=>GitAdapter})
session = Rack::Test::Session.new(app1)
abs_path = File.expand_path(File.join(example,'example'))
abs_path = test_repo

app1.git.stubs(:get_config_setting).with(abs_path,'http.uploadpack').returns('')
session.get "/example/info/refs?service=git-upload-pack"
session.get "/test_repo/info/refs?service=git-upload-pack"
assert_equal 200, session.last_response.status

app1.git.stubs(:get_config_setting).with(abs_path,'http.uploadpack').returns('true')
session.get "/example/info/refs?service=git-upload-pack"
session.get "/test_repo/info/refs?service=git-upload-pack"
assert_equal 200, session.last_response.status

app1.git.stubs(:get_config_setting).with(abs_path,'http.uploadpack').returns('false')
session.get "/example/info/refs?service=git-upload-pack"
session.get "/test_repo/info/refs?service=git-upload-pack"
assert_equal 404, session.last_response.status
end

Expand All @@ -197,7 +201,7 @@ def r

def write_test_objects
content = Digest::SHA1.hexdigest('gitrocks')
base = File.join(File.expand_path(File.dirname(__FILE__)), 'example', '.git', 'objects')
base = File.join(test_repo, '.git', 'objects')
obj = File.join(base, '20')
Dir.mkdir(obj) rescue nil
file = File.join(obj, content[0, 38])
Expand All @@ -211,7 +215,7 @@ def write_test_objects

def remove_test_objects
content = Digest::SHA1.hexdigest('gitrocks')
base = File.join(File.expand_path(File.dirname(__FILE__)), 'example', '.git', 'objects')
base = File.join(test_repo, '.git', 'objects')
obj = File.join(base, '20')
file = File.join(obj, content[0, 38])
pack = File.join(base, 'pack', "pack-#{content}.pack")
Expand Down
Loading

0 comments on commit 20a3eae

Please sign in to comment.