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