class SocialSnippet::Repository::Drivers::GitDriver

Attributes

rugged_repo[R]

Public Class Methods

is_git_uri(uri) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 83
def is_git_uri(uri)
  /git|https?/ === uri.scheme
end
target_path?(path) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 87
def target_path?(path)
  ::File.directory?(path) && ::File.directory?(::File.join path, ".git")
end
target_url?(url) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 78
def target_url?(url)
  uri = ::URI.parse(url)
  is_git_uri(uri)
end

Public Instance Methods

current_ref() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 45
def current_ref
  rugged_repo.head.name.gsub /^refs\/heads\//, ""
end
each_directory(ref) { |entry(join_path(parent, tree))| ... } click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 25
def each_directory(ref, &block)
  rugged_ref(ref).target.tree.walk_trees do |parent, tree|
    yield ::SocialSnippet::Repository::Drivers::Entry.new(join_path(parent, tree[:name]))
  end
end
each_file(ref) { |entry(join_path(parent, item), read_file(item))| ... } click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 31
def each_file(ref, &block)
  rugged_ref(ref).target.tree.walk_blobs do |parent, item|
    yield ::SocialSnippet::Repository::Drivers::Entry.new(join_path(parent, item[:name]), read_file(item[:oid]))
  end
end
fetch() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 7
def fetch
  dest_dir = ::Dir.mktmpdir
  @rugged_repo = ::Rugged::Repository.clone_at(url, dest_dir)
end
join_path(a, b) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 37
def join_path(a, b)
  if a.empty?
    b
  else
    ::File.join a, b
  end
end
read_file(oid) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 21
def read_file(oid)
  rugged_repo.lookup(oid).read_raw.data
end
read_snippet_json() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 16
def read_snippet_json
  oid = rugged_repo.head.target.tree["snippet.json"][:oid]
  @snippet_json ||= ::JSON.parse rugged_repo.lookup(oid).read_raw.data
end
refs() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 57
def refs
  all_refs = []
  all_refs.concat remote_refs
  all_refs.concat tags
  all_refs
end
remote_refs() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 64
def remote_refs
  rugged_repo.references.each("refs/remotes/origin/**/*").map do |r|
    r.name.match(/^refs\/remotes\/origin\/(.*)/)[1]
  end
end
rev_hash(ref) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 53
def rev_hash(ref)
  rugged_ref(ref).target_id
end
rugged_ref(ref_name) click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 49
def rugged_ref(ref_name)
  rugged_repo.references.each("refs/*/#{ref_name}").first
end
snippet_json() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 12
def snippet_json
  @snippet_json ||= read_snippet_json
end
tags() click to toggle source
# File lib/social_snippet/repository/drivers/git_driver.rb, line 70
def tags
  rugged_repo.references.each("refs/tags/**/*").map do |r|
    r.name.match(/^refs\/tags\/(.*)/)[1]
  end
end