Merge remote-tracking branch 'origin/merge_button'
Conflicts: app/assets/javascripts/merge_requests.js db/schema.rb
This commit is contained in:
commit
08994f3f60
13 changed files with 223 additions and 7 deletions
48
lib/gitlab_merge.rb
Normal file
48
lib/gitlab_merge.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
class GitlabMerge
|
||||
attr_accessor :project, :merge_path, :merge_request, :user
|
||||
|
||||
def initialize(merge_request, user)
|
||||
self.user = user
|
||||
self.merge_request = merge_request
|
||||
self.project = merge_request.project
|
||||
self.merge_path = File.join(Rails.root, "tmp", "merge_repo", project.path, merge_request.id.to_s)
|
||||
FileUtils.rm_rf(merge_path)
|
||||
FileUtils.mkdir_p merge_path
|
||||
end
|
||||
|
||||
def can_be_merged?
|
||||
pull do |repo, output|
|
||||
!(output =~ /Automatic merge failed/)
|
||||
end
|
||||
end
|
||||
|
||||
def merge
|
||||
pull do |repo, output|
|
||||
if output =~ /Automatic merge failed/
|
||||
false
|
||||
else
|
||||
repo.git.push({}, "origin", merge_request.target_branch)
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pull
|
||||
File.open(File.join(Rails.root, "tmp", "merge_repo", "#{project.path}.lock"), "w+") do |f|
|
||||
f.flock(File::LOCK_EX)
|
||||
|
||||
self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
|
||||
unless File.exist?(self.merge_path)
|
||||
raise "Gitlab user do not have access to repo. You should run: rake gitlab_enable_automerge"
|
||||
end
|
||||
Dir.chdir(merge_path) do
|
||||
merge_repo = Grit::Repo.new('.')
|
||||
merge_repo.git.sh "git config user.name \"#{user.name}\""
|
||||
merge_repo.git.sh "git config user.email \"#{user.email}\""
|
||||
output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch)
|
||||
yield(merge_repo, output)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -123,5 +123,34 @@ module Gitlabhq
|
|||
|
||||
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
|
||||
|
|
9
lib/tasks/gitlab_enable_automerge.rake
Normal file
9
lib/tasks/gitlab_enable_automerge.rake
Normal file
|
@ -0,0 +1,9 @@
|
|||
desc "Give gitlab user full access to every repo"
|
||||
task :gitlab_enable_automerge => :environment do
|
||||
|
||||
Gitlabhq::GitHost.system.new.configure do |git|
|
||||
git.admin_all_repo
|
||||
end
|
||||
|
||||
puts "Done!".green
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue