From 300d8eacc57ed002a9beaf451550c2097ad4020b Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 16:15:18 -0700 Subject: [PATCH] optimize Gollum::Wiki#tree_list --- lib/gollum/file.rb | 2 +- lib/gollum/git_access.rb | 15 +++++++++------ lib/gollum/page.rb | 7 ++++--- lib/gollum/wiki.rb | 6 ++++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/gollum/file.rb b/lib/gollum/file.rb index 295a5e52..acea37a6 100644 --- a/lib/gollum/file.rb +++ b/lib/gollum/file.rb @@ -56,7 +56,7 @@ module Gollum if entry = map.detect { |entry| entry.path.downcase == checked } @path = name @blob = entry.blob(@wiki.repo) - @version = @wiki.commit_for(version) + @version = version.is_a?(Grit::Commit) ? version : @wiki.commit_for(version) self end end diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 9f259bee..5fadef6f 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -56,13 +56,16 @@ module Gollum end def commit(ref) - ref_is_sha = sha?(ref) - if sha = (!ref_is_sha && @ref_map[ref]) - @commit_map[sha] ||= commit!(sha) + if sha?(ref) + @commit_map[ref] ||= commit!(ref) else - cm = commit!(ref) - @ref_map[ref] = cm.id if !ref_is_sha - @commit_map[cm.id] = cm + if sha = @ref_map[ref] + commit(sha) + else + cm = commit!(ref) + @ref_map[ref] = cm.id + @commit_map[cm.id] = cm + end end end diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 21a9cbb4..32bdd6ae 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -270,10 +270,11 @@ module Gollum # # Returns a Gollum::Page or nil if the page could not be found. def find(name, version) - map = @wiki.tree_map_for(version) + map = @wiki.tree_map_for(version.to_s) if page = find_page_in_tree(map, name) - page.version = @wiki.commit_for(version) - page.historical = page.version.id == version + page.version = version.is_a?(Grit::Commit) ? + version : @wiki.commit_for(version) + page.historical = page.version.to_s == version.to_s page end rescue Grit::GitRuby::Repository::NoSuchShaFound diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 9b13d6a6..c8a4ee2c 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -350,9 +350,11 @@ module Gollum # # Returns a flat Array of Gollum::Page instances. def tree_list(ref) - tree_map_for(ref).inject([]) do |list, entry| + sha = @access.ref_to_sha(ref) + commit = @access.commit(sha) + tree_map_for(sha).inject([]) do |list, entry| next list unless @page_class.valid_page_name?(entry.name) - list << entry.page(self, @access.commit(ref)) + list << entry.page(self, commit) end end