Class: Ast::Merge::Git::CorpusAcquirer

Inherits:
Object
  • Object
show all
Defined in:
lib/ast/merge/git/corpus.rb,
sig/ast/merge/git.rbs

Overview

Explicitly acquires a pinned remote without changing an existing tree.

Class Method Summary collapse

Class Method Details

.acquire(corpus:, destination:, tmp_root:) ⇒ Object



525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
# File 'lib/ast/merge/git/corpus.rb', line 525

def acquire(corpus:, destination:, tmp_root:)
  corpus.validate!
  destination = Pathname(destination).expand_path
  tmp_root = Pathname(tmp_root).expand_path
  validate_destination!(destination, tmp_root)

  FileUtils.mkdir_p(destination.dirname)
  clone!(corpus.manifest.dig('source', 'remote_url'), destination)
  revision = corpus.manifest.dig('source', 'revision')
  git!('pinned revision missing after clone', '-C', destination.to_s, 'cat-file', '-e',
       "#{revision}^{commit}")
  git!('pinned revision checkout failed', '-C', destination.to_s, 'checkout', '--detach', '--quiet',
       revision)
  destination
end