diff options
Diffstat (limited to 'lib/gitlab_merge.rb')
-rw-r--r-- | lib/gitlab_merge.rb | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/lib/gitlab_merge.rb b/lib/gitlab_merge.rb deleted file mode 100644 index 2ca7b26d865..00000000000 --- 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 |