class OctocatalogDiff::CatalogUtil::Git

Class to perform a git checkout (via 'git archive') of a branch from the base git directory into another targeted directory.

Public Class Methods

branch_sha(options = {}) click to toggle source

Determine the SHA of origin/master (or any other branch really) in the git repo @param options [Hash] Options hash:

- :branch => Branch name to determine SHA of
- :basedir => Where to check out from (must exist as a directory)
# File lib/octocatalog-diff/catalog-util/git.rb, line 61
def self.branch_sha(options = {})
  branch = options.fetch(:branch)
  dir = options.fetch(:basedir)
  if dir.nil? || !File.directory?(dir)
    raise Errno::ENOENT, "Git directory #{dir.inspect} does not exist"
  end
  repo = Rugged::Repository.new(dir)
  repo.branches[branch].target_id
end
check_out_git_archive(options = {}) click to toggle source

Check out a branch via 'git archive' from one directory into another. @param options [Hash] Options hash:

- :branch => Branch name to check out
- :path => Where to check out to (must exist as a directory)
- :basedir => Where to check out from (must exist as a directory)
- :logger => Logger object
# File lib/octocatalog-diff/catalog-util/git.rb, line 19
def self.check_out_git_archive(options = {})
  branch = options.fetch(:branch)
  path = options.fetch(:path)
  dir = options.fetch(:basedir)
  logger = options.fetch(:logger)
  override_script_path = options.fetch(:override_script_path, nil)

  # Validate parameters
  if dir.nil? || !File.directory?(dir)
    raise OctocatalogDiff::Errors::GitCheckoutError, "Source directory #{dir.inspect} does not exist"
  end
  if path.nil? || !File.directory?(path)
    raise OctocatalogDiff::Errors::GitCheckoutError, "Target directory #{path.inspect} does not exist"
  end

  # Create and execute checkout script
  sr_opts = {
    logger: logger,
    default_script: 'git-extract/git-extract.sh',
    override_script_path: override_script_path
  }
  script = OctocatalogDiff::Util::ScriptRunner.new(sr_opts)

  sr_run_opts = {
    :working_dir             => dir,
    :pass_env_vars           => options[:pass_env_vars],
    'OCD_GIT_EXTRACT_BRANCH' => branch,
    'OCD_GIT_EXTRACT_TARGET' => path
  }

  begin
    script.run(sr_run_opts)
    logger.debug("Success git archive #{dir}:#{branch}")
  rescue OctocatalogDiff::Util::ScriptRunner::ScriptException
    raise OctocatalogDiff::Errors::GitCheckoutError, "Git archive #{branch}->#{path} failed: #{script.output}"
  end
end