slightly faster commit_for_tree_path
[gitorious:dysinger.git] / app / helpers / trees_helper.rb
1 #--
2 #   Copyright (C) 2008 Johan Sørensen <johan@johansorensen.com>
3 #
4 #   This program is free software: you can redistribute it and/or modify
5 #   it under the terms of the GNU Affero General Public License as published by
6 #   the Free Software Foundation, either version 3 of the License, or
7 #   (at your option) any later version.
8 #
9 #   This program is distributed in the hope that it will be useful,
10 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 #   GNU Affero General Public License for more details.
13 #
14 #   You should have received a copy of the GNU Affero General Public License
15 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #++
17
18 module TreesHelper
19   include RepositoriesHelper
20   
21   def current_path
22     params[:path].dup
23   end
24   
25   def build_tree_path(path)
26     current_path << path
27   end
28   
29   def breadcrumb_path(root_name = "root", commit_id = params[:id])
30     out = %Q{<ul class="path_breadcrumbs">\n}
31     visited_path = []
32     out <<  %Q{  <li>/ #{link_to(root_name, tree_path(commit_id, []))}</li>\n}
33     current_path.each_with_index do |path, index|
34       visited_path << path
35       if visited_path == current_path
36         out << %Q{  <li>/ #{path}</li>\n}
37       else
38         out << %Q{  <li>/ #{link_to(path, tree_path(commit_id, visited_path))}</li>\n}
39       end
40     end
41     out << "</ul>"
42     out
43   end
44     
45   def render_tag_box_if_match(sha, tags_per_sha)
46     tags = tags_per_sha[sha]
47     return if tags.blank?
48     out = ""
49     tags.each do |tagname|
50       out << %Q{<span class="tag"><code>}
51       out << tagname
52       out << %Q{</code></span>}
53     end
54     out
55   end
56   
57   # FIXME: This really belongs somewhere else, but where?
58   def commit_for_tree_path(repository, path)
59     repository.git.log(params[:id], path, {:max_count => 1}).first
60   end
61 end