Spec-Zone.ru › Ruby 2.6

класс Bundler::Source::Git

Родитель:
Path

Атрибуты

branch[R]
options[R]
ref[R]
submodules[R]
uri[R]

Публичные методы класса

from_lock(options) Показать исходный код
# File lib/bundler/source/git.rb, line 35
def self.from_lock(options)
  new(options.merge("uri" => options.delete("remote")))
end
new(options) Показать исходный код
# File lib/bundler/source/git.rb, line 13
def initialize(options)
  @options = options
  @glob = options["glob"] || DEFAULT_GLOB

  @allow_cached = false
  @allow_remote = false

  # Stringify options that could be set as symbols
  %w[ref branch tag revision].each {|k| options[k] = options[k].to_s if options[k] }

  @uri        = options["uri"] || ""
  @safe_uri   = URICredentialsFilter.credential_filtered_uri(@uri)
  @branch     = options["branch"]
  @ref        = options["ref"] || options["branch"] || options["tag"] || "master"
  @submodules = options["submodules"]
  @name       = options["name"]
  @version    = options["version"].to_s.strip.gsub("-", ".pre.")

  @copied     = false
  @local      = false
end

Публичные методы экземпляра

==(other)
Псевдоним для: eql?
allow_git_ops?() Показать исходный код
# File lib/bundler/source/git.rb, line 228
def allow_git_ops?
  @allow_remote || @allow_cached
end
app_cache_dirname() Показать исходный код
# File lib/bundler/source/git.rb, line 220
def app_cache_dirname
  "#{base_name}-#{shortref_for_path(cached_revision || revision)}"
end
cache(spec, custom_path = nil) Показать исходный код
# File lib/bundler/source/git.rb, line 188
def cache(spec, custom_path = nil)
  app_cache_path = app_cache_path(custom_path)
  return unless Bundler.feature_flag.cache_all?
  return if path == app_cache_path
  cached!
  FileUtils.rm_rf(app_cache_path)
  git_proxy.checkout if requires_checkout?
  git_proxy.copy_to(app_cache_path, @submodules)
  serialize_gemspecs_in(app_cache_path)
end
cache_path() Показать исходный код
# File lib/bundler/source/git.rb, line 210
def cache_path
  @cache_path ||= begin
    if Bundler.requires_sudo? || Bundler.feature_flag.global_gem_cache?
      Bundler.user_cache
    else
      Bundler.bundle_path.join("cache", "bundler")
    end.join("git", git_scope)
  end
end

Это путь, который будет содержать кэш Git-репозитория. При использовании одного и того же Git-репозитория в разных проектах этот кэш будет общим. При использовании локальных Git-репозиториев, он устанавливается в локальный репозиторий.

eql?(other) Показать исходный код
# File lib/bundler/source/git.rb, line 54
def eql?(other)
  other.is_a?(Git) && uri == other.uri && ref == other.ref &&
    branch == other.branch && name == other.name &&
    version == other.version && submodules == other.submodules
end
Также является псевдонимом для: ==
extension_dir_name() Показать исходный код
# File lib/bundler/source/git.rb, line 107
def extension_dir_name
  "#{base_name}-#{shortref_for_path(revision)}"
end
hash() Показать исходный код
# File lib/bundler/source/git.rb, line 50
def hash
  [self.class, uri, ref, branch, name, version, submodules].hash
end
install(spec, options = {}) Показать исходный код
# File lib/bundler/source/git.rb, line 170
def install(spec, options = {})
  force = options[:force]

  print_using_message "Using #{version_message(spec)} from #{self}"

  if (requires_checkout? && !@copied) || force
    Bundler.ui.debug "  * Checking out revision: #{ref}"
    git_proxy.copy_to(install_path, submodules)
    serialize_gemspecs_in(install_path)
    @copied = true
  end

  generate_bin_options = { :disable_extensions => !Bundler.rubygems.spec_missing_extensions?(spec), :build_args => options[:build_args] }
  generate_bin(spec, generate_bin_options)

  requires_checkout? ? spec.post_install_message : nil
end
install_path() Показать исходный код
# File lib/bundler/source/git.rb, line 91
def install_path
  @install_path ||= begin
    git_scope = "#{base_name}-#{shortref_for_path(revision)}"

    path = Bundler.install_path.join(git_scope)

    if !path.exist? && Bundler.requires_sudo?
      Bundler.user_bundle_path.join(Bundler.ruby_scope).join(git_scope)
    else
      path
    end
  end
end

Это путь, который будет содержать конкретную копию Git-репозитория. При использовании локальных Git-репозиториев, он устанавливается в локальный репозиторий.

Также является псевдонимом для: path
load_spec_files() Показать исходный код
# File lib/bundler/source/git.rb, line 199
def load_spec_files
  super
rescue PathError => e
  Bundler.ui.trace e
  raise GitError, "#{self} is not yet checked out. Run `bundle install` first."
end
Вызывает метод суперкласса
local_override!(path) Показать исходный код
# File lib/bundler/source/git.rb, line 118
def local_override!(path)
  return false if local?

  path = Pathname.new(path)
  path = path.expand_path(Bundler.root) unless path.relative?

  unless options["branch"] || Bundler.settings[:disable_local_branch_check]
    raise GitError, "Cannot use local override for #{name} at #{path} because " \
      ":branch is not specified in Gemfile. Specify a branch or use " \
      "`bundle config --delete` to remove the local override"
  end

  unless path.exist?
    raise GitError, "Cannot use local override for #{name} because #{path} " \
      "does not exist. Check `bundle config --delete` to remove the local override"
  end

  set_local!(path)

  # Create a new git proxy without the cached revision
  # so the Gemfile.lock always picks up the new revision.
  @git_proxy = GitProxy.new(path, uri, ref)

  if git_proxy.branch != options["branch"] && !Bundler.settings[:disable_local_branch_check]
    raise GitError, "Local override for #{name} at #{path} is using branch " \
      "#{git_proxy.branch} but Gemfile specifies #{options["branch"]}"
  end

  changed = cached_revision && cached_revision != git_proxy.revision

  if changed && !@unlocked && !git_proxy.contains?(cached_revision)
    raise GitError, "The Gemfile lock is pointing to revision #{shortref_for_display(cached_revision)} " \
      "but the current branch in your local override for #{name} does not contain such commit. " \
      "Please make sure your branch is up to date."
  end

  changed
end
name() Показать исходный код
# File lib/bundler/source/git.rb, line 84
def name
  File.basename(@uri, ".git")
end
path()
Псевдоним для: install_path
revision() Показать исходный код
# File lib/bundler/source/git.rb, line 224
def revision
  git_proxy.revision
end
specs(*) Показать исходный код
# File lib/bundler/source/git.rb, line 157
def specs(*)
  set_local!(app_cache_path) if has_app_cache? && !local?

  if requires_checkout? && !@copied
    fetch
    git_proxy.copy_to(install_path, submodules)
    serialize_gemspecs_in(install_path)
    @copied = true
  end

  local_specs
end
to_lock() Показать исходный код
# File lib/bundler/source/git.rb, line 39
def to_lock
  out = String.new("GIT\n")
  out << "  remote: #{@uri}\n"
  out << "  revision: #{revision}\n"
  %w[ref branch tag submodules].each do |opt|
    out << "  #{opt}: #{options[opt]}\n" if options[opt]
  end
  out << "  glob: #{@glob}\n" unless @glob == DEFAULT_GLOB
  out << "  specs:\n"
end
to_s() Показать исходный код
# File lib/bundler/source/git.rb, line 62
def to_s
  at = if local?
    path
  elsif user_ref = options["ref"]
    if ref =~ /\A[a-z0-9]{4,}\z/i
      shortref_for_display(user_ref)
    else
      user_ref
    end
  else
    ref
  end

  rev = begin
          "@#{shortref_for_display(revision)}"
        rescue GitError
          nil
        end

  "#{@safe_uri} (at #{at}#{rev})"
end
unlock!() Показать исходный код
# File lib/bundler/source/git.rb, line 111
def unlock!
  git_proxy.revision = nil
  options["revision"] = nil

  @unlocked = true
end
END_OF_DOCUMENT_MARKER

Приватные методы экземпляра

base_name() Показать исходный код
# File lib/bundler/source/git.rb, line 266
def base_name
  File.basename(uri.sub(%r{^(\w+://)?([^/:]+:)?(//\w*/)?(\w*/)*}, ""), ".git")
end
cached?() Показать исходный код
# File lib/bundler/source/git.rb, line 294
def cached?
  cache_path.exist?
end
cached_revision() Показать исходный код
# File lib/bundler/source/git.rb, line 290
def cached_revision
  options["revision"]
end
extension_cache_slug(_) Показать исходный код
# File lib/bundler/source/git.rb, line 324
def extension_cache_slug(_)
  extension_dir_name
end
fetch() Показать исходный код
# File lib/bundler/source/git.rb, line 302
def fetch
  git_proxy.checkout
rescue GitError => e
  raise unless Bundler.feature_flag.allow_offline_install?
  Bundler.ui.warn "Using cached git data because of network errors:\n#{e}"
end
git_proxy() Показать исходный код
# File lib/bundler/source/git.rb, line 298
def git_proxy
  @git_proxy ||= GitProxy.new(cache_path, uri, ref, cached_revision, self)
end
git_scope() Показать исходный код
# File lib/bundler/source/git.rb, line 320
def git_scope
  "#{base_name}-#{uri_hash}"
end
has_app_cache?() Показать исходный код
# File lib/bundler/source/git.rb, line 254
def has_app_cache?
  cached_revision && super
end
Вызов метода суперкласса
load_gemspec(file) Показать исходный код
# File lib/bundler/source/git.rb, line 313
def load_gemspec(file)
  stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
  stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s.untaint
  StubSpecification.from_stub(stub)
end
local?() Показать исходный код
# File lib/bundler/source/git.rb, line 258
def local?
  @local
end
requires_checkout?() Показать исходный код
# File lib/bundler/source/git.rb, line 262
def requires_checkout?
  allow_git_ops? && !local?
end
serialize_gemspecs_in(destination) Показать исходный код
# File lib/bundler/source/git.rb, line 234
def serialize_gemspecs_in(destination)
  destination = destination.expand_path(Bundler.root) if destination.relative?
  Dir["#{destination}/#{@glob}"].each do |spec_path|
    # Evaluate gemspecs and cache the result. Gemspecs
    # in git might require git or other dependencies.
    # The gemspecs we cache should already be evaluated.
    spec = Bundler.load_gemspec(spec_path)
    next unless spec
    Bundler.rubygems.set_installed_by_version(spec)
    Bundler.rubygems.validate(spec)
    File.open(spec_path, "wb") {|file| file.write(spec.to_ruby) }
  end
end
set_local!(path) Показать исходный код
# File lib/bundler/source/git.rb, line 248
def set_local!(path)
  @local       = true
  @local_specs = @git_proxy = nil
  @cache_path  = @install_path = path
end
shortref_for_display(ref) Показать исходный код
# File lib/bundler/source/git.rb, line 270
def shortref_for_display(ref)
  ref[0..6]
end
shortref_for_path(ref) Показать исходный код
# File lib/bundler/source/git.rb, line 274
def shortref_for_path(ref)
  ref[0..11]
end
uri_hash() Показать исходный код
# File lib/bundler/source/git.rb, line 278
def uri_hash
  if uri =~ %r{^\w+://(\w+@)?}
    # Downcase the domain component of the URI
    # and strip off a trailing slash, if one is present
    input = URI.parse(uri).normalize.to_s.sub(%r{/$}, "")
  else
    # If there is no URI scheme, assume it is an ssh/git URI
    input = uri
  end
  SharedHelpers.digest(:SHA1).hexdigest(input)
end
validate_spec(_spec) Показать исходный код
# File lib/bundler/source/git.rb, line 310
def validate_spec(_spec); end

безоперационная операция, так как валидация выполняется при повторной сериализации gemspec

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API