diff options
Diffstat (limited to 'script/git-daemon')
-rwxr-xr-x | script/git-daemon | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/script/git-daemon b/script/git-daemon index 65966c1..a905e0a 100755 --- a/script/git-daemon +++ b/script/git-daemon @@ -84,34 +84,31 @@ module Git $children_active -= 1 return end + + begin + repository = ::Repository.find_by_path(path) + log(Process.pid, "Connection from #{ip} for #{path.inspect}") + + if repository + if ip_family == "AF_INET6" + repository.cloned_from(ip) + else + geoip = GeoIP.new(File.join(RAILS_ROOT, "data", "GeoIP.dat")) + localization = geoip.country(ip) + repository.cloned_from(ip, localization[3], localization[5]) + end + else + log(Process.pid, "Cannot find repository: #{path}") + end + rescue => e + log(Process.pid, "AR error: #{e.class.name} #{e.message}:\n #{e.backtrace.join("\n ")}") + end + Dir.chdir(path) do cmd = "git-upload-pack --strict --timeout=#{TIMEOUT} ." child_pid = fork do - repository = nil - - begin - repository = ::Repository.find_by_path(path) - rescue => e - log(Process.pid, "AR error: #{e.class.name} #{e.message}:\n #{e.backtrace.join("\n ")}") - end - - pid = Process.pid - log(pid, "Connection from #{ip} for #{path.inspect}") - - if repository - if ip_family == "AF_INET6" - repository.cloned_from(ip) - else - geoip = GeoIP.new(File.join(RAILS_ROOT, "data", "GeoIP.dat")) - localization = geoip.country(ip) - repository.cloned_from(ip, localization[3], localization[5]) - end - else - log(pid, "Cannot find repository: #{path}") - end - log(Process.pid, "Deferred in #{'%0.5f' % (Time.now - start_time)}s") $stdout.reopen(session) |