Commit 847bba926929c4d64dcc5065b9b2762a62a87c87

Authored by Riyad Preukschas
1 parent 643ed9cb

Add Gitlab::Satellite::Action

Showing 1 changed file with 47 additions and 0 deletions   Show diff stats
lib/gitlab/satellite/action.rb 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +module Gitlab
  2 + module Satellite
  3 + class Action
  4 + DEFAULT_OPTIONS = { git_timeout: 30.seconds }
  5 +
  6 + attr_accessor :options, :project
  7 +
  8 + def initialize(project, options = {})
  9 + @project = project
  10 + @options = DEFAULT_OPTIONS.merge(options)
  11 + end
  12 +
  13 + protected
  14 +
  15 + # * Sets a 30s timeout for Git
  16 + # * Locks the satellite repo
  17 + # * Yields the prepared satellite repo
  18 + def in_locked_and_timed_satellite
  19 + Grit::Git.with_timeout(options[:git_timeout]) do
  20 + File.open(lock_file, "w+") do |f|
  21 + f.flock(File::LOCK_EX)
  22 +
  23 + unless project.satellite.exists?
  24 + raise "Satellite doesn't exist"
  25 + end
  26 +
  27 + Dir.chdir(project.satellite.path) do
  28 + repo = Grit::Repo.new('.')
  29 +
  30 + return yield repo
  31 + end
  32 + end
  33 + end
  34 + rescue Errno::ENOMEM => ex
  35 + Gitlab::GitLogger.error(ex.message)
  36 + return false
  37 + rescue Grit::Git::GitTimeout => ex
  38 + Gitlab::GitLogger.error(ex.message)
  39 + return false
  40 + end
  41 +
  42 + def lock_file
  43 + Rails.root.join("tmp", "#{project.path}.lock")
  44 + end
  45 + end
  46 + end
  47 +end
... ...