Commit 3272620f724737f4dbb5e8c02f1610946435cd29

Authored by randx
1 parent 8ceb9408

lib/ refactoring. Module Gitlabhq renamed to Gitlab

app/controllers/application_controller.rb
@@ -5,7 +5,7 @@ class ApplicationController < ActionController::Base @@ -5,7 +5,7 @@ class ApplicationController < ActionController::Base
5 protect_from_forgery 5 protect_from_forgery
6 helper_method :abilities, :can? 6 helper_method :abilities, :can?
7 7
8 - rescue_from Gitlabhq::Gitolite::AccessDenied do |exception| 8 + rescue_from Gitlab::Gitolite::AccessDenied do |exception|
9 render "errors/gitolite", :layout => "error" 9 render "errors/gitolite", :layout => "error"
10 end 10 end
11 11
app/controllers/projects_controller.rb
@@ -45,7 +45,7 @@ class ProjectsController < ApplicationController @@ -45,7 +45,7 @@ class ProjectsController < ApplicationController
45 format.js 45 format.js
46 end 46 end
47 end 47 end
48 - rescue Gitlabhq::Gitolite::AccessDenied 48 + rescue Gitlab::Gitolite::AccessDenied
49 render :js => "location.href = '#{errors_githost_path}'" and return 49 render :js => "location.href = '#{errors_githost_path}'" and return
50 rescue StandardError => ex 50 rescue StandardError => ex
51 @project.errors.add(:base, "Cant save project. Please try again later") 51 @project.errors.add(:base, "Cant save project. Please try again later")
app/helpers/application_helper.rb
@@ -143,6 +143,6 @@ module ApplicationHelper @@ -143,6 +143,6 @@ module ApplicationHelper
143 end 143 end
144 144
145 def string_to_utf8 str 145 def string_to_utf8 str
146 - Gitlabhq::Encode.utf8 str 146 + Gitlab::Encode.utf8 str
147 end 147 end
148 end 148 end
app/models/commit.rb
1 class Commit 1 class Commit
2 include ActiveModel::Conversion 2 include ActiveModel::Conversion
3 - include Gitlabhq::Encode 3 + include Gitlab::Encode
4 extend ActiveModel::Naming 4 extend ActiveModel::Naming
5 5
6 attr_accessor :commit 6 attr_accessor :commit
app/models/key.rb
@@ -38,14 +38,14 @@ class Key < ActiveRecord::Base @@ -38,14 +38,14 @@ class Key < ActiveRecord::Base
38 end 38 end
39 39
40 def update_repository 40 def update_repository
41 - Gitlabhq::GitHost.system.new.configure do |c| 41 + Gitlab::GitHost.system.new.configure do |c|
42 c.update_keys(identifier, key) 42 c.update_keys(identifier, key)
43 c.update_projects(projects) 43 c.update_projects(projects)
44 end 44 end
45 end 45 end
46 46
47 def repository_delete_key 47 def repository_delete_key
48 - Gitlabhq::GitHost.system.new.configure do |c| 48 + Gitlab::GitHost.system.new.configure do |c|
49 #delete key file is there is no identically deploy keys 49 #delete key file is there is no identically deploy keys
50 if !is_deploy_key || Key.where(:identifier => identifier).count() == 0 50 if !is_deploy_key || Key.where(:identifier => identifier).count() == 0
51 c.delete_key(identifier) 51 c.delete_key(identifier)
app/models/merge_request.rb
@@ -82,7 +82,7 @@ class MergeRequest < ActiveRecord::Base @@ -82,7 +82,7 @@ class MergeRequest < ActiveRecord::Base
82 end 82 end
83 83
84 def check_if_can_be_merged 84 def check_if_can_be_merged
85 - self.state = if GitlabMerge.new(self, self.author).can_be_merged? 85 + self.state = if Gitlab::Merge.new(self, self.author).can_be_merged?
86 CAN_BE_MERGED 86 CAN_BE_MERGED
87 else 87 else
88 CANNOT_BE_MERGED 88 CANNOT_BE_MERGED
@@ -184,7 +184,7 @@ class MergeRequest < ActiveRecord::Base @@ -184,7 +184,7 @@ class MergeRequest < ActiveRecord::Base
184 end 184 end
185 185
186 def automerge!(current_user) 186 def automerge!(current_user)
187 - if GitlabMerge.new(self, current_user).merge 187 + if Gitlab::Merge.new(self, current_user).merge
188 self.merge!(current_user.id) 188 self.merge!(current_user.id)
189 true 189 true
190 end 190 end
app/models/project/repository_trait.rb
@@ -38,7 +38,7 @@ module Project::RepositoryTrait @@ -38,7 +38,7 @@ module Project::RepositoryTrait
38 end 38 end
39 39
40 def satellite 40 def satellite
41 - @satellite ||= Gitlabhq::Satellite.new(self) 41 + @satellite ||= Gitlab::Satellite.new(self)
42 end 42 end
43 43
44 def write_hook(name, content) 44 def write_hook(name, content)
@@ -65,7 +65,7 @@ module Project::RepositoryTrait @@ -65,7 +65,7 @@ module Project::RepositoryTrait
65 end 65 end
66 66
67 def url_to_repo 67 def url_to_repo
68 - Gitlabhq::GitHost.url_to_repo(path) 68 + Gitlab::GitHost.url_to_repo(path)
69 end 69 end
70 70
71 def path_to_repo 71 def path_to_repo
@@ -73,13 +73,13 @@ module Project::RepositoryTrait @@ -73,13 +73,13 @@ module Project::RepositoryTrait
73 end 73 end
74 74
75 def update_repository 75 def update_repository
76 - Gitlabhq::GitHost.system.update_project(path, self) 76 + Gitlab::GitHost.system.update_project(path, self)
77 77
78 write_hooks if File.exists?(path_to_repo) 78 write_hooks if File.exists?(path_to_repo)
79 end 79 end
80 80
81 def destroy_repository 81 def destroy_repository
82 - Gitlabhq::GitHost.system.destroy_project(self) 82 + Gitlab::GitHost.system.destroy_project(self)
83 end 83 end
84 84
85 def repo_exists? 85 def repo_exists?
app/models/protected_branch.rb
@@ -7,7 +7,7 @@ class ProtectedBranch < ActiveRecord::Base @@ -7,7 +7,7 @@ class ProtectedBranch < ActiveRecord::Base
7 after_destroy :update_repository 7 after_destroy :update_repository
8 8
9 def update_repository 9 def update_repository
10 - Gitlabhq::GitHost.system.update_project(project.path, project) 10 + Gitlab::GitHost.system.update_project(project.path, project)
11 end 11 end
12 12
13 def commit 13 def commit
app/models/users_project.rb
@@ -58,7 +58,7 @@ class UsersProject < ActiveRecord::Base @@ -58,7 +58,7 @@ class UsersProject < ActiveRecord::Base
58 end 58 end
59 59
60 def update_repository 60 def update_repository
61 - Gitlabhq::GitHost.system.new.configure do |c| 61 + Gitlab::GitHost.system.new.configure do |c|
62 c.update_project(project.path, project) 62 c.update_project(project.path, project)
63 end 63 end
64 end 64 end
config/environment.rb
@@ -4,4 +4,4 @@ require File.expand_path('../application', __FILE__) @@ -4,4 +4,4 @@ require File.expand_path('../application', __FILE__)
4 # Initialize the rails application 4 # Initialize the rails application
5 Gitlab::Application.initialize! 5 Gitlab::Application.initialize!
6 6
7 -require File.join(Rails.root, "lib", "gitlabhq", "git_host") 7 +require File.join(Rails.root, "lib", "gitlab", "git_host")
config/initializers/gitlabhq/20_grit_ext.rb
@@ -15,11 +15,11 @@ end @@ -15,11 +15,11 @@ end
15 15
16 Grit::Diff.class_eval do 16 Grit::Diff.class_eval do
17 def old_path 17 def old_path
18 - Gitlabhq::Encode.utf8 a_path 18 + Gitlab::Encode.utf8 a_path
19 end 19 end
20 20
21 def new_path 21 def new_path
22 - Gitlabhq::Encode.utf8 b_path 22 + Gitlab::Encode.utf8 b_path
23 end 23 end
24 end 24 end
25 25
lib/gitlab/encode.rb 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +module Gitlab
  2 + module Encode
  3 + extend self
  4 +
  5 + def utf8 message
  6 + return nil unless message
  7 +
  8 + hash = CharlockHolmes::EncodingDetector.detect(message) rescue {}
  9 + if hash[:encoding]
  10 + CharlockHolmes::Converter.convert(message, hash[:encoding], 'UTF-8')
  11 + else
  12 + message
  13 + end.force_encoding("utf-8")
  14 + # Prevent app from crash cause of
  15 + # encoding errors
  16 + rescue
  17 + ""
  18 + end
  19 + end
  20 +end
lib/gitlab/git_host.rb 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +require File.join(Rails.root, "lib", "gitlab", "gitolite")
  2 +
  3 +module Gitlab
  4 + class GitHost
  5 + def self.system
  6 + Gitlab::Gitolite
  7 + end
  8 +
  9 + def self.admin_uri
  10 + GIT_HOST["admin_uri"]
  11 + end
  12 +
  13 + def self.url_to_repo(path)
  14 + if !GIT_HOST["port"] or GIT_HOST["port"] == 22
  15 + "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{path}.git"
  16 + else
  17 + "ssh://#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{GIT_HOST["port"]}/#{path}.git"
  18 + end
  19 + end
  20 + end
  21 +end
lib/gitlab/gitolite.rb 0 → 100644
@@ -0,0 +1,157 @@ @@ -0,0 +1,157 @@
  1 +require 'gitolite'
  2 +require 'timeout'
  3 +require 'fileutils'
  4 +
  5 +module Gitlab
  6 + class Gitolite
  7 + class AccessDenied < StandardError; end
  8 +
  9 + def self.update_project(path, project)
  10 + self.new.configure { |git| git.update_project(path, project) }
  11 + end
  12 +
  13 + def self.destroy_project(project)
  14 + self.new.configure { |git| git.destroy_project(project) }
  15 + end
  16 +
  17 + def pull
  18 + # create tmp dir
  19 + @local_dir = File.join(Dir.tmpdir,"gitlabhq-gitolite-#{Time.now.to_i}")
  20 + Dir.mkdir @local_dir
  21 +
  22 + `git clone #{GitHost.admin_uri} #{@local_dir}/gitolite`
  23 + end
  24 +
  25 + def push
  26 + Dir.chdir(File.join(@local_dir, "gitolite"))
  27 + `git add -A`
  28 + `git commit -am "Gitlab"`
  29 + `git push`
  30 + Dir.chdir(Rails.root)
  31 +
  32 + FileUtils.rm_rf(@local_dir)
  33 + end
  34 +
  35 + def configure
  36 + status = Timeout::timeout(20) do
  37 + File.open(File.join(Dir.tmpdir,"gitlabhq-gitolite.lock"), "w+") do |f|
  38 + begin
  39 + f.flock(File::LOCK_EX)
  40 + pull
  41 + yield(self)
  42 + push
  43 + ensure
  44 + f.flock(File::LOCK_UN)
  45 + end
  46 + end
  47 + end
  48 + rescue Exception => ex
  49 + Gitlab::Logger.error(ex.message)
  50 + raise Gitolite::AccessDenied.new("gitolite timeout")
  51 + end
  52 +
  53 + def destroy_project(project)
  54 + FileUtils.rm_rf(project.path_to_repo)
  55 +
  56 + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))
  57 + conf = ga_repo.config
  58 + conf.rm_repo(project.path)
  59 + ga_repo.save
  60 + end
  61 +
  62 + #update or create
  63 + def update_keys(user, key)
  64 + File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) }
  65 + end
  66 +
  67 + def delete_key(user)
  68 + File.unlink(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"))
  69 + `cd #{File.join(@local_dir,'gitolite')} ; git rm keydir/#{user}.pub`
  70 + end
  71 +
  72 + # update or create
  73 + def update_project(repo_name, project)
  74 + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))
  75 + conf = ga_repo.config
  76 + repo = update_project_config(project, conf)
  77 + conf.add_repo(repo, true)
  78 +
  79 + ga_repo.save
  80 + end
  81 +
  82 + # Updates many projects and uses project.path as the repo path
  83 + # An order of magnitude faster than update_project
  84 + def update_projects(projects)
  85 + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))
  86 + conf = ga_repo.config
  87 +
  88 + projects.each do |project|
  89 + repo = update_project_config(project, conf)
  90 + conf.add_repo(repo, true)
  91 + end
  92 +
  93 + ga_repo.save
  94 + end
  95 +
  96 + def update_project_config(project, conf)
  97 + repo_name = project.path
  98 +
  99 + repo = if conf.has_repo?(repo_name)
  100 + conf.get_repo(repo_name)
  101 + else
  102 + ::Gitolite::Config::Repo.new(repo_name)
  103 + end
  104 +
  105 + name_readers = project.repository_readers
  106 + name_writers = project.repository_writers
  107 + name_masters = project.repository_masters
  108 +
  109 + pr_br = project.protected_branches.map(&:name).join(" ")
  110 +
  111 + repo.clean_permissions
  112 +
  113 + # Deny access to protected branches for writers
  114 + unless name_writers.blank? || pr_br.blank?
  115 + repo.add_permission("-", pr_br, name_writers)
  116 + end
  117 +
  118 + # Add read permissions
  119 + repo.add_permission("R", "", name_readers) unless name_readers.blank?
  120 +
  121 + # Add write permissions
  122 + repo.add_permission("RW+", "", name_writers) unless name_writers.blank?
  123 + repo.add_permission("RW+", "", name_masters) unless name_masters.blank?
  124 +
  125 + repo
  126 + end
  127 +
  128 + def admin_all_repo
  129 + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))
  130 + conf = ga_repo.config
  131 + owner_name = ""
  132 +
  133 + # Read gitolite-admin user
  134 + #
  135 + begin
  136 + repo = conf.get_repo("gitolite-admin")
  137 + owner_name = repo.permissions[0]["RW+"][""][0]
  138 + raise StandardError if owner_name.blank?
  139 + rescue => ex
  140 + puts "Cant determine gitolite-admin owner".red
  141 + raise StandardError
  142 + end
  143 +
  144 + # @ALL repos premission for gitolite owner
  145 + repo_name = "@all"
  146 + repo = if conf.has_repo?(repo_name)
  147 + conf.get_repo(repo_name)
  148 + else
  149 + ::Gitolite::Config::Repo.new(repo_name)
  150 + end
  151 +
  152 + repo.add_permission("RW+", "", owner_name)
  153 + conf.add_repo(repo, true)
  154 + ga_repo.save
  155 + end
  156 + end
  157 +end
lib/gitlab/logger.rb 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +module Gitlab
  2 + class Logger
  3 + def self.error(message)
  4 + @@logger ||= ::Logger.new(File.join(Rails.root, "log/githost.log"))
  5 + @@logger.error(message)
  6 + end
  7 + end
  8 +end
lib/gitlab/merge.rb 0 → 100644
@@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
  1 +module Gitlab
  2 + class Merge
  3 + attr_accessor :project, :merge_request, :user
  4 +
  5 + def initialize(merge_request, user)
  6 + self.user = user
  7 + self.merge_request = merge_request
  8 + self.project = merge_request.project
  9 + end
  10 +
  11 + def can_be_merged?
  12 + result = false
  13 + process do |repo, output|
  14 + result = !(output =~ /CONFLICT/)
  15 + end
  16 + result
  17 + end
  18 +
  19 + def merge
  20 + process do |repo, output|
  21 + if output =~ /CONFLICT/
  22 + false
  23 + else
  24 + repo.git.push({}, "origin", merge_request.target_branch)
  25 + true
  26 + end
  27 + end
  28 + end
  29 +
  30 + def process
  31 + Grit::Git.with_timeout(30.seconds) do
  32 + lock_file = File.join(Rails.root, "tmp", "merge_repo_#{project.path}.lock")
  33 +
  34 + File.open(lock_file, "w+") do |f|
  35 + f.flock(File::LOCK_EX)
  36 +
  37 + unless project.satellite.exists?
  38 + raise "You should run: rake gitlab:app:enable_automerge"
  39 + end
  40 +
  41 + project.satellite.clear
  42 +
  43 + Dir.chdir(project.satellite.path) do
  44 + merge_repo = Grit::Repo.new('.')
  45 + merge_repo.git.sh "git reset --hard"
  46 + merge_repo.git.sh "git fetch origin"
  47 + merge_repo.git.sh "git config user.name \"#{user.name}\""
  48 + merge_repo.git.sh "git config user.email \"#{user.email}\""
  49 + merge_repo.git.sh "git checkout -b #{merge_request.target_branch} origin/#{merge_request.target_branch}"
  50 + output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch)
  51 + yield(merge_repo, output)
  52 + end
  53 + end
  54 + end
  55 +
  56 + rescue Grit::Git::GitTimeout
  57 + return false
  58 + end
  59 + end
  60 +end
lib/gitlab/satellite.rb 0 → 100644
@@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
  1 +module Gitlab
  2 + class Satellite
  3 +
  4 + PARKING_BRANCH = "__parking_branch"
  5 +
  6 + attr_accessor :project
  7 +
  8 + def initialize project
  9 + self.project = project
  10 + end
  11 +
  12 + def create
  13 + `git clone #{project.url_to_repo} #{path}`
  14 + end
  15 +
  16 + def path
  17 + File.join(Rails.root, "tmp", "repo_satellites", project.path)
  18 + end
  19 +
  20 + def exists?
  21 + File.exists? path
  22 + end
  23 +
  24 + #will be deleted all branches except PARKING_BRANCH
  25 + def clear
  26 + Dir.chdir(path) do
  27 + heads = Grit::Repo.new(".").heads.map{|head| head.name}
  28 + if heads.include? PARKING_BRANCH
  29 + `git checkout #{PARKING_BRANCH}`
  30 + else
  31 + `git checkout -b #{PARKING_BRANCH}`
  32 + end
  33 + heads.delete(PARKING_BRANCH)
  34 + heads.each do |head|
  35 + `git branch -D #{head}`
  36 + end
  37 + end
  38 + end
  39 +
  40 + end
  41 +end
lib/gitlab_merge.rb
@@ -1,58 +0,0 @@ @@ -1,58 +0,0 @@
1 -class GitlabMerge  
2 - attr_accessor :project, :merge_request, :user  
3 -  
4 - def initialize(merge_request, user)  
5 - self.user = user  
6 - self.merge_request = merge_request  
7 - self.project = merge_request.project  
8 - end  
9 -  
10 - def can_be_merged?  
11 - result = false  
12 - process do |repo, output|  
13 - result = !(output =~ /CONFLICT/)  
14 - end  
15 - result  
16 - end  
17 -  
18 - def merge  
19 - process do |repo, output|  
20 - if output =~ /CONFLICT/  
21 - false  
22 - else  
23 - repo.git.push({}, "origin", merge_request.target_branch)  
24 - true  
25 - end  
26 - end  
27 - end  
28 -  
29 - def process  
30 - Grit::Git.with_timeout(30.seconds) do  
31 - lock_file = File.join(Rails.root, "tmp", "merge_repo_#{project.path}.lock")  
32 -  
33 - File.open(lock_file, "w+") do |f|  
34 - f.flock(File::LOCK_EX)  
35 -  
36 - unless project.satellite.exists?  
37 - raise "You should run: rake gitlab:app:enable_automerge"  
38 - end  
39 -  
40 - project.satellite.clear  
41 -  
42 - Dir.chdir(project.satellite.path) do  
43 - merge_repo = Grit::Repo.new('.')  
44 - merge_repo.git.sh "git reset --hard"  
45 - merge_repo.git.sh "git fetch origin"  
46 - merge_repo.git.sh "git config user.name \"#{user.name}\""  
47 - merge_repo.git.sh "git config user.email \"#{user.email}\""  
48 - merge_repo.git.sh "git checkout -b #{merge_request.target_branch} origin/#{merge_request.target_branch}"  
49 - output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch)  
50 - yield(merge_repo, output)  
51 - end  
52 - end  
53 - end  
54 -  
55 - rescue Grit::Git::GitTimeout  
56 - return false  
57 - end  
58 -end  
lib/gitlabhq/encode.rb
@@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
1 -module Gitlabhq  
2 - module Encode  
3 - extend self  
4 -  
5 - def utf8 message  
6 - return nil unless message  
7 -  
8 - hash = CharlockHolmes::EncodingDetector.detect(message) rescue {}  
9 - if hash[:encoding]  
10 - CharlockHolmes::Converter.convert(message, hash[:encoding], 'UTF-8')  
11 - else  
12 - message  
13 - end.force_encoding("utf-8")  
14 - # Prevent app from crash cause of  
15 - # encoding errors  
16 - rescue  
17 - ""  
18 - end  
19 - end  
20 -end  
lib/gitlabhq/git_host.rb
@@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
1 -require File.join(Rails.root, "lib", "gitlabhq", "gitolite")  
2 -  
3 -module Gitlabhq  
4 - class GitHost  
5 - def self.system  
6 - Gitlabhq::Gitolite  
7 - end  
8 -  
9 - def self.admin_uri  
10 - GIT_HOST["admin_uri"]  
11 - end  
12 -  
13 - def self.url_to_repo(path)  
14 - if !GIT_HOST["port"] or GIT_HOST["port"] == 22  
15 - "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{path}.git"  
16 - else  
17 - "ssh://#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{GIT_HOST["port"]}/#{path}.git"  
18 - end  
19 - end  
20 - end  
21 -end  
lib/gitlabhq/gitolite.rb
@@ -1,157 +0,0 @@ @@ -1,157 +0,0 @@
1 -require 'gitolite'  
2 -require 'timeout'  
3 -require 'fileutils'  
4 -  
5 -module Gitlabhq  
6 - class Gitolite  
7 - class AccessDenied < StandardError; end  
8 -  
9 - def self.update_project(path, project)  
10 - self.new.configure { |git| git.update_project(path, project) }  
11 - end  
12 -  
13 - def self.destroy_project(project)  
14 - self.new.configure { |git| git.destroy_project(project) }  
15 - end  
16 -  
17 - def pull  
18 - # create tmp dir  
19 - @local_dir = File.join(Dir.tmpdir,"gitlabhq-gitolite-#{Time.now.to_i}")  
20 - Dir.mkdir @local_dir  
21 -  
22 - `git clone #{GitHost.admin_uri} #{@local_dir}/gitolite`  
23 - end  
24 -  
25 - def push  
26 - Dir.chdir(File.join(@local_dir, "gitolite"))  
27 - `git add -A`  
28 - `git commit -am "Gitlab"`  
29 - `git push`  
30 - Dir.chdir(Rails.root)  
31 -  
32 - FileUtils.rm_rf(@local_dir)  
33 - end  
34 -  
35 - def configure  
36 - status = Timeout::timeout(20) do  
37 - File.open(File.join(Dir.tmpdir,"gitlabhq-gitolite.lock"), "w+") do |f|  
38 - begin  
39 - f.flock(File::LOCK_EX)  
40 - pull  
41 - yield(self)  
42 - push  
43 - ensure  
44 - f.flock(File::LOCK_UN)  
45 - end  
46 - end  
47 - end  
48 - rescue Exception => ex  
49 - Gitlabhq::Logger.error(ex.message)  
50 - raise Gitolite::AccessDenied.new("gitolite timeout")  
51 - end  
52 -  
53 - def destroy_project(project)  
54 - FileUtils.rm_rf(project.path_to_repo)  
55 -  
56 - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))  
57 - conf = ga_repo.config  
58 - conf.rm_repo(project.path)  
59 - ga_repo.save  
60 - end  
61 -  
62 - #update or create  
63 - def update_keys(user, key)  
64 - File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) }  
65 - end  
66 -  
67 - def delete_key(user)  
68 - File.unlink(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"))  
69 - `cd #{File.join(@local_dir,'gitolite')} ; git rm keydir/#{user}.pub`  
70 - end  
71 -  
72 - # update or create  
73 - def update_project(repo_name, project)  
74 - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))  
75 - conf = ga_repo.config  
76 - repo = update_project_config(project, conf)  
77 - conf.add_repo(repo, true)  
78 -  
79 - ga_repo.save  
80 - end  
81 -  
82 - # Updates many projects and uses project.path as the repo path  
83 - # An order of magnitude faster than update_project  
84 - def update_projects(projects)  
85 - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))  
86 - conf = ga_repo.config  
87 -  
88 - projects.each do |project|  
89 - repo = update_project_config(project, conf)  
90 - conf.add_repo(repo, true)  
91 - end  
92 -  
93 - ga_repo.save  
94 - end  
95 -  
96 - def update_project_config(project, conf)  
97 - repo_name = project.path  
98 -  
99 - repo = if conf.has_repo?(repo_name)  
100 - conf.get_repo(repo_name)  
101 - else  
102 - ::Gitolite::Config::Repo.new(repo_name)  
103 - end  
104 -  
105 - name_readers = project.repository_readers  
106 - name_writers = project.repository_writers  
107 - name_masters = project.repository_masters  
108 -  
109 - pr_br = project.protected_branches.map(&:name).join(" ")  
110 -  
111 - repo.clean_permissions  
112 -  
113 - # Deny access to protected branches for writers  
114 - unless name_writers.blank? || pr_br.blank?  
115 - repo.add_permission("-", pr_br, name_writers)  
116 - end  
117 -  
118 - # Add read permissions  
119 - repo.add_permission("R", "", name_readers) unless name_readers.blank?  
120 -  
121 - # Add write permissions  
122 - repo.add_permission("RW+", "", name_writers) unless name_writers.blank?  
123 - repo.add_permission("RW+", "", name_masters) unless name_masters.blank?  
124 -  
125 - repo  
126 - end  
127 -  
128 - def admin_all_repo  
129 - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))  
130 - conf = ga_repo.config  
131 - owner_name = ""  
132 -  
133 - # Read gitolite-admin user  
134 - #  
135 - begin  
136 - repo = conf.get_repo("gitolite-admin")  
137 - owner_name = repo.permissions[0]["RW+"][""][0]  
138 - raise StandardError if owner_name.blank?  
139 - rescue => ex  
140 - puts "Cant determine gitolite-admin owner".red  
141 - raise StandardError  
142 - end  
143 -  
144 - # @ALL repos premission for gitolite owner  
145 - repo_name = "@all"  
146 - repo = if conf.has_repo?(repo_name)  
147 - conf.get_repo(repo_name)  
148 - else  
149 - ::Gitolite::Config::Repo.new(repo_name)  
150 - end  
151 -  
152 - repo.add_permission("RW+", "", owner_name)  
153 - conf.add_repo(repo, true)  
154 - ga_repo.save  
155 - end  
156 - end  
157 -end  
lib/gitlabhq/logger.rb
@@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
1 -module Gitlabhq  
2 - class Logger  
3 - def self.error(message)  
4 - @@logger ||= ::Logger.new(File.join(Rails.root, "log/githost.log"))  
5 - @@logger.error(message)  
6 - end  
7 - end  
8 -end  
lib/gitlabhq/satellite.rb
@@ -1,41 +0,0 @@ @@ -1,41 +0,0 @@
1 -module Gitlabhq  
2 - class Satellite  
3 -  
4 - PARKING_BRANCH = "__parking_branch"  
5 -  
6 - attr_accessor :project  
7 -  
8 - def initialize project  
9 - self.project = project  
10 - end  
11 -  
12 - def create  
13 - `git clone #{project.url_to_repo} #{path}`  
14 - end  
15 -  
16 - def path  
17 - File.join(Rails.root, "tmp", "repo_satellites", project.path)  
18 - end  
19 -  
20 - def exists?  
21 - File.exists? path  
22 - end  
23 -  
24 - #will be deleted all branches except PARKING_BRANCH  
25 - def clear  
26 - Dir.chdir(path) do  
27 - heads = Grit::Repo.new(".").heads.map{|head| head.name}  
28 - if heads.include? PARKING_BRANCH  
29 - `git checkout #{PARKING_BRANCH}`  
30 - else  
31 - `git checkout -b #{PARKING_BRANCH}`  
32 - end  
33 - heads.delete(PARKING_BRANCH)  
34 - heads.each do |head|  
35 - `git branch -D #{head}`  
36 - end  
37 - end  
38 - end  
39 -  
40 - end  
41 -end  
lib/tasks/gitlab/enable_automerge.rake
@@ -2,7 +2,7 @@ namespace :gitlab do @@ -2,7 +2,7 @@ namespace :gitlab do
2 namespace :app do 2 namespace :app do
3 desc "GITLAB | Enable auto merge" 3 desc "GITLAB | Enable auto merge"
4 task :enable_automerge => :environment do 4 task :enable_automerge => :environment do
5 - Gitlabhq::GitHost.system.new.configure do |git| 5 + Gitlab::GitHost.system.new.configure do |git|
6 git.admin_all_repo 6 git.admin_all_repo
7 end 7 end
8 8
spec/models/protected_branch_spec.rb
@@ -43,7 +43,7 @@ describe ProtectedBranch do @@ -43,7 +43,7 @@ describe ProtectedBranch do
43 subject { ProtectedBranch.new(:project => project) } 43 subject { ProtectedBranch.new(:project => project) }
44 44
45 it "updates the branch's project repo permissions" do 45 it "updates the branch's project repo permissions" do
46 - Gitlabhq::GitHost.should_receive(:system).and_return(gitolite) 46 + Gitlab::GitHost.should_receive(:system).and_return(gitolite)
47 gitolite.should_receive(:update_project).with(project.path, project) 47 gitolite.should_receive(:update_project).with(project.path, project)
48 48
49 subject.update_repository 49 subject.update_repository