diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8dd407a..a96c59b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,7 +5,7 @@ class ApplicationController < ActionController::Base protect_from_forgery helper_method :abilities, :can? - rescue_from Gitlabhq::Gitolite::AccessDenied do |exception| + rescue_from Gitlab::Gitolite::AccessDenied do |exception| render "errors/gitolite", :layout => "error" end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 38fd6f3..246d43e 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -45,7 +45,7 @@ class ProjectsController < ApplicationController format.js end end - rescue Gitlabhq::Gitolite::AccessDenied + rescue Gitlab::Gitolite::AccessDenied render :js => "location.href = '#{errors_githost_path}'" and return rescue StandardError => ex @project.errors.add(:base, "Cant save project. Please try again later") diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7cbc6c4..7b15513 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -143,6 +143,6 @@ module ApplicationHelper end def string_to_utf8 str - Gitlabhq::Encode.utf8 str + Gitlab::Encode.utf8 str end end diff --git a/app/models/commit.rb b/app/models/commit.rb index ad6d712..09635d0 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -1,6 +1,6 @@ class Commit include ActiveModel::Conversion - include Gitlabhq::Encode + include Gitlab::Encode extend ActiveModel::Naming attr_accessor :commit diff --git a/app/models/key.rb b/app/models/key.rb index 1d7aae3..8fe8716 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -38,14 +38,14 @@ class Key < ActiveRecord::Base end def update_repository - Gitlabhq::GitHost.system.new.configure do |c| + Gitlab::GitHost.system.new.configure do |c| c.update_keys(identifier, key) c.update_projects(projects) end end def repository_delete_key - Gitlabhq::GitHost.system.new.configure do |c| + Gitlab::GitHost.system.new.configure do |c| #delete key file is there is no identically deploy keys if !is_deploy_key || Key.where(:identifier => identifier).count() == 0 c.delete_key(identifier) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 248bbda..ded1260 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -82,7 +82,7 @@ class MergeRequest < ActiveRecord::Base end def check_if_can_be_merged - self.state = if GitlabMerge.new(self, self.author).can_be_merged? + self.state = if Gitlab::Merge.new(self, self.author).can_be_merged? CAN_BE_MERGED else CANNOT_BE_MERGED @@ -184,7 +184,7 @@ class MergeRequest < ActiveRecord::Base end def automerge!(current_user) - if GitlabMerge.new(self, current_user).merge + if Gitlab::Merge.new(self, current_user).merge self.merge!(current_user.id) true end diff --git a/app/models/project/repository_trait.rb b/app/models/project/repository_trait.rb index 8757d84..a759ead 100644 --- a/app/models/project/repository_trait.rb +++ b/app/models/project/repository_trait.rb @@ -38,7 +38,7 @@ module Project::RepositoryTrait end def satellite - @satellite ||= Gitlabhq::Satellite.new(self) + @satellite ||= Gitlab::Satellite.new(self) end def write_hook(name, content) @@ -65,7 +65,7 @@ module Project::RepositoryTrait end def url_to_repo - Gitlabhq::GitHost.url_to_repo(path) + Gitlab::GitHost.url_to_repo(path) end def path_to_repo @@ -73,13 +73,13 @@ module Project::RepositoryTrait end def update_repository - Gitlabhq::GitHost.system.update_project(path, self) + Gitlab::GitHost.system.update_project(path, self) write_hooks if File.exists?(path_to_repo) end def destroy_repository - Gitlabhq::GitHost.system.destroy_project(self) + Gitlab::GitHost.system.destroy_project(self) end def repo_exists? diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb index 36e6563..e24412b 100644 --- a/app/models/protected_branch.rb +++ b/app/models/protected_branch.rb @@ -7,7 +7,7 @@ class ProtectedBranch < ActiveRecord::Base after_destroy :update_repository def update_repository - Gitlabhq::GitHost.system.update_project(project.path, project) + Gitlab::GitHost.system.update_project(project.path, project) end def commit diff --git a/app/models/users_project.rb b/app/models/users_project.rb index b00ab96..808ed64 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -58,7 +58,7 @@ class UsersProject < ActiveRecord::Base end def update_repository - Gitlabhq::GitHost.system.new.configure do |c| + Gitlab::GitHost.system.new.configure do |c| c.update_project(project.path, project) end end diff --git a/config/environment.rb b/config/environment.rb index 9b09be0..c880a7a 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -4,4 +4,4 @@ require File.expand_path('../application', __FILE__) # Initialize the rails application Gitlab::Application.initialize! -require File.join(Rails.root, "lib", "gitlabhq", "git_host") +require File.join(Rails.root, "lib", "gitlab", "git_host") diff --git a/config/initializers/gitlabhq/20_grit_ext.rb b/config/initializers/gitlabhq/20_grit_ext.rb index 13e692c..33c33cc 100644 --- a/config/initializers/gitlabhq/20_grit_ext.rb +++ b/config/initializers/gitlabhq/20_grit_ext.rb @@ -15,11 +15,11 @@ end Grit::Diff.class_eval do def old_path - Gitlabhq::Encode.utf8 a_path + Gitlab::Encode.utf8 a_path end def new_path - Gitlabhq::Encode.utf8 b_path + Gitlab::Encode.utf8 b_path end end diff --git a/lib/gitlab/encode.rb b/lib/gitlab/encode.rb new file mode 100644 index 0000000..a9660fa --- /dev/null +++ b/lib/gitlab/encode.rb @@ -0,0 +1,20 @@ +module Gitlab + module Encode + extend self + + def utf8 message + return nil unless message + + hash = CharlockHolmes::EncodingDetector.detect(message) rescue {} + if hash[:encoding] + CharlockHolmes::Converter.convert(message, hash[:encoding], 'UTF-8') + else + message + end.force_encoding("utf-8") + # Prevent app from crash cause of + # encoding errors + rescue + "" + end + end +end diff --git a/lib/gitlab/git_host.rb b/lib/gitlab/git_host.rb new file mode 100644 index 0000000..3d8d174 --- /dev/null +++ b/lib/gitlab/git_host.rb @@ -0,0 +1,21 @@ +require File.join(Rails.root, "lib", "gitlab", "gitolite") + +module Gitlab + class GitHost + def self.system + Gitlab::Gitolite + end + + def self.admin_uri + GIT_HOST["admin_uri"] + end + + def self.url_to_repo(path) + if !GIT_HOST["port"] or GIT_HOST["port"] == 22 + "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{path}.git" + else + "ssh://#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{GIT_HOST["port"]}/#{path}.git" + end + end + end +end diff --git a/lib/gitlab/gitolite.rb b/lib/gitlab/gitolite.rb new file mode 100644 index 0000000..c7b407d --- /dev/null +++ b/lib/gitlab/gitolite.rb @@ -0,0 +1,157 @@ +require 'gitolite' +require 'timeout' +require 'fileutils' + +module Gitlab + class Gitolite + class AccessDenied < StandardError; end + + def self.update_project(path, project) + self.new.configure { |git| git.update_project(path, project) } + end + + def self.destroy_project(project) + self.new.configure { |git| git.destroy_project(project) } + end + + def pull + # create tmp dir + @local_dir = File.join(Dir.tmpdir,"gitlabhq-gitolite-#{Time.now.to_i}") + Dir.mkdir @local_dir + + `git clone #{GitHost.admin_uri} #{@local_dir}/gitolite` + end + + def push + Dir.chdir(File.join(@local_dir, "gitolite")) + `git add -A` + `git commit -am "Gitlab"` + `git push` + Dir.chdir(Rails.root) + + FileUtils.rm_rf(@local_dir) + end + + def configure + status = Timeout::timeout(20) do + File.open(File.join(Dir.tmpdir,"gitlabhq-gitolite.lock"), "w+") do |f| + begin + f.flock(File::LOCK_EX) + pull + yield(self) + push + ensure + f.flock(File::LOCK_UN) + end + end + end + rescue Exception => ex + Gitlab::Logger.error(ex.message) + raise Gitolite::AccessDenied.new("gitolite timeout") + end + + def destroy_project(project) + FileUtils.rm_rf(project.path_to_repo) + + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) + conf = ga_repo.config + conf.rm_repo(project.path) + ga_repo.save + end + + #update or create + def update_keys(user, key) + File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) } + end + + def delete_key(user) + File.unlink(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub")) + `cd #{File.join(@local_dir,'gitolite')} ; git rm keydir/#{user}.pub` + end + + # update or create + def update_project(repo_name, project) + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) + conf = ga_repo.config + repo = update_project_config(project, conf) + conf.add_repo(repo, true) + + ga_repo.save + end + + # Updates many projects and uses project.path as the repo path + # An order of magnitude faster than update_project + def update_projects(projects) + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) + conf = ga_repo.config + + projects.each do |project| + repo = update_project_config(project, conf) + conf.add_repo(repo, true) + end + + ga_repo.save + end + + def update_project_config(project, conf) + repo_name = project.path + + repo = if conf.has_repo?(repo_name) + conf.get_repo(repo_name) + else + ::Gitolite::Config::Repo.new(repo_name) + end + + name_readers = project.repository_readers + name_writers = project.repository_writers + name_masters = project.repository_masters + + pr_br = project.protected_branches.map(&:name).join(" ") + + repo.clean_permissions + + # Deny access to protected branches for writers + unless name_writers.blank? || pr_br.blank? + repo.add_permission("-", pr_br, name_writers) + end + + # Add read permissions + repo.add_permission("R", "", name_readers) unless name_readers.blank? + + # Add write permissions + repo.add_permission("RW+", "", name_writers) unless name_writers.blank? + repo.add_permission("RW+", "", name_masters) unless name_masters.blank? + + repo + end + + def admin_all_repo + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) + conf = ga_repo.config + owner_name = "" + + # Read gitolite-admin user + # + begin + repo = conf.get_repo("gitolite-admin") + owner_name = repo.permissions[0]["RW+"][""][0] + raise StandardError if owner_name.blank? + rescue => ex + puts "Cant determine gitolite-admin owner".red + raise StandardError + end + + # @ALL repos premission for gitolite owner + repo_name = "@all" + repo = if conf.has_repo?(repo_name) + conf.get_repo(repo_name) + else + ::Gitolite::Config::Repo.new(repo_name) + end + + repo.add_permission("RW+", "", owner_name) + conf.add_repo(repo, true) + ga_repo.save + end + end +end diff --git a/lib/gitlab/logger.rb b/lib/gitlab/logger.rb new file mode 100644 index 0000000..45a9907 --- /dev/null +++ b/lib/gitlab/logger.rb @@ -0,0 +1,8 @@ +module Gitlab + class Logger + def self.error(message) + @@logger ||= ::Logger.new(File.join(Rails.root, "log/githost.log")) + @@logger.error(message) + end + end +end diff --git a/lib/gitlab/merge.rb b/lib/gitlab/merge.rb new file mode 100644 index 0000000..695e41e --- /dev/null +++ b/lib/gitlab/merge.rb @@ -0,0 +1,60 @@ +module Gitlab + class Merge + attr_accessor :project, :merge_request, :user + + def initialize(merge_request, user) + self.user = user + self.merge_request = merge_request + self.project = merge_request.project + end + + def can_be_merged? + result = false + process do |repo, output| + result = !(output =~ /CONFLICT/) + end + result + end + + def merge + process do |repo, output| + if output =~ /CONFLICT/ + false + else + repo.git.push({}, "origin", merge_request.target_branch) + true + end + end + end + + def process + Grit::Git.with_timeout(30.seconds) do + lock_file = File.join(Rails.root, "tmp", "merge_repo_#{project.path}.lock") + + File.open(lock_file, "w+") do |f| + f.flock(File::LOCK_EX) + + unless project.satellite.exists? + raise "You should run: rake gitlab:app:enable_automerge" + end + + project.satellite.clear + + Dir.chdir(project.satellite.path) do + merge_repo = Grit::Repo.new('.') + merge_repo.git.sh "git reset --hard" + merge_repo.git.sh "git fetch origin" + merge_repo.git.sh "git config user.name \"#{user.name}\"" + merge_repo.git.sh "git config user.email \"#{user.email}\"" + merge_repo.git.sh "git checkout -b #{merge_request.target_branch} origin/#{merge_request.target_branch}" + output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch) + yield(merge_repo, output) + end + end + end + + rescue Grit::Git::GitTimeout + return false + end + end +end diff --git a/lib/gitlab/satellite.rb b/lib/gitlab/satellite.rb new file mode 100644 index 0000000..4bcbfe8 --- /dev/null +++ b/lib/gitlab/satellite.rb @@ -0,0 +1,41 @@ +module Gitlab + class Satellite + + PARKING_BRANCH = "__parking_branch" + + attr_accessor :project + + def initialize project + self.project = project + end + + def create + `git clone #{project.url_to_repo} #{path}` + end + + def path + File.join(Rails.root, "tmp", "repo_satellites", project.path) + end + + def exists? + File.exists? path + end + + #will be deleted all branches except PARKING_BRANCH + def clear + Dir.chdir(path) do + heads = Grit::Repo.new(".").heads.map{|head| head.name} + if heads.include? PARKING_BRANCH + `git checkout #{PARKING_BRANCH}` + else + `git checkout -b #{PARKING_BRANCH}` + end + heads.delete(PARKING_BRANCH) + heads.each do |head| + `git branch -D #{head}` + end + end + end + + end +end diff --git a/lib/gitlab_merge.rb b/lib/gitlab_merge.rb deleted file mode 100644 index 2ca7b26..0000000 --- a/lib/gitlab_merge.rb +++ /dev/null @@ -1,58 +0,0 @@ -class GitlabMerge - attr_accessor :project, :merge_request, :user - - def initialize(merge_request, user) - self.user = user - self.merge_request = merge_request - self.project = merge_request.project - end - - def can_be_merged? - result = false - process do |repo, output| - result = !(output =~ /CONFLICT/) - end - result - end - - def merge - process do |repo, output| - if output =~ /CONFLICT/ - false - else - repo.git.push({}, "origin", merge_request.target_branch) - true - end - end - end - - def process - Grit::Git.with_timeout(30.seconds) do - lock_file = File.join(Rails.root, "tmp", "merge_repo_#{project.path}.lock") - - File.open(lock_file, "w+") do |f| - f.flock(File::LOCK_EX) - - unless project.satellite.exists? - raise "You should run: rake gitlab:app:enable_automerge" - end - - project.satellite.clear - - Dir.chdir(project.satellite.path) do - merge_repo = Grit::Repo.new('.') - merge_repo.git.sh "git reset --hard" - merge_repo.git.sh "git fetch origin" - merge_repo.git.sh "git config user.name \"#{user.name}\"" - merge_repo.git.sh "git config user.email \"#{user.email}\"" - merge_repo.git.sh "git checkout -b #{merge_request.target_branch} origin/#{merge_request.target_branch}" - output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch) - yield(merge_repo, output) - end - end - end - - rescue Grit::Git::GitTimeout - return false - end -end diff --git a/lib/gitlabhq/encode.rb b/lib/gitlabhq/encode.rb deleted file mode 100644 index df40206..0000000 --- a/lib/gitlabhq/encode.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Gitlabhq - module Encode - extend self - - def utf8 message - return nil unless message - - hash = CharlockHolmes::EncodingDetector.detect(message) rescue {} - if hash[:encoding] - CharlockHolmes::Converter.convert(message, hash[:encoding], 'UTF-8') - else - message - end.force_encoding("utf-8") - # Prevent app from crash cause of - # encoding errors - rescue - "" - end - end -end diff --git a/lib/gitlabhq/git_host.rb b/lib/gitlabhq/git_host.rb deleted file mode 100644 index 9a6eecb..0000000 --- a/lib/gitlabhq/git_host.rb +++ /dev/null @@ -1,21 +0,0 @@ -require File.join(Rails.root, "lib", "gitlabhq", "gitolite") - -module Gitlabhq - class GitHost - def self.system - Gitlabhq::Gitolite - end - - def self.admin_uri - GIT_HOST["admin_uri"] - end - - def self.url_to_repo(path) - if !GIT_HOST["port"] or GIT_HOST["port"] == 22 - "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{path}.git" - else - "ssh://#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{GIT_HOST["port"]}/#{path}.git" - end - end - end -end diff --git a/lib/gitlabhq/gitolite.rb b/lib/gitlabhq/gitolite.rb deleted file mode 100644 index 48c6708..0000000 --- a/lib/gitlabhq/gitolite.rb +++ /dev/null @@ -1,157 +0,0 @@ -require 'gitolite' -require 'timeout' -require 'fileutils' - -module Gitlabhq - class Gitolite - class AccessDenied < StandardError; end - - def self.update_project(path, project) - self.new.configure { |git| git.update_project(path, project) } - end - - def self.destroy_project(project) - self.new.configure { |git| git.destroy_project(project) } - end - - def pull - # create tmp dir - @local_dir = File.join(Dir.tmpdir,"gitlabhq-gitolite-#{Time.now.to_i}") - Dir.mkdir @local_dir - - `git clone #{GitHost.admin_uri} #{@local_dir}/gitolite` - end - - def push - Dir.chdir(File.join(@local_dir, "gitolite")) - `git add -A` - `git commit -am "Gitlab"` - `git push` - Dir.chdir(Rails.root) - - FileUtils.rm_rf(@local_dir) - end - - def configure - status = Timeout::timeout(20) do - File.open(File.join(Dir.tmpdir,"gitlabhq-gitolite.lock"), "w+") do |f| - begin - f.flock(File::LOCK_EX) - pull - yield(self) - push - ensure - f.flock(File::LOCK_UN) - end - end - end - rescue Exception => ex - Gitlabhq::Logger.error(ex.message) - raise Gitolite::AccessDenied.new("gitolite timeout") - end - - def destroy_project(project) - FileUtils.rm_rf(project.path_to_repo) - - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - conf.rm_repo(project.path) - ga_repo.save - end - - #update or create - def update_keys(user, key) - File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) } - end - - def delete_key(user) - File.unlink(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub")) - `cd #{File.join(@local_dir,'gitolite')} ; git rm keydir/#{user}.pub` - end - - # update or create - def update_project(repo_name, project) - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - repo = update_project_config(project, conf) - conf.add_repo(repo, true) - - ga_repo.save - end - - # Updates many projects and uses project.path as the repo path - # An order of magnitude faster than update_project - def update_projects(projects) - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - - projects.each do |project| - repo = update_project_config(project, conf) - conf.add_repo(repo, true) - end - - ga_repo.save - end - - def update_project_config(project, conf) - repo_name = project.path - - repo = if conf.has_repo?(repo_name) - conf.get_repo(repo_name) - else - ::Gitolite::Config::Repo.new(repo_name) - end - - name_readers = project.repository_readers - name_writers = project.repository_writers - name_masters = project.repository_masters - - pr_br = project.protected_branches.map(&:name).join(" ") - - repo.clean_permissions - - # Deny access to protected branches for writers - unless name_writers.blank? || pr_br.blank? - repo.add_permission("-", pr_br, name_writers) - end - - # Add read permissions - repo.add_permission("R", "", name_readers) unless name_readers.blank? - - # Add write permissions - repo.add_permission("RW+", "", name_writers) unless name_writers.blank? - repo.add_permission("RW+", "", name_masters) unless name_masters.blank? - - repo - end - - def admin_all_repo - ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) - conf = ga_repo.config - owner_name = "" - - # Read gitolite-admin user - # - begin - repo = conf.get_repo("gitolite-admin") - owner_name = repo.permissions[0]["RW+"][""][0] - raise StandardError if owner_name.blank? - rescue => ex - puts "Cant determine gitolite-admin owner".red - raise StandardError - end - - # @ALL repos premission for gitolite owner - repo_name = "@all" - repo = if conf.has_repo?(repo_name) - conf.get_repo(repo_name) - else - ::Gitolite::Config::Repo.new(repo_name) - end - - repo.add_permission("RW+", "", owner_name) - conf.add_repo(repo, true) - ga_repo.save - end - end -end diff --git a/lib/gitlabhq/logger.rb b/lib/gitlabhq/logger.rb deleted file mode 100644 index 08b4bde..0000000 --- a/lib/gitlabhq/logger.rb +++ /dev/null @@ -1,8 +0,0 @@ -module Gitlabhq - class Logger - def self.error(message) - @@logger ||= ::Logger.new(File.join(Rails.root, "log/githost.log")) - @@logger.error(message) - end - end -end diff --git a/lib/gitlabhq/satellite.rb b/lib/gitlabhq/satellite.rb deleted file mode 100644 index cd713a6..0000000 --- a/lib/gitlabhq/satellite.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Gitlabhq - class Satellite - - PARKING_BRANCH = "__parking_branch" - - attr_accessor :project - - def initialize project - self.project = project - end - - def create - `git clone #{project.url_to_repo} #{path}` - end - - def path - File.join(Rails.root, "tmp", "repo_satellites", project.path) - end - - def exists? - File.exists? path - end - - #will be deleted all branches except PARKING_BRANCH - def clear - Dir.chdir(path) do - heads = Grit::Repo.new(".").heads.map{|head| head.name} - if heads.include? PARKING_BRANCH - `git checkout #{PARKING_BRANCH}` - else - `git checkout -b #{PARKING_BRANCH}` - end - heads.delete(PARKING_BRANCH) - heads.each do |head| - `git branch -D #{head}` - end - end - end - - end -end diff --git a/lib/tasks/gitlab/enable_automerge.rake b/lib/tasks/gitlab/enable_automerge.rake index 647e06f..07f8058 100644 --- a/lib/tasks/gitlab/enable_automerge.rake +++ b/lib/tasks/gitlab/enable_automerge.rake @@ -2,7 +2,7 @@ namespace :gitlab do namespace :app do desc "GITLAB | Enable auto merge" task :enable_automerge => :environment do - Gitlabhq::GitHost.system.new.configure do |git| + Gitlab::GitHost.system.new.configure do |git| git.admin_all_repo end diff --git a/spec/models/protected_branch_spec.rb b/spec/models/protected_branch_spec.rb index ce79f67..024b45f 100644 --- a/spec/models/protected_branch_spec.rb +++ b/spec/models/protected_branch_spec.rb @@ -43,7 +43,7 @@ describe ProtectedBranch do subject { ProtectedBranch.new(:project => project) } it "updates the branch's project repo permissions" do - Gitlabhq::GitHost.should_receive(:system).and_return(gitolite) + Gitlab::GitHost.should_receive(:system).and_return(gitolite) gitolite.should_receive(:update_project).with(project.path, project) subject.update_repository -- libgit2 0.21.2