class Repobrowse::GitSrcTreeHTML
Public Class Methods
new(tree, ref, path, repo)
click to toggle source
Calls superclass method
Repobrowse::HTML::new
# File lib/repobrowse/git_src_tree_html.rb, line 8 def initialize(tree, ref, path, repo) super() @tree = tree @repo = repo ref_parts = ref.split('/') ref_uri = ref_parts.map { |s| CGI.escape(s) } ref_html = ht(ref.dup) if path path_parts = path.split('/') path_uri = path_parts.map { |s| CGI.escape(s) } path_html = ht(path.dup) path_uri[0] = "#{ref_uri[-1]}:#{path_uri[0]}" if path_uri[0] relup = (2..path_parts.size).map { '../' }.join base = path_parts.pop base_uri = path_uri.pop tmp = [] path_parts.map! do |x| tmp << path_uri.shift href = ha(+"#{relup}#{tmp.join('/')}") %Q(<a\nhref=#{href}>#{ht(x)}</a>) end path_parts << "<b>#{ht(base)}</b>" @rel_prefix = "./#{base_uri}/" else path_parts = [ '[root]' ] relup = '' @rel_prefix = "./#{ref_uri[-1]}:" end @buf = start("#{ref_html}:#{path_html}", repo) @buf << <<EOS <a href=#{ha(relup + ref_uri[-1])}>#{ref_html}</a> : #{path_parts.join(' / ')} tree #{@tree.oid}</pre><hr/><pre> EOS @buf.chomp! end
Public Instance Methods
close()
click to toggle source
called by the Rack server
# File lib/repobrowse/git_src_tree_html.rb, line 115 def close end
do_descend(ent, rgd)
click to toggle source
# File lib/repobrowse/git_src_tree_html.rb, line 87 def do_descend(ent, rgd) parts = [] begin tree = rgd.lookup(ent[:oid]) if tree.count != 1 break else parts << ent[:name] ent = tree.get_entry(0) ent[:filemode] == 0040000 or break end end while true fmt_ent(ent, rgd, parts) end
each() { |buf| ... }
click to toggle source
called by the Rack server
# File lib/repobrowse/git_src_tree_html.rb, line 103 def each yield @buf @buf.clear rgd = @repo.driver.rugged @tree.each do |ent| yield fmt_ent(ent, rgd, nil) end yield '</pre></body></html>' self end
fmt_ent(ent, rgd, parts)
click to toggle source
# File lib/repobrowse/git_src_tree_html.rb, line 46 def fmt_ent(ent, rgd, parts) name = ent[:name] name_text = ht(name.dup) case ent[:filemode] when 0100644 # plain blob, nothing special md = ' ' when 0040000 return do_descend(ent, rgd) unless parts md = 'd' len = '-' when 0100755 md = 'x' name_text = "<b>#{name_text}</b>" when 0120000 md = 'l' name_text = "<i>#{name_text}</i>" when 0160000 md = 'g' name_text = "#{name_text} <u>@ #{ent[:oid]}</u>" len = '-' else warn "unknown mode: #{'%06o' % ent[:filemode]}" end len ||= rgd.read_header(ent[:oid])[:len].to_s if parts && dir = parts.shift href = @rel_prefix + URI.escape(dir) dir = "<a\nhref=#{ha(href.dup)}>#{ht(dir)}</a>" parts.map! do |part| href << "/#{URI.escape(part)}" "<a\nhref=#{ha(href.dup)}>#{ht(part)}</a>" end parts.unshift(dir) href << "/#{URI.escape(name)}" parts << "<a\nhref=#{ha(href)}>#{name_text}</a>" rest = parts.join(' / ') else rest = "<a\nhref=#{ha(@rel_prefix + URI.escape(name))}>#{name_text}</a>" end "#{md} #{sprintf('% 8s', len)}\t#{rest}\n" end