module Pkg::Util::Git

Utility methods for handling git

Public Class Methods

branch_name() click to toggle source

Return the name of the current branch

# File lib/packaging/util/git.rb, line 131
def branch_name
  Pkg::Util.in_project_root do
    stdout, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} rev-parse --abbrev-ref HEAD")
    stdout.strip
  end
end
bundle(treeish, appendix = Pkg::Util.rand_string, temp = Pkg::Util::File.mktemp) click to toggle source

Git utility to create a new git bundle

# File lib/packaging/util/git.rb, line 25
def bundle(treeish, appendix = Pkg::Util.rand_string, temp = Pkg::Util::File.mktemp)
  fail_unless_repo
  Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} bundle create #{temp}/#{Pkg::Config.project}-#{Pkg::Config.version}-#{appendix} #{treeish} --tags")
  Dir.chdir(temp) do
    Pkg::Util::Execution.capture3("#{Pkg::Util::Tool.find_tool('tar')} -czf #{Pkg::Config.project}-#{Pkg::Config.version}-#{appendix}.tar.gz #{Pkg::Config.project}-#{Pkg::Config.version}-#{appendix}")
    FileUtils.rm_rf("#{Pkg::Config.project}-#{Pkg::Config.version}-#{appendix}")
  end
  "#{temp}/#{Pkg::Config.project}-#{Pkg::Config.version}-#{appendix}.tar.gz"
end
checkout(ref) click to toggle source

Checks out a specified ref. The ref must exist in the current repo. This also removes any uncommitted changes

# File lib/packaging/util/git.rb, line 58
def checkout(ref)
  Pkg::Util.in_project_root do
    _, _, ret = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} reset --hard ; #{Pkg::Util::Tool::GIT} checkout #{ref}")
    Pkg::Util::Execution.success?(ret) || raise("Could not checkout #{ref} git branch to build package from...exiting")
  end
end
commit_file(file, message = 'changes') click to toggle source

Git utility to create a new git commit

# File lib/packaging/util/git.rb, line 7
def commit_file(file, message = 'changes')
  fail_unless_repo
  puts 'Committing changes:'
  puts
  diff, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} diff HEAD #{file}")
  puts diff
  stdout, = Pkg::Util::Execution.capture3(%(#{Pkg::Util::Tool::GIT} commit #{file} -m "Commit #{message} in #{file}" &> #{Pkg::Util::OS::DEVNULL}))
  stdout
end
describe(extra_opts = ['--tags', '--dirty']) click to toggle source

Returns the value of ‘git describe`. If this is not a git repo or `git describe` fails because there is no tag, this will return false

# File lib/packaging/util/git.rb, line 67
def describe(extra_opts = ['--tags', '--dirty'])
  Pkg::Util.in_project_root do
    stdout, _, ret = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} describe #{Array(extra_opts).join(' ')}")
    if Pkg::Util::Execution.success?(ret)
      stdout.strip
    else
      false
    end
  end
end
fail_on_dirty_source() click to toggle source
# File lib/packaging/util/git.rb, line 142
def fail_on_dirty_source
  if source_dirty?
    raise "The source tree is dirty, e.g. there are uncommited changes. \
     Please commit/discard changes and try again."
  end
end
fail_unless_repo() click to toggle source
# File lib/packaging/util/git.rb, line 115
    def fail_unless_repo
      unless repo?
        raise "Pkg::Config.project_root (#{Pkg::Config.project_root}) is not \
          a valid git repository"
      end
end
git_bundle(treeish, appendix = Pkg::Util.rand_string, temp = Pkg::Util::File.mktemp) click to toggle source
# File lib/packaging/util/git.rb, line 162
def git_bundle(treeish, appendix = Pkg::Util.rand_string, temp = Pkg::Util::File.mktemp)
  Pkg::Util.deprecate('Pkg::Util::Git.git_bundle', 'Pkg::Util::Git.bundle')
  Pkg::Util::Git.bundle(treeish, appendix, temp)
end
git_commit_file(file, message = "changes") click to toggle source

DEPRECATED METHODS

# File lib/packaging/util/git.rb, line 152
def git_commit_file(file, message = "changes")
  Pkg::Util.deprecate('Pkg::Util::Git.git_commit_file', 'Pkg::Util::Git.commit_file')
  Pkg::Util::Git.commit_file(file, message)
end
git_pull(remote, branch) click to toggle source
# File lib/packaging/util/git.rb, line 167
def git_pull(remote, branch)
  Pkg::Util.deprecate('Pkg::Util::Git.git_pull', 'Pkg::Util::Git.pull')
  Pkg::Util::Git.pull(remote, branch)
end
git_tag(version) click to toggle source
# File lib/packaging/util/git.rb, line 157
def git_tag(version)
  Pkg::Util.deprecate('Pkg::Util::Git.git_tag', 'Pkg::Util::Git.tag')
  Pkg::Util::Git.tag(version)
end
project_name() click to toggle source

Return the basename of the project repo

# File lib/packaging/util/git.rb, line 123
def project_name
  Pkg::Util.in_project_root do
    stdout, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} config --get remote.origin.url")
    stdout.split('/')[-1].chomp('.git').chomp
  end
end
pull(remote, branch) click to toggle source
# File lib/packaging/util/git.rb, line 35
def pull(remote, branch)
  fail_unless_repo
  stdout, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} pull #{remote} #{branch}")
  stdout
end
ref_type() click to toggle source

Return the ref type of HEAD on the current branch

# File lib/packaging/util/git.rb, line 91
def ref_type
  Pkg::Util.in_project_root do
    stdout, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} cat-file -t #{describe('')}")
    stdout.strip
  end
end
remote_tagged?(url, ref) click to toggle source

Reports if a ref and its corresponding git repo points to a git tag.

@param url [string] url of repo grabbed from json file @param ref [string] ref grabbed from json file

# File lib/packaging/util/git.rb, line 51
def remote_tagged?(url, ref)
  reference = Pkg::Util::Git_tag.new(url, ref)
  reference.tag?
end
repo?() click to toggle source

Return true if we’re in a git repo, otherwise false

# File lib/packaging/util/git.rb, line 108
def repo?
  Pkg::Util.in_project_root do
    _, _, ret = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} rev-parse --git-dir")
    Pkg::Util::Execution.success?(ret)
  end
end
sha(length = 40) click to toggle source

return the sha of HEAD on the current branch You can specify the length you want from the sha. Default is 40, the length for sha1. If you specify anything higher, it will still return 40 characters. Ideally, you’re not going to specify anything under 7 characters, but I’ll leave that discretion up to you.

# File lib/packaging/util/git.rb, line 83
def sha(length = 40)
  Pkg::Util.in_project_root do
    stdout, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} rev-parse --short=#{length} HEAD")
    stdout.strip
  end
end
sha_or_tag(length = 40) click to toggle source

If HEAD is a tag, return the tag. Otherwise return the sha of HEAD.

# File lib/packaging/util/git.rb, line 99
def sha_or_tag(length = 40)
  if ref_type == 'tag'
    describe
  else
    sha(length)
  end
end
source_dirty?() click to toggle source
# File lib/packaging/util/git.rb, line 138
def source_dirty?
  describe.include?('dirty')
end
tag(version) click to toggle source

Git utility to create a new git tag

# File lib/packaging/util/git.rb, line 18
def tag(version)
  fail_unless_repo
  stdout, = Pkg::Util::Execution.capture3("#{Pkg::Util::Tool::GIT} tag -s -u #{Pkg::Util::Gpg.key} -m '#{version}' #{version}")
  stdout
end
tagged?() click to toggle source

Check if we are currently working on a tagged commit.

# File lib/packaging/util/git.rb, line 42
def tagged?
  ref_type == 'tag'
end