Class: Bundler::Source::Git::GitProxy
- Inherits:
-
Object
- Object
- Bundler::Source::Git::GitProxy
- Defined in:
- lib/bundler/source/git/git_proxy.rb
Overview
The GitProxy is responsible to interact with git repositories. All actions required by the Git source is encapsulated in this object.
Instance Attribute Summary collapse
-
#branch ⇒ Object
Returns the value of attribute branch.
-
#explicit_ref ⇒ Object
Returns the value of attribute explicit_ref.
-
#path ⇒ Object
Returns the value of attribute path.
-
#ref ⇒ Object
Returns the value of attribute ref.
- #revision ⇒ Object
-
#tag ⇒ Object
Returns the value of attribute tag.
-
#uri ⇒ Object
Returns the value of attribute uri.
Class Method Summary collapse
Instance Method Summary collapse
- #checkout ⇒ Object
- #contains?(commit) ⇒ Boolean
- #copy_to(destination, submodules = false) ⇒ Object
- #current_branch ⇒ Object
- #full_version ⇒ Object
-
#initialize(path, uri, options = {}, revision = nil, git = nil) ⇒ GitProxy
constructor
A new instance of GitProxy.
- #installed_to?(destination) ⇒ Boolean
- #version ⇒ Object
Constructor Details
#initialize(path, uri, options = {}, revision = nil, git = nil) ⇒ GitProxy
Returns a new instance of GitProxy.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/bundler/source/git/git_proxy.rb', line 83 def initialize(path, uri, = {}, revision = nil, git = nil) @path = path @uri = uri @tag = ["tag"] @branch = ["branch"] @ref = ["ref"] if @tag raise AmbiguousGitReference.new() if @branch || @ref @explicit_ref = @tag else @explicit_ref = @ref || @branch end @revision = revision @git = git @commit_ref = nil end |
Instance Attribute Details
#branch ⇒ Object
Returns the value of attribute branch.
57 58 59 |
# File 'lib/bundler/source/git/git_proxy.rb', line 57 def branch @branch end |
#explicit_ref ⇒ Object
Returns the value of attribute explicit_ref.
57 58 59 |
# File 'lib/bundler/source/git/git_proxy.rb', line 57 def explicit_ref @explicit_ref end |
#path ⇒ Object
Returns the value of attribute path.
57 58 59 |
# File 'lib/bundler/source/git/git_proxy.rb', line 57 def path @path end |
#ref ⇒ Object
Returns the value of attribute ref.
57 58 59 |
# File 'lib/bundler/source/git/git_proxy.rb', line 57 def ref @ref end |
#revision ⇒ Object
100 101 102 |
# File 'lib/bundler/source/git/git_proxy.rb', line 100 def revision @revision ||= allowed_with_path { find_local_revision } end |
#tag ⇒ Object
Returns the value of attribute tag.
57 58 59 |
# File 'lib/bundler/source/git/git_proxy.rb', line 57 def tag @tag end |
#uri ⇒ Object
Returns the value of attribute uri.
57 58 59 |
# File 'lib/bundler/source/git/git_proxy.rb', line 57 def uri @uri end |
Class Method Details
.full_version ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/bundler/source/git/git_proxy.rb', line 64 def self.full_version @full_version ||= begin raise GitNotInstalledError.new unless Bundler.git_present? require "open3" out, err, status = Open3.capture3("git", "--version") raise GitCommandError.new("--version", SharedHelpers.pwd, err) unless status.success? Bundler.ui.warn err unless err.empty? out.sub(/git version\s*/, "").strip end end |
.reset ⇒ Object
78 79 80 81 |
# File 'lib/bundler/source/git/git_proxy.rb', line 78 def self.reset @version = nil @full_version = nil end |
.version ⇒ Object
60 61 62 |
# File 'lib/bundler/source/git/git_proxy.rb', line 60 def self.version @version ||= full_version[/((\.?\d+)+).*/, 1] end |
Instance Method Details
#checkout ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/bundler/source/git/git_proxy.rb', line 125 def checkout return if has_revision_cached? Bundler.ui.info "Fetching #{credential_filtered_uri}" extra_fetch_needed = clone_needs_extra_fetch? unshallow_needed = clone_needs_unshallow? return unless extra_fetch_needed || unshallow_needed git_remote_fetch(unshallow_needed ? ["--unshallow"] : depth_args) end |
#contains?(commit) ⇒ Boolean
110 111 112 113 114 115 |
# File 'lib/bundler/source/git/git_proxy.rb', line 110 def contains?(commit) allowed_with_path do result, status = git_null("branch", "--contains", commit, dir: path) status.success? && result.match?(/^\* (.*)$/) end end |
#copy_to(destination, submodules = false) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/bundler/source/git/git_proxy.rb', line 137 def copy_to(destination, submodules = false) unless File.exist?(destination.join(".git")) begin SharedHelpers.filesystem_access(destination.dirname) do |p| FileUtils.mkdir_p(p) end SharedHelpers.filesystem_access(destination) do |p| FileUtils.rm_rf(p) end git "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s File.chmod((File.stat(destination).mode | 0o777) & ~File.umask, destination) rescue Errno::EEXIST => e file_path = e.[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1] raise GitError, "Bundler could not install a gem because it needs to " \ "create a directory, but a file exists - #{file_path}. Please delete " \ "this file and try again." end end ref = @commit_ref || (locked_to_full_sha? && @revision) if ref git "config", "uploadpack.allowAnySHA1InWant", "true", dir: path.to_s if @commit_ref.nil? && needs_allow_any_sha1_in_want? git "fetch", "--force", "--quiet", *extra_fetch_args(ref), dir: destination end git "reset", "--hard", revision, dir: destination if submodules git_retry "submodule", "update", "--init", "--recursive", dir: destination elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0") inner_command = "git -C $toplevel submodule deinit --force $sm_path" git_retry "submodule", "foreach", "--quiet", inner_command, dir: destination end end |
#current_branch ⇒ Object
104 105 106 107 108 |
# File 'lib/bundler/source/git/git_proxy.rb', line 104 def current_branch @current_branch ||= with_path do git_local("rev-parse", "--abbrev-ref", "HEAD", dir: path).strip end end |
#full_version ⇒ Object
121 122 123 |
# File 'lib/bundler/source/git/git_proxy.rb', line 121 def full_version self.class.full_version end |
#installed_to?(destination) ⇒ Boolean
173 174 175 176 177 |
# File 'lib/bundler/source/git/git_proxy.rb', line 173 def installed_to?(destination) # if copy_to is interrupted, it may leave a partially installed directory that # contains .git but no other files -- consider this not to be installed Dir.exist?(destination) && (Dir.children(destination) - [".git"]).any? end |
#version ⇒ Object
117 118 119 |
# File 'lib/bundler/source/git/git_proxy.rb', line 117 def version self.class.version end |