class CookbookOmnifetch::GitLocation

def ==(other)

def ==(other)
  other.is_a?(GitLocation) &&
    other.uri == uri &&
    other.branch == branch &&
    other.tag == tag &&
    other.shortref == shortref &&
    other.rel == rel
end

def cache_key

def cache_key
  "#{dependency.name}-#{revision}"
end

def cache_path

Returns:
  • (Pathname) -
def cache_path
  Pathname.new(CookbookOmnifetch.cache_path)
    .join(".cache", "git", Digest::SHA1.hexdigest(uri))
end

def cached?

Returns:
  • (Boolean) -
def cached?
  cache_path.exist?
end

def cached_cookbook

Other tags:
    See: BaseLocation#cached_cookbook -
def cached_cookbook
  if installed?
    @cached_cookbook ||= CookbookOmnifetch.cached_cookbook_class.from_path(install_path)
  else
    nil
  end
end

def git(command, error = true)

Raises:
  • (String) -

Parameters:
  • error (Boolean) --
  • command (String) --
def git(command, error = true)
  unless CookbookOmnifetch.which("git") || CookbookOmnifetch.which("git.exe") || CookbookOmnifetch.which("git.bat")
    raise GitNotInstalled.new
  end
  response = CookbookOmnifetch.shell_out_class.shell_out(%{git #{command}})
  if error && !response.success?
    raise GitCommandError.new(command, cache_path, response.stderr)
  end
  response.stdout.strip
end

def initialize(dependency, options = {})

def initialize(dependency, options = {})
  super
  @uri      = options[:git]
  @branch   = options[:branch]
  @tag      = options[:tag]
  @ref      = options[:ref]
  @revision = options[:revision]
  @rel      = options[:rel]
  # The revision to parse
  @rev_parse = options[:ref] || options[:branch] || options[:tag] || "master"
end

def install

Other tags:
    See: BaseLocation#install -
def install
  scratch_path = Pathname.new(Dir.mktmpdir)
  if cached?
    Dir.chdir(cache_path) do
      git %{fetch --force --tags #{uri} "refs/heads/*:refs/heads/*"}
    end
  else
    git %{clone #{uri} "#{cache_path}" --bare --no-hardlinks}
  end
  Dir.chdir(cache_path) do
    @revision ||= git %{rev-parse #{@rev_parse}}
  end
  # Clone into a scratch directory for validations
  git %{clone --no-checkout "#{cache_path}" "#{scratch_path}"}
  # Make sure the scratch directory is up-to-date and account for rel paths
  Dir.chdir(scratch_path) do
    git %{fetch --force --tags "#{cache_path}"}
    git %{reset --hard #{@revision}}
    if rel
      git %{filter-branch --subdirectory-filter "#{rel}" --force}
    end
  end
  # Validate the scratched path is a valid cookbook
  validate_cached!(scratch_path)
  # If we got this far, we should copy
  FileUtils.rm_rf(install_path) if install_path.exist?
  FileUtils.cp_r(scratch_path, install_path)
  # Remove the git history
  FileUtils.rm_rf(File.join(install_path, ".git"))
  install_path.chmod(0777 & ~File.umask)
ensure
  # Ensure the scratch directory is cleaned up
  FileUtils.rm_rf(scratch_path) if scratch_path
end

def install_path

Returns:
  • (Pathname, nil) -
def install_path
  CookbookOmnifetch.storage_path
    .join(cache_key)
end

def installed?

Other tags:
    See: BaseLoation#installed? -
def installed?
  (!!revision) && install_path.exist?
end

def lock_data

def lock_data
  out = {}
  out["git"] = uri
  out["revision"] = revision
  out["ref"] = shortref if shortref
  out["branch"] = branch if branch
  out["tag"] = tag if tag
  out["rel"] = rel if rel
  out
end

def shortref

Returns:
  • (String, nil) -
def shortref
  ref && ref[0...7]
end

def to_lock

def to_lock
  out =  "    git: #{uri}\n"
  out << "    revision: #{revision}\n"
  out << "    ref: #{shortref}\n"  if shortref
  out << "    branch: #{branch}\n" if branch
  out << "    tag: #{tag}\n"       if tag
  out << "    rel: #{rel}\n"       if rel
  out
end

def to_s

def to_s
  info = tag || branch || shortref || @rev_parse
  if rel
    "#{uri} (at #{info}/#{rel})"
  else
    "#{uri} (at #{info})"
  end
end