module Docman::GitUtil

Public Class Methods

branch() click to toggle source
# File lib/docman/git_util.rb, line 124
def self.branch()
  exec "rev-parse --abbrev-ref HEAD", false
end
clone_repo(repo, path, type, version, single_branch = nil, depth = nil) click to toggle source
# File lib/docman/git_util.rb, line 64
def self.clone_repo(repo, path, type, version, single_branch = nil, depth = nil)
  if type == 'branch'
    single_branch = single_branch ? "-b #{version} --single-branch" : ''
    depth = (depth and depth.is_a? Integer) ? "--depth #{depth}" : ''
  else
    single_branch=''
    depth=''
  end
  if ENV.has_key? 'DOCMAN_GIT_CLONE_QUITE_STDERR' and ENV['DOCMAN_GIT_CLONE_QUITE_STDERR'] == '1'
    quite = '--quiet'
  else
    quite = ''
  end
  if ENV.has_key? 'DOCMAN_GIT_CLONE_QUITE_STDOUT' and ENV['DOCMAN_GIT_CLONE_QUITE_STDOUT'] == '1'
    stdout = '&> /dev/null'
  else
    stdout = ''
  end
  exec("clone #{quite} #{single_branch} #{depth} #{repo} #{path} #{stdout}")
end
commit(root_path, path, message, tag = nil) click to toggle source
# File lib/docman/git_util.rb, line 101
def self.commit(root_path, path, message, tag = nil)
  if repo_changed? path
    # pull root_path
    Dir.chdir root_path
    exec %Q(add --all #{path.slice "#{root_path}/"})
    if repo_changed? path
      if Application::instance.options.has_key?('debug')
        exec %Q(commit --allow-empty --no-verify -m "#{message}")
      else
        exec %Q(commit --allow-empty --quiet --no-verify -m "#{message}")
      end
    end

    self.tag(root_path, tag) if tag
    Docman::Application.instance.commit_count = Docman::Application.instance.commit_count + 1
  end
end
exec(command, show_result = true) click to toggle source
# File lib/docman/git_util.rb, line 10
def self.exec(command, show_result = true)
  @logger.info "#{@git} #{command} in #{Dir.pwd}"
  result = `#{@git} #{command}`
  #result = `#{@git} #{command}`.delete!("\n")
  @logger.info result if show_result and result
  raise "ERROR: #{result}" unless $?.exitstatus == 0
  result
end
get(repo, path, type, version, single_branch = nil, depth = nil, reset = false) click to toggle source
# File lib/docman/git_util.rb, line 40
def self.get(repo, path, type, version, single_branch = nil, depth = nil, reset = false)
  FileUtils.rm_rf path if reset and File.directory? path
  if File.directory? path and File.directory?(File.join(path, '.git'))
    Dir.chdir path
    self.reset_repo(path) #if self.repo_changed?(path)
    exec 'fetch --tags'
    if type == 'branch'
      #exec "fetch"
      exec "checkout #{version}"
      exec "pull origin #{version}"
    end
    if type == 'tag'
      exec "checkout tags/#{version}"
    end
  else
    FileUtils.rm_rf path if File.directory? path
    clone_repo(repo, path, type, version, single_branch, depth)
    Dir.chdir path
    exec "checkout #{version}"
  end
  result = type == 'branch' ? self.last_revision(path) : version
  result
end
last_commit_hash(path, branch) click to toggle source
# File lib/docman/git_util.rb, line 136
def self.last_commit_hash(path, branch)
  Dir.chdir path
  result = `git rev-parse --short origin/#{branch}`
  result.delete!("\n")
end
last_revision(path = nil, branch = 'HEAD') click to toggle source
# File lib/docman/git_util.rb, line 85
def self.last_revision(path = nil, branch = 'HEAD')
  result = nil
  if self.repo? path
    Dir.chdir path unless path.nil?
    result = `git rev-parse --short #{branch}`
    result.delete!("\n")
  end
  result
end
pull(path, options = nil) click to toggle source
# File lib/docman/git_util.rb, line 119
def self.pull(path, options = nil)
  Dir.chdir path
  exec "pull#{options}"
end
push(root_path, version, no_pull = false) click to toggle source
# File lib/docman/git_util.rb, line 142
def self.push(root_path, version, no_pull = false)
  Dir.chdir root_path
  exec "pull origin #{version}" unless no_pull
  exec "push origin #{version}"
end
repo?(path) click to toggle source
# File lib/docman/git_util.rb, line 128
def self.repo?(path)
  File.directory? File.join(path, '.git')
end
repo_changed?(path) click to toggle source
# File lib/docman/git_util.rb, line 132
def self.repo_changed?(path)
  not Exec.do "#{Application::bin}/dm_repo_clean.sh #{path}"
end
reset_repo(path) click to toggle source
# File lib/docman/git_util.rb, line 30
def self.reset_repo(path)
  Dir.chdir path
  exec 'reset --hard'
  if Application::instance.options.has_key?('debug')
    exec 'clean -f -d -x --dry-run'
    exec 'status'
  end
  exec 'clean -f -d -x'
end
squash_commits(commit_count, message = nil, tag = nil) click to toggle source
# File lib/docman/git_util.rb, line 19
def self.squash_commits(commit_count, message = nil, tag = nil)
  message = "$(git log --format=%B --reverse HEAD..HEAD@{1})" unless message
  exec "reset --soft HEAD~#{commit_count}"
  if Application::instance.options.has_key?('debug')
    exec "commit --no-verify -m \"#{message}\""
  else
    exec "commit --quiet --no-verify -m \"#{message}\""
  end
  self.tag(Dir.pwd, tag) if tag
end
tag(root_path, tag) click to toggle source
# File lib/docman/git_util.rb, line 148
def self.tag(root_path, tag)
  Dir.chdir root_path
  exec %Q(tag -a -m "Tagged to #{tag}" "#{tag}")
  exec "push origin #{tag}"
end
update(path, options) click to toggle source
# File lib/docman/git_util.rb, line 95
def self.update(path, options)
  @logger.info "Update #{path} #{options}"
  Dir.chdir path
  exec("pull #{options}")
end