class Berkshelf::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_path

Returns:
  • (Pathname) -
def cache_path
  Pathname.new(Berkshelf.berkshelf_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 ||= CachedCookbook.from_path(install_path)
  else
    nil
  end
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?
    git(%{fetch --force --tags #{uri} "refs/heads/*:refs/heads/*"}, cwd: cache_path.to_s)
  else
    git %{clone #{uri} "#{cache_path}" --bare --no-hardlinks}
  end
  @revision ||= git(%{rev-parse #{@rev_parse}}, cwd: cache_path.to_s)
  # 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
  git(%{fetch --force --tags "#{cache_path}"}, cwd: scratch_path.to_s)
  git(%{reset --hard #{@revision}}, cwd: scratch_path.to_s)
  if rel
    git(%{filter-branch --subdirectory-filter "#{rel}" --force}, cwd: scratch_path.to_s)
  end
  # Validate the scratched path is a valid cookbook
  validate_cached!(scratch_path)
  # If we got this far, we should atomically move
  FileUtils.rm_rf(install_path) if install_path.exist?
  FileUtils.mv(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)
end

def install_path

Returns:
  • (Pathname, nil) -
def install_path
  Berkshelf.cookbook_store.storage_path
    .join("#{dependency.name}-#{revision}")
end

def installed?

Other tags:
    See: BaseLoation#installed? -
def installed?
  !!(revision && install_path.exist?)
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