class RBS::Collection::Sources::Git
Constants
- METADATA_FILENAME
Attributes
name[R]
remote[R]
repo_dir[R]
Public Class Methods
new(name:, revision:, remote:, repo_dir:)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 14 def initialize(name:, revision:, remote:, repo_dir:) @name = name @remote = remote @repo_dir = repo_dir || 'gems' setup!(revision: revision) end
Public Instance Methods
has?(config_entry)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 22 def has?(config_entry) gem_name = config_entry['name'] gem_repo_dir.join(gem_name).directory? end
install(dest:, config_entry:, stdout:)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 32 def install(dest:, config_entry:, stdout:) gem_name = config_entry['name'] version = config_entry['version'] or raise gem_dir = dest.join(gem_name, version) if gem_dir.directory? if (prev = YAML.load_file(gem_dir.join(METADATA_FILENAME))) == config_entry stdout.puts "Using #{format_config_entry(config_entry)}" else # @type var prev: RBS::Collection::Config::gem_entry stdout.puts "Updating to #{format_config_entry(config_entry)} from #{format_config_entry(prev)}" FileUtils.remove_entry_secure(gem_dir.to_s) _install(dest: dest, config_entry: config_entry) end else stdout.puts "Installing #{format_config_entry(config_entry)}" _install(dest: dest, config_entry: config_entry) end end
to_lockfile()
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 63 def to_lockfile { 'type' => 'git', 'name' => name, 'revision' => resolved_revision, 'remote' => remote, 'repo_dir' => repo_dir, } end
versions(config_entry)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 27 def versions(config_entry) gem_name = config_entry['name'] gem_repo_dir.join(gem_name).glob('*/').map { |path| path.basename.to_s } end
Private Instance Methods
_install(dest:, config_entry:)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 52 def _install(dest:, config_entry:) gem_name = config_entry['name'] version = config_entry['version'] or raise dest = dest.join(gem_name) dest.mkpath src = gem_repo_dir.join(gem_name, version) FileUtils.cp_r(src, dest) dest.join(version, METADATA_FILENAME).write(YAML.dump(config_entry)) end
format_config_entry(config_entry)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 73 def format_config_entry(config_entry) name = config_entry['name'] v = config_entry['version'] rev = resolved_revision[0..10] desc = "#{name}@#{rev}" "#{name}:#{v} (#{desc})" end
gem_repo_dir()
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 120 def gem_repo_dir git_dir.join @repo_dir end
git(*cmd)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 132 def git(*cmd) sh! 'git', *cmd end
git_dir()
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 111 def git_dir @git_dir ||= ( base = Pathname(ENV['XDG_CACHE_HOME'] || File.expand_path("~/.cache")) dir = base.join('rbs', Digest::SHA256.hexdigest(remote)) dir.mkpath dir ) end
need_to_fetch?(revision)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 100 def need_to_fetch?(revision) return true unless revision.match?(/\A[a-f0-9]{40}\z/) begin git('cat-file', '-e', revision) false rescue CommandError true end end
resolve_revision()
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 128 def resolve_revision git('rev-parse', 'HEAD').chomp end
resolved_revision()
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 124 def resolved_revision @resolved_revision ||= resolve_revision end
setup!(revision:)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 83 def setup!(revision:) git_dir.mkpath if git_dir.join('.git').directory? if need_to_fetch?(revision) git 'fetch', 'origin' end else git 'clone', remote, git_dir.to_s end begin git 'checkout', "origin/#{revision}" # for branch name as `revision` rescue CommandError git 'checkout', revision end end
sh!(*cmd)
click to toggle source
# File lib/rbs/collection/sources/git.rb, line 136 def sh!(*cmd) RBS.logger.debug "$ #{cmd.join(' ')}" (__skip__ = Open3.capture3(*cmd, chdir: git_dir)).then do |out, err, status| raise CommandError, "Unexpected status #{status.exitstatus}\n\n#{err}" unless status.success? out end end