lib/gollum-site/site.rb in gollum-site-0.1.10 vs lib/gollum-site/site.rb in gollum-site-0.1.11
- old
+ new
@@ -1,6 +1,7 @@
module Gollum
+
class Site
def self.default_layout_dir()
::File.join(::File.dirname(::File.expand_path(__FILE__)), "layout")
end
@@ -31,15 +32,11 @@
items = self.ls(@version)
items.each do |item|
filename = ::File.basename(item.path)
dirname = ::File.dirname(item.path)
- if filename =~ /^_Footer./
- # ignore
- elsif filename =~ /^_Sidebar./
- # ignore
- elsif filename =~ /^_Layout.html/
+ if filename =~ /^_Layout.html/
# layout
@layouts[item.path] = ::Liquid::Template.parse(item.data)
elsif @wiki.page_class.valid_page_name?(filename)
# page
page = @wiki.page_class.new(@wiki)
@@ -54,41 +51,21 @@
end
end
def ls(version = 'master')
if version == :working
- ls_opts = {
- :others => true,
- :exclude_standard => true,
- :cached => true,
- :z => true
- }
-
- ls_opts_del = {
- :deleted => true,
- :exclude_standard => true,
- :z => true
- }
-
- # if output_path is in work_tree, it should be excluded
- if ::File.expand_path(@output_path).match(::File.expand_path(@wiki.repo.git.work_tree))
- ls_opts[:exclude] = @output_path
- ls_opts_del[:exclude] = @output_path
+ return in_work_tree do
+ working = ls_files(:exclude => @output_path, :others => true, :cached => true)
+ deleted = ls_files(:exclude => @output_path, :deleted => true)
+ ignored = ignored_list(version)
+ valid_files = working - deleted - ignored
+ valid_files.map do |path|
+ OpenStruct.new(:path => path, :data => IO.read(path))
+ end
end
-
- cwd = Dir.pwd # need to change directories for git ls-files -o
- Dir.chdir(@wiki.repo.git.work_tree)
- deleted = @wiki.repo.git.native(:ls_files, ls_opts_del).split("\0")
- working = @wiki.repo.git.native(:ls_files, ls_opts).split("\0")
- work_tree = (working - deleted).map do |path|
- path = decode_git_path(path)
- OpenStruct.new(:path => path, :data => IO.read(path))
- end
- Dir.chdir(cwd) # change back to original directory
- return work_tree
else
- return @wiki.tree_map_for(version).map do |entry|
+ return @wiki.tree_map_for(version).reject {|entry| ignored? entry.path }.map do |entry|
OpenStruct.new(:path => entry.path, :data => entry.blob(@wiki.repo).data)
end
end
end
@@ -135,7 +112,42 @@
path.gsub!(/\\\d{3}/) { |m| m[1..-1].to_i(8).chr }
end
path.gsub!(/\\[rn"\\]/) { |m| eval(%("#{m.to_s}")) }
path
end
- end
-end
+
+ def ignored?(path)
+ @ignored_list ||= ignored_list
+ @ignored_list.include? path
+ end
+
+ def ignored_list(version = 'master')
+ in_work_tree do
+ ignore = ls_files(:ignored => true, :exclude_from => '.gollumignore')
+ if version == :working
+ ignore += ls_files(:ignored => true, :exclude_from => '.gollumignore', :other => true)
+ else
+ ignore += ls_files(:other => true)
+ end
+ # grit does not correctly handle multiple options with the same name
+ ignore += ls_files(:ignored => true, :exclude => '.gollumignore')
+ ignore += ls_files(:ignored => true, :exclude => '.gitignore')
+ ignore += ls_files(:ignored => true, :exclude => '_Sidebar.*')
+ ignore += ls_files(:ignored => true, :exclude => '_Footer.*')
+ end
+ end
+
+ def ls_files(opts)
+ opts.merge!(:z => true, :exclude_standard => true)
+ @wiki.repo.git.native(:ls_files, opts).split("\0").map {|path| decode_git_path(path) }
+ end
+
+ def in_work_tree
+ cwd = Dir.pwd
+ Dir.chdir(@wiki.repo.git.work_tree)
+ result = yield
+ Dir.chdir(cwd)
+ result
+ end
+ end # Site
+
+end # Gollum