From 5abbada41e101ff832d036d5d1946d6f89fda771 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Mon, 16 Apr 2012 23:37:04 +0300 Subject: [PATCH] Auto-merge: implemented lock file --- lib/gitlab_merge.rb | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/gitlab_merge.rb b/lib/gitlab_merge.rb index 421750b7..95942d5c 100644 --- a/lib/gitlab_merge.rb +++ b/lib/gitlab_merge.rb @@ -28,14 +28,19 @@ class GitlabMerge end def pull - self.project.repo.git.clone({:branch => merge_request.target_branch}, project.url_to_repo, merge_path) - #TODO When user do not have permissions then raise exception - 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) + 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) + #TODO When user do not have permissions then raise exception + 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