Commit 847bba92 authored by Riyad Preukschas's avatar Riyad Preukschas

Add Gitlab::Satellite::Action

parent 643ed9cb
module Gitlab
module Satellite
class Action
DEFAULT_OPTIONS = { git_timeout: 30.seconds }
attr_accessor :options, :project
def initialize(project, options = {})
@project = project
@options = DEFAULT_OPTIONS.merge(options)
end
protected
# * Sets a 30s timeout for Git
# * Locks the satellite repo
# * Yields the prepared satellite repo
def in_locked_and_timed_satellite
Grit::Git.with_timeout(options[:git_timeout]) do
File.open(lock_file, "w+") do |f|
f.flock(File::LOCK_EX)
unless project.satellite.exists?
raise "Satellite doesn't exist"
end
Dir.chdir(project.satellite.path) do
repo = Grit::Repo.new('.')
return yield repo
end
end
end
rescue Errno::ENOMEM => ex
Gitlab::GitLogger.error(ex.message)
return false
rescue Grit::Git::GitTimeout => ex
Gitlab::GitLogger.error(ex.message)
return false
end
def lock_file
Rails.root.join("tmp", "#{project.path}.lock")
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment