class RBS::Collection::Sources::Git

Constants

METADATA_FILENAME

Attributes

name[R]
remote[R]
repo_dir[R]
revision[R]

Public Class Methods

new(name:, revision:, remote:, repo_dir:) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 18
def initialize(name:, revision:, remote:, repo_dir:)
  @name = name
  @remote = remote
  @repo_dir = repo_dir || 'gems'
  @revision = revision
  @need_setup = true
end

Public Instance Methods

has?(name, version) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 26
def has?(name, version)
  setup! do
    if version
      (gems_versions[name] || Set[]).include?(version)
    else
      gems_versions.key?(name)
    end
  end
end
install(dest:, name:, version:, stdout:) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 43
def install(dest:, name:, version:, stdout:)
  setup!()

  gem_dir = dest.join(name, version)

  case
  when gem_dir.symlink?
    stdout.puts "Updating to #{format_config_entry(name, version)} from a local source"
    gem_dir.unlink
    _install(dest: dest, name: name, version: version)
  when gem_dir.directory?
    prev = load_metadata(dir: gem_dir)

    if prev == metadata_content(name: name, version: version)
      stdout.puts "Using #{format_config_entry(name, version)}"
    else
      stdout.puts "Updating to #{format_config_entry(name, version)} from #{format_config_entry(prev["name"], prev["version"])}"
      FileUtils.remove_entry_secure(gem_dir.to_s)
      _install(dest: dest, name: name, version: version)
    end
  when !gem_dir.exist?
    stdout.puts "Installing #{format_config_entry(name, version)}"
    _install(dest: dest, name: name, version: version)
  else
    raise
  end
end
load_metadata(dir:) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 226
def load_metadata(dir:)
  # @type var content: Hash[String, untyped]
  content = YAML.load_file(dir.join(METADATA_FILENAME).to_s)
  _ = content.slice("name", "version", "source")
end
manifest_of(name, version) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 71
def manifest_of(name, version)
  setup! do
    path = File.join(repo_dir, name, version, 'manifest.yaml')
    content = git('cat-file', '-p', "#{resolved_revision}:#{path}")
    YAML.safe_load(content)
  rescue CommandError
    if has?(name, version)
      nil
    else
      raise
    end
  end
end
metadata_content(name:, version:) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 210
def metadata_content(name:, version:)
  {
    "name" => name,
    "version" => version,
    "source" => to_lockfile
  }
end
resolved_revision() click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 175
def resolved_revision
  @resolved_revision ||=
    begin
      if commit_hash?
        revision
      else
        setup! { git('rev-parse', "refs/remotes/origin/#{revision}").chomp }
      end
    end
end
to_lockfile() click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 111
def to_lockfile
  {
    'type' => 'git',
    'name' => name,
    'revision' => resolved_revision,
    'remote' => remote,
    'repo_dir' => repo_dir,
  }
end
versions(name) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 36
def versions(name)
  setup! do
    versions = gems_versions[name] or raise "Git source `#{name}` doesn't have `#{name}`"
    versions.sort
  end
end
write_metadata(dir:, name:, version:) click to toggle source
# File rbs-3.1.0/lib/rbs/collection/sources/git.rb, line 218
def write_metadata(dir:, name:, version:)
  dir.join(METADATA_FILENAME).write(
    YAML.dump(
      metadata_content(name: name, version: version)
    )
  )
end