Module: PDK::Util::Git
- Defined in:
- lib/pdk/util/git.rb
Class Method Summary collapse
- .bare_repo?(maybe_repo) ⇒ Boolean
- .describe(path, ref = nil) ⇒ Object
- .git(*args) ⇒ Object
- .git_bin ⇒ Object
- .git_bindir ⇒ Object
- .git_paths ⇒ Object
- .git_with_env(env, *args) ⇒ Object
- .ls_remote(repo, ref) ⇒ Object
- .remote_repo?(maybe_repo) ⇒ Boolean
- .repo?(maybe_repo) ⇒ Boolean
- .work_dir_clean?(repo) ⇒ Boolean
- .work_tree?(path) ⇒ Boolean
Class Method Details
.bare_repo?(maybe_repo) ⇒ Boolean
71 72 73 74 75 76 |
# File 'lib/pdk/util/git.rb', line 71 def self.(maybe_repo) env = { 'GIT_DIR' => maybe_repo } rev_parse = git_with_env(env, 'rev-parse', '--is-bare-repository') rev_parse[:exit_code].zero? && rev_parse[:stdout].strip == 'true' end |
.describe(path, ref = nil) ⇒ Object
119 120 121 122 123 124 |
# File 'lib/pdk/util/git.rb', line 119 def self.describe(path, ref = nil) args = ['--git-dir', path, 'describe', '--all', '--long', '--always', ref].compact result = git(*args) raise PDK::Util::GitError, args, result unless result[:exit_code].zero? result[:stdout].strip end |
.git(*args) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/pdk/util/git.rb', line 49 def self.git(*args) require 'pdk/cli/exec' PDK::CLI::Exec.ensure_bin_present!(git_bin, 'git') PDK::CLI::Exec.execute(git_bin, *args) end |
.git_bin ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/pdk/util/git.rb', line 40 def self.git_bin require 'pdk/cli/exec' git_bin = Gem.win_platform? ? 'git.exe' : 'git' vendored_bin_path = File.join(git_bindir, git_bin) PDK::CLI::Exec.try_vendored_bin(vendored_bin_path, git_bin) end |
.git_bindir ⇒ Object
22 23 24 |
# File 'lib/pdk/util/git.rb', line 22 def self.git_bindir @git_dir ||= File.join('private', 'git', Gem.win_platform? ? 'cmd' : 'bin') end |
.git_paths ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/pdk/util/git.rb', line 26 def self.git_paths @paths ||= begin paths = [File.join(PDK::Util.pdk_package_basedir, git_bindir)] if Gem.win_platform? paths << File.join(PDK::Util.pdk_package_basedir, 'private', 'git', 'mingw64', 'bin') paths << File.join(PDK::Util.pdk_package_basedir, 'private', 'git', 'mingw64', 'libexec', 'git-core') paths << File.join(PDK::Util.pdk_package_basedir, 'private', 'git', 'usr', 'bin') end paths end end |
.git_with_env(env, *args) ⇒ Object
57 58 59 60 61 62 63 |
# File 'lib/pdk/util/git.rb', line 57 def self.git_with_env(env, *args) require 'pdk/cli/exec' PDK::CLI::Exec.ensure_bin_present!(git_bin, 'git') PDK::CLI::Exec.execute_with_env(env, git_bin, *args) end |
.ls_remote(repo, ref) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/pdk/util/git.rb', line 98 def self.ls_remote(repo, ref) if File.directory?(repo) repo = 'file://' + repo end output = git('ls-remote', '--refs', repo, ref) unless output[:exit_code].zero? PDK.logger.error output[:stdout] PDK.logger.error output[:stderr] raise PDK::CLI::ExitWithError, _('Unable to access the template repository "%{repository}"') % { repository: repo, } end matching_refs = output[:stdout].split(%r{\r?\n}).map { |r| r.split("\t") } matching_ref = matching_refs.find { |_sha, remote_ref| remote_ref == "refs/tags/#{ref}" || remote_ref == "refs/remotes/origin/#{ref}" || remote_ref == "refs/heads/#{ref}" } raise PDK::CLI::ExitWithError, _('Unable to find a branch or tag named "%{ref}" in %{repo}') % { ref: ref, repo: repo } if matching_ref.nil? matching_ref.first end |
.remote_repo?(maybe_repo) ⇒ Boolean
78 79 80 |
# File 'lib/pdk/util/git.rb', line 78 def self.remote_repo?(maybe_repo) git('ls-remote', '--exit-code', maybe_repo)[:exit_code].zero? end |
.repo?(maybe_repo) ⇒ Boolean
65 66 67 68 69 |
# File 'lib/pdk/util/git.rb', line 65 def self.repo?(maybe_repo) return (maybe_repo) if File.directory?(maybe_repo) remote_repo?(maybe_repo) end |
.work_dir_clean?(repo) ⇒ Boolean
91 92 93 94 95 96 |
# File 'lib/pdk/util/git.rb', line 91 def self.work_dir_clean?(repo) raise PDK::CLI::ExitWithError, _('Unable to locate git work dir "%{workdir}"') % { workdir: repo } unless File.directory?(repo) raise PDK::CLI::ExitWithError, _('Unable to locate git dir "%{gitdir}"') % { gitdir: repo } unless File.directory?(File.join(repo, '.git')) git('--work-tree', repo, '--git-dir', File.join(repo, '.git'), 'status', '--untracked-files=no', '--porcelain', repo)[:stdout].empty? end |
.work_tree?(path) ⇒ Boolean
82 83 84 85 86 87 88 89 |
# File 'lib/pdk/util/git.rb', line 82 def self.work_tree?(path) return false unless File.directory?(path) Dir.chdir(path) do rev_parse = git('rev-parse', '--is-inside-work-tree') rev_parse[:exit_code].zero? && rev_parse[:stdout].strip == 'true' end end |