add extension points for GitAccess caching

This commit is contained in:
rick
2010-10-11 18:05:02 -07:00
parent b7474b7e41
commit c6dc4acc02
+31 -17
View File
@@ -42,13 +42,13 @@ module Gollum
if sha?(ref)
ref
else
@ref_map[ref] ||= ref_to_sha!(ref)
get_cache(:ref, ref) { ref_to_sha!(ref) }
end
end
def tree(ref)
sha = ref_to_sha(ref)
@tree_map[sha] ||= tree!(sha)
get_cache(:tree, sha) { tree!(sha) }
end
def blob(sha)
@@ -57,21 +57,21 @@ module Gollum
def commit(ref)
if sha?(ref)
@commit_map[ref] ||= commit!(ref)
get_cache(:commit, ref) { commit!(ref) }
else
if sha = @ref_map[ref]
if sha = get_cache(:ref, ref)
commit(sha)
else
cm = commit!(ref)
@ref_map[ref] = cm.id
@commit_map[cm.id] = cm
set_cache(:ref, ref, cm.id)
set_cache(:commit, cm.id, cm)
end
end
end
def commits(*shas)
shas.flatten!
cached_commits = multi_get(:commit_map, shas)
cached_commits = multi_get(:commit, shas)
missing_shas = shas.select do |sha|
!cached_commits.key?(sha)
end
@@ -85,16 +85,6 @@ module Gollum
shas.map { |sha| cached_commits[sha] }
end
def multi_get(name, keys)
value = instance_variable_get("@#{name}")
keys.inject({}) do |memo, key|
if v = value[key]
memo[key] = v
end
memo
end
end
def sha?(str)
str =~ /^[0-9a-f]{40}$/
end
@@ -119,6 +109,30 @@ module Gollum
@repo.commit(sha)
end
def get_cache(name, key)
cache = instance_variable_get("@#{name}_map")
value = cache[key]
if value.nil? && block_given?
set_cache(name, key, value = yield)
end
value
end
def set_cache(name, key, value)
cache = instance_variable_get("@#{name}_map")
cache[key] = value
end
def multi_get(name, keys)
value = instance_variable_get("@#{name}_map")
keys.inject({}) do |memo, key|
if v = value[key]
memo[key] = v
end
memo
end
end
# Parses a line of output from the `ls-tree` command.
#
# line - A String line of output: