summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>2011-05-04 18:07:50 +0000
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>2011-05-04 18:07:50 +0000
commit18df827244b61da53a56d51e75f38aaed170b213 (patch)
treed80905941e6a11cc630e33ad493f5ab8873819cf /lib
parent97b4ee2fef78dc255f2c9b450938f12c073c0831 (diff)
downloadredmine-18df827244b61da53a56d51e75f38aaed170b213.tar.gz
redmine-18df827244b61da53a56d51e75f38aaed170b213.zip
scm: git: override adapter entry() for browsing tree performance (#7047).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5640 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib')
-rw-r--r--lib/redmine/scm/adapters/git_adapter.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb
index 592a1815a..68fbfd653 100644
--- a/lib/redmine/scm/adapters/git_adapter.rb
+++ b/lib/redmine/scm/adapters/git_adapter.rb
@@ -106,6 +106,20 @@ module Redmine
bras.include?('master') ? 'master' : bras.first
end
+ def entry(path=nil, identifier=nil)
+ parts = path.to_s.split(%r{[\/\\]}).select {|n| !n.blank?}
+ search_path = parts[0..-2].join('/')
+ search_name = parts[-1]
+ if search_path.blank? && search_name.blank?
+ # Root entry
+ Entry.new(:path => '', :kind => 'dir')
+ else
+ # Search for the entry in the parent directory
+ es = entries(search_path, identifier)
+ es ? es.detect {|e| e.name == search_name} : nil
+ end
+ end
+
def entries(path=nil, identifier=nil, options={})
entries_git(path, identifier, options)
end