##// END OF EJS Templates
scm: git: performance improvements in fetching revisions (#8857, #9472)...
scm: git: performance improvements in fetching revisions (#8857, #9472) Parse a revision for a given branch, just if we haven't parsed it for any branches before. Moved the db check to for existing revisions into a grouped search. Search for many revisions at once: this reduces db load. Revisions are grouped into sets of 100. This is to improve memory consumption. There will be just one query instead of each 100. The above two methods significantly increase parsing speed. Test case was a git repo with 6000+ commits on a master branch, and several other branches originating for master. Speed improved from 1.4h to 18min. Contributed by Gergely Fábián. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9144 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r7852:b8a924e4e1cb
r9024:999a4ba30d7b
Show More
wiki_content.rb
122 lines | 4.7 KiB | text/x-ruby | RubyLexer
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675 # RedMine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
wiki branch merged into trunk...
r320 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675 #
Jean-Philippe Lang
wiki branch merged into trunk...
r320 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675 #
Jean-Philippe Lang
wiki branch merged into trunk...
r320 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require 'zlib'
class WikiContent < ActiveRecord::Base
Jean-Philippe Lang
Optimistic locking added for wiki edits....
r542 set_locking_column :version
Jean-Philippe Lang
wiki branch merged into trunk...
r320 belongs_to :page, :class_name => 'WikiPage', :foreign_key => 'page_id'
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
validates_presence_of :text
Jean-Philippe Lang
Follows r2720 (#3308)....
r2628 validates_length_of :comments, :maximum => 255, :allow_nil => true
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
wiki branch merged into trunk...
r320 acts_as_versioned
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Make sure users don't get notified for thing they can not view (#3589)....
r3055 def visible?(user=User.current)
page.visible?(user)
end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Adds email notification on wiki changes (#413). It's disabled by default and can be enabled in application settings....
r2650 def project
page.project
end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Makes the wiki sidebar editable (#5208)....
r3518 def attachments
page.nil? ? [] : page.attachments
end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Make sure users don't get notified for thing they can not view (#3589)....
r3055 # Returns the mail adresses of users that should be notified
def recipients
notified = project.notified_users
notified.reject! {|user| !visible?(user)}
notified.collect(&:mail)
end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Adds #current_version? method to wiki content....
r7852 # Return true if the content is the current page content
def current_version?
true
end
Jean-Philippe Lang
wiki branch merged into trunk...
r320 class Version
Jean-Philippe Lang
Fixed warning: toplevel constant User referenced by WikiContent::User...
r987 belongs_to :page, :class_name => '::WikiPage', :foreign_key => 'page_id'
belongs_to :author, :class_name => '::User', :foreign_key => 'author_id'
Jean-Philippe Lang
wiki branch merged into trunk...
r320 attr_protected :data
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663
acts_as_event :title => Proc.new {|o| "#{l(:label_wiki_edit)}: #{o.page.title} (##{o.version})"},
:description => :comments,
:datetime => :updated_on,
Jean-Philippe Lang
Add an icon to each event on the activity view....
r1327 :type => 'wiki-page',
Eric Davis
Refactor: use :id instead of :page when linking to Wiki Pages...
r4182 :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.page.wiki.project, :id => o.page.title, :version => o.version}}
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663
Jean-Philippe Lang
Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users (#1154)....
r1813 acts_as_activity_provider :type => 'wiki_edits',
Jean-Philippe Lang
Activity refactoring....
r1692 :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
Jean-Philippe Lang
Display latest user's activity on account/show view....
r2064 :author_key => "#{WikiContent.versioned_table_name}.author_id",
Jean-Philippe Lang
Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users (#1154)....
r1813 :permission => :view_wiki_edits,
Jean-Philippe Lang
Activity refactoring....
r1692 :find_options => {:select => "#{WikiContent.versioned_table_name}.updated_on, #{WikiContent.versioned_table_name}.comments, " +
"#{WikiContent.versioned_table_name}.#{WikiContent.version_column}, #{WikiPage.table_name}.title, " +
"#{WikiContent.versioned_table_name}.page_id, #{WikiContent.versioned_table_name}.author_id, " +
"#{WikiContent.versioned_table_name}.id",
:joins => "LEFT JOIN #{WikiPage.table_name} ON #{WikiPage.table_name}.id = #{WikiContent.versioned_table_name}.page_id " +
"LEFT JOIN #{Wiki.table_name} ON #{Wiki.table_name}.id = #{WikiPage.table_name}.wiki_id " +
"LEFT JOIN #{Project.table_name} ON #{Project.table_name}.id = #{Wiki.table_name}.project_id"}
Jean-Philippe Lang
wiki branch merged into trunk...
r320 def text=(plain)
case Setting.wiki_compression
when 'gzip'
begin
self.data = Zlib::Deflate.deflate(plain, Zlib::BEST_COMPRESSION)
self.compression = 'gzip'
rescue
self.data = plain
self.compression = ''
end
else
self.data = plain
self.compression = ''
end
plain
end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
wiki branch merged into trunk...
r320 def text
@text ||= case compression
when 'gzip'
Toshi MARUYAMA
Ruby 1.9: fix encoding error on wiki diffs (#4050)...
r7807 str = Zlib::Inflate.inflate(data)
str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
str
Jean-Philippe Lang
wiki branch merged into trunk...
r320 else
# uncompressed data
data
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675 end
Jean-Philippe Lang
wiki branch merged into trunk...
r320 end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Activity enhancements:...
r1213 def project
page.project
end
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675
Jean-Philippe Lang
Adds #current_version? method to wiki content....
r7852 # Return true if the content is the current page content
def current_version?
page.content.version == self.version
end
Jean-Philippe Lang
Added wiki annotate view. It's accessible for each version from the page history view. ...
r1007 # Returns the previous version or nil
def previous
Toshi MARUYAMA
remove trailing white-spaces from WikiContent model source....
r5675 @previous ||= WikiContent::Version.find(:first,
Jean-Philippe Lang
Added wiki annotate view. It's accessible for each version from the page history view. ...
r1007 :order => 'version DESC',
:include => :author,
:conditions => ["wiki_content_id = ? AND version < ?", wiki_content_id, version])
end
Jean-Philippe Lang
wiki branch merged into trunk...
r320 end
end