Use subproccess instead subshell for git calls
This commit is contained in:
parent
68fa988219
commit
d770714578
1 changed files with 18 additions and 14 deletions
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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?
|
||||||
|
|
||||||
|
@ -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 }
|
||||||
|
|
||||||
|
@ -239,4 +244,3 @@ module Gitlab
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue