Sha256: 7ef743566693564fe4a093a56c741cecc5c7451f2f2725736df5fec20c66aa59

Contents?: true

Size: 1.17 KB

Versions: 20

Compression:

Stored size: 1.17 KB

Contents

class GithubSyncJob < BackgroundJob
  include BackgroundJob::Unique

  MAX_FETCHED_COMMITS = 10
  queue_as :default

  self.timeout = 60
  self.lock_timeout = 20

  def perform(params)
    @stack = Stack.find(params[:stack_id])

    handle_github_errors do
      new_commits, shared_parent = fetch_missing_commits { @stack.github_commits }

      @stack.transaction do
        shared_parent.try!(:detach_children!)
        new_commits.each do |gh_commit|
          @stack.commits.create_from_github!(gh_commit)
        end
      end
    end
    CacheDeploySpecJob.perform_later(@stack)
  end

  def fetch_missing_commits(&block)
    commits = []
    iterator = Shipit::FirstParentCommitsIterator.new(&block)
    iterator.each_with_index do |commit, index|
      break if index >= MAX_FETCHED_COMMITS

      if shared_parent = lookup_commit(commit.sha)
        return commits, shared_parent
      end
      commits.unshift(commit)
    end
    return commits, nil
  end

  protected

  def handle_github_errors
    yield
  rescue Octokit::NotFound
    @stack.mark_as_inaccessible!
  else
    @stack.mark_as_accessible!
  end

  def lookup_commit(sha)
    @stack.commits.find_by_sha(sha)
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
shipit-engine-0.5.2 app/jobs/github_sync_job.rb
shipit-engine-0.5.1 app/jobs/github_sync_job.rb
shipit-engine-0.5.0 app/jobs/github_sync_job.rb
shipit-engine-0.4.10 app/jobs/github_sync_job.rb
shipit-engine-0.4.9 app/jobs/github_sync_job.rb
shipit-engine-0.4.8 app/jobs/github_sync_job.rb
shipit-engine-0.4.7 app/jobs/github_sync_job.rb
shipit-engine-0.4.6 app/jobs/github_sync_job.rb
shipit-engine-0.4.5 app/jobs/github_sync_job.rb
shipit-engine-0.4.4 app/jobs/github_sync_job.rb
shipit-engine-0.4.3 app/jobs/github_sync_job.rb
shipit-engine-0.4.2 app/jobs/github_sync_job.rb
shipit-engine-0.4.1 app/jobs/github_sync_job.rb
shipit-engine-0.4.0 app/jobs/github_sync_job.rb
shipit-engine-0.3.1 app/jobs/github_sync_job.rb
shipit-engine-0.3.0 app/jobs/github_sync_job.rb
shipit-engine-0.2.3 app/jobs/github_sync_job.rb
shipit-engine-0.2.2 app/jobs/github_sync_job.rb
shipit-engine-0.2.1 app/jobs/github_sync_job.rb
shipit-engine-0.2.0 app/jobs/github_sync_job.rb