Skip to content
Snippets Groups Projects
Commit d7707145 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Use subproccess instead subshell for git calls

parent 68fa9882
No related branches found
No related tags found
No related merge requests found
Loading
@@ -8,10 +8,11 @@ module Gitlab
Loading
@@ -8,10 +8,11 @@ module Gitlab
class PushError < StandardError; end class PushError < StandardError; end
class BrokenGitolite < StandardError; end class BrokenGitolite < StandardError; end
   
attr_reader :config_tmp_dir, :ga_repo, :conf attr_reader :config_tmp_dir, :tmp_dir, :ga_repo, :conf
   
def config_tmp_dir def initialize
@config_tmp_dir ||= Rails.root.join('tmp',"gitlabhq-gitolite-#{Time.now.to_i}") @tmp_dir = Rails.root.join("tmp").to_s
@config_tmp_dir = File.join(@tmp_dir,"gitlabhq-gitolite-#{Time.now.to_i}")
end end
   
def ga_repo def ga_repo
Loading
@@ -23,7 +24,7 @@ module Gitlab
Loading
@@ -23,7 +24,7 @@ module Gitlab
   
def apply def apply
Timeout::timeout(30) do Timeout::timeout(30) do
File.open(Rails.root.join('tmp', "gitlabhq-gitolite.lock"), "w+") do |f| File.open(File.join(tmp_dir, "gitlabhq-gitolite.lock"), "w+") do |f|
begin begin
# Set exclusive lock # Set exclusive lock
# to prevent race condition # to prevent race condition
Loading
@@ -31,7 +32,7 @@ module Gitlab
Loading
@@ -31,7 +32,7 @@ module Gitlab
   
# Pull gitolite-admin repo # Pull gitolite-admin repo
# in tmp dir before do any changes # in tmp dir before do any changes
pull(config_tmp_dir) pull
   
# Build ga_repo object and @conf # Build ga_repo object and @conf
# to access gitolite-admin configuration # to access gitolite-admin configuration
Loading
@@ -49,7 +50,7 @@ module Gitlab
Loading
@@ -49,7 +50,7 @@ module Gitlab
   
# Push gitolite-admin repo # Push gitolite-admin repo
# to apply all changes # to apply all changes
push(config_tmp_dir) push
ensure ensure
# Remove tmp dir # Remove tmp dir
# removing the gitolite folder first is important to avoid # removing the gitolite folder first is important to avoid
Loading
@@ -192,16 +193,20 @@ module Gitlab
Loading
@@ -192,16 +193,20 @@ module Gitlab
   
private private
   
def pull tmp_dir def pull
Dir.mkdir tmp_dir # Create config tmp dir like "RAILS_ROOT/tmp/gitlabhq-gitolite-132545"
`git clone #{Gitlab.config.gitolite.admin_uri} #{tmp_dir}/gitolite` Dir.mkdir config_tmp_dir
   
unless File.exists?(File.join(tmp_dir, 'gitolite', 'conf', 'gitolite.conf')) # Clone gitolite-admin repo into tmp dir
popen("git clone #{Gitlab.config.gitolite.admin_uri} #{config_tmp_dir}/gitolite", tmp_dir)
# Ensure file with config presents after cloning
unless File.exists?(File.join(config_tmp_dir, 'gitolite', 'conf', 'gitolite.conf'))
raise PullError, "unable to clone gitolite-admin repo" raise PullError, "unable to clone gitolite-admin repo"
end end
end end
   
def push tmp_dir def push
output, status = popen('git add -A') output, status = popen('git add -A')
raise "Git add failed." unless status.zero? raise "Git add failed." unless status.zero?
   
Loading
@@ -222,8 +227,8 @@ module Gitlab
Loading
@@ -222,8 +227,8 @@ module Gitlab
end end
end end
   
def popen(cmd) def popen(cmd, path = nil)
path = File.join(config_tmp_dir,'gitolite') path ||= File.join(config_tmp_dir,'gitolite')
vars = { "PWD" => path } vars = { "PWD" => path }
options = { :chdir => path } options = { :chdir => path }
   
Loading
@@ -239,4 +244,3 @@ module Gitlab
Loading
@@ -239,4 +244,3 @@ module Gitlab
end end
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment