Page#find_page_in_this_tree is redundant

This commit is contained in:
rick
2010-08-30 16:57:55 -07:00
parent 0500c7e10c
commit 6f077702e1
2 changed files with 34 additions and 38 deletions
+15 -38
View File
@@ -176,13 +176,13 @@ module Gollum
dirs.pop dirs.pop
map = @wiki.tree_map_for(self.version.id) map = @wiki.tree_map_for(self.version.id)
while !dirs.empty? while !dirs.empty?
if page = find_page_in_this_tree(map, dirs.join('/'), '_Footer') if page = find_page_in_tree(map, '_Footer', dirs.join('/'))
return page return page
end end
dirs.pop dirs.pop
end end
find_page_in_this_tree(map, '', '_Footer') find_page_in_tree(map, '_Footer', '')
end end
######################################################################### #########################################################################
@@ -254,51 +254,28 @@ module Gollum
end end
rescue Grit::GitRuby::Repository::NoSuchShaFound rescue Grit::GitRuby::Repository::NoSuchShaFound
end end
# Find a page in a given tree. # Find a page in a given tree.
# #
# map - The Array tree map from Wiki#tree_map. # map - The Array tree map from Wiki#tree_map.
# name - The canonical String page name. # name - The canonical String page name.
# checked_dir - Optional String of the directory a matching page needs
# to be in. The string should
# #
# Returns a Gollum::Page or nil if the page could not be found. # Returns a Gollum::Page or nil if the page could not be found.
def find_page_in_tree(map, name) def find_page_in_tree(map, name, checked_dir = nil)
map.each do |(tree_name, blob_sha)| if checked_dir = Wiki.normalize_directory(checked_dir)
blob_name = ::File.basename(tree_name) checked_dir.downcase!
if page_match(name, blob_name)
dir = ::File.dirname(tree_name)
blob = Grit::Blob.create(@wiki.repo, :id => blob_sha, :name => blob_name)
dir.sub! /(^\/)|(^\.$)/, ''
dir = "/#{dir}" if !dir.empty?
return self.class.new(@wiki).populate(blob, dir)
end
end end
return nil # nothing was found
end
# Find a page in a given tree without recursing into subtrees.
#
# map - The Array tree map from Wiki#tree_map.
# dir - The String path of the given Grit::Tree.
# name - The canonical String page name.
#
# Returns a Gollum::Page or nil if the page could not be found.
def find_page_in_this_tree(map, dir, name)
checked = dir.downcase
map.each do |(full_name, blob_sha)| map.each do |(full_name, blob_sha)|
dir_name = ::File.dirname(full_name)
if dir_name == '.'
dir_name = ''
else
dir_name.downcase!
end
blob_name = ::File.basename(full_name) blob_name = ::File.basename(full_name)
dir = Wiki.normalize_directory(::File.dirname(full_name))
if checked == dir_name && page_match(name, blob_name) blob_in_dir = checked_dir.nil? || dir.downcase == checked_dir
path = dir == '' ? '' : ::File.join('/', dir)
if blob_in_dir && page_match(name, blob_name)
blob = Grit::Blob.create(@wiki.repo, :id => blob_sha, :name => blob_name) blob = Grit::Blob.create(@wiki.repo, :id => blob_sha, :name => blob_name)
page = self.class.new(@wiki).populate(blob, path) return self.class.new(@wiki).populate(blob, dir)
page.version = self.version
return page
end end
end end
+19
View File
@@ -431,6 +431,25 @@ module Gollum
def clear_cache def clear_cache
@ref_map = {} @ref_map = {}
@tree_map = {} @tree_map = {}
end # Normalizes a given directory name for searching through tree paths.
# Ensures that a directory begins with a slash, or
#
# normalize_directory("") # => ""
# normalize_directory(".") # => ""
# normalize_directory("foo") # => "/foo"
# normalize_directory("/foo/") # => "/foo"
# normalize_directory("/") # => ""
#
# dir - String directory name.
#
# Returns a normalized String directory name, or nil if no directory
# is given.
def self.normalize_directory(dir)
if dir
dir = ::File.expand_path(dir, '/')
dir = '' if dir == '/'
end
dir
end end
end end
end end