summaryrefslogtreecommitdiff
path: root/lib/gitlab_merge.rb
diff options
context:
space:
mode:
authorrandx <dmitriy.zaporozhets@gmail.com>2012-03-29 18:03:05 +0300
committerrandx <dmitriy.zaporozhets@gmail.com>2012-03-29 18:03:05 +0300
commit78d620b3b63fdd78b2cd1e4386822f93a701bc42 (patch)
tree4dd832c46f62778d34c18bdb91319ea7415793fe /lib/gitlab_merge.rb
parent8ee0993fdf783ad12823ff817cd531df0bc363eb (diff)
downloadgitlab-ce-78d620b3b63fdd78b2cd1e4386822f93a701bc42.tar.gz
Raw gitlab automerge feature
Diffstat (limited to 'lib/gitlab_merge.rb')
-rw-r--r--lib/gitlab_merge.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/gitlab_merge.rb b/lib/gitlab_merge.rb
new file mode 100644
index 00000000000..85cc1667f65
--- /dev/null
+++ b/lib/gitlab_merge.rb
@@ -0,0 +1,26 @@
+class GitlabMerge
+ attr_accessor :project, :merge_path, :merge_request
+
+ def initialize(merge_request)
+ self.merge_request = merge_request
+ self.project = merge_request.project
+ self.merge_path = File.join(Rails.root, "tmp", "merge_repo", project.path)
+ FileUtils.rm_rf(merge_path)
+ FileUtils.mkdir_p merge_path
+ end
+
+ def merge
+ self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path)
+ output = ""
+ Dir.chdir(merge_path) do
+ merge_repo = Grit::Repo.new('.')
+ output = merge_repo.git.pull({}, "origin", merge_request.source_branch)
+ if output =~ /Automatic merge failed/
+ return false
+ else
+ merge_repo.git.push({}, "origin", merge_request.target_branch)
+ return true
+ end
+ end
+ end
+end