Class: GemCollector::UpdateGemfile

Inherits:
Object
  • Object
show all
Defined in:
app/services/gem_collector/update_gemfile.rb

Instance Method Summary collapse

Instance Method Details

#run(repository) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'app/services/gem_collector/update_gemfile.rb', line 4

def run(repository)
  Dir.mktmpdir("gem_collector_update_gemfile_#{repository.id}") do |dir|
    dir_path = Pathname.new(dir)
    system!('git', 'clone', '--depth=1', repository.ssh_url, dir)
    retry_on_serialization_failure(tries: 3) do
      GemCollector::RepositoryGem.transaction(isolation: :serializable) do
        GemCollector::RepositoryGem.where(repository_id: repository.id).delete_all
        each_gemfile_lock(dir) do |path|
          update_gemfile_lock(repository, dir_path, path)
        end
        repository.touch
      end
    end
  end
end