##// 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:

r9017:fef2e4b67252
r9024:999a4ba30d7b
Show More
versions_controller.rb
205 lines | 7.3 KiB | text/x-ruby | RubyLexer
/ app / controllers / versions_controller.rb
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 # Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 #
# 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 app/controllers/versions_controller.rb....
r6571 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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 app/controllers/versions_controller.rb....
r6571 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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.
class VersionsController < ApplicationController
Jean-Philippe Lang
Highlight the current item of the main menu....
r1062 menu_item :roadmap
Eric Davis
Refactor: Change the different find_object filters to share a common method....
r3483 model_object Version
Eric Davis
Refactor: split VersionsController#new into #new and #create...
r3976 before_filter :find_model_object, :except => [:index, :new, :create, :close_completed]
before_filter :find_project_from_association, :except => [:index, :new, :create, :close_completed]
before_filter :find_project, :only => [:index, :new, :create, :close_completed]
Jean-Philippe Lang
Adds a link to automatically close completed versions in project settings (#1245)....
r2909 before_filter :authorize
Jean-Philippe Lang
notice messages translation...
r15
Jean-Philippe Lang
Allow API auth on GET /versions/:id (#10241)....
r8760 accept_api_auth :index, :show, :create, :update, :destroy
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Adds custom fields for versions (#4219)....
r2950 helper :custom_fields
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 helper :projects
Eric Davis
Refactor: move method, ProjectsController#roadmap to VersionsController#index....
r3936
def index
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 respond_to do |format|
format.html {
@trackers = @project.trackers.find(:all, :order => 'position')
retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 @versions = @project.shared_versions || []
@versions += @project.rolled_up_versions.visible if @with_subprojects
@versions = @versions.uniq.sort
Jean-Philippe Lang
Provide a direct access to completed versions form the roadmap....
r8579 unless params[:completed]
@completed_versions = @versions.select {|version| version.closed? || version.completed? }
@versions -= @completed_versions
end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 @issues_by_version = {}
Jean-Philippe Lang
Use a single query to retrieve issues on the roadmap....
r8937 if @selected_tracker_ids.any? && @versions.any?
issues = Issue.visible.all(
:include => [:project, :status, :tracker, :priority, :fixed_version],
:conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids, :fixed_version_id => @versions.map(&:id)},
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id"
)
@issues_by_version = issues.group_by(&:fixed_version)
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 end
@versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
}
format.api {
@versions = @project.shared_versions.all
}
Eric Davis
Refactor: move method, ProjectsController#roadmap to VersionsController#index....
r3936 end
end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Added version details view accessible from the roadmap....
r942 def show
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 respond_to do |format|
format.html {
@issues = @version.fixed_issues.visible.find(:all,
:include => [:status, :tracker, :priority],
:order => "#{Tracker.table_name}.position, #{Issue.table_name}.id")
}
format.api
end
Jean-Philippe Lang
Added version details view accessible from the roadmap....
r942 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 def new
Jean-Philippe Lang
Prevent mass-assignment when adding/updating a version (#10390)....
r9017 @version = @project.versions.build
@version.safe_attributes = params[:version]
Jean-Philippe Lang
Displays the full form when creating a version from the issue form so that required custom fields can be filled (#7398)....
r8725
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html 'ajax-modal', :partial => 'versions/new_modal'
page << "showModal('ajax-modal', '600px');"
page << "Form.Element.focus('version_name');"
end
end
end
Eric Davis
Refactor: split VersionsController#new into #new and #create...
r3976 end
def create
@version = @project.versions.build
if params[:version]
attributes = params[:version].dup
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
Jean-Philippe Lang
Prevent mass-assignment when adding/updating a version (#10390)....
r9017 @version.safe_attributes = attributes
Eric Davis
Refactor: split VersionsController#new into #new and #create...
r3976 end
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 if request.post?
if @version.save
respond_to do |format|
format.html do
flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
Adds a 'New version' link on the roadmap....
r6049 redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 end
format.js do
Jean-Philippe Lang
Displays the full form when creating a version from the issue form so that required custom fields can be filled (#7398)....
r8725 render(:update) {|page|
page << 'hideModal();'
# IE doesn't support the replace_html rjs method for select box options
page.replace "issue_fixed_version_id",
Jean-Philippe Lang
Use content_tag for empty option....
r8873 content_tag('select', content_tag('option') + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 }
end
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 format.api do
Jean-Philippe Lang
Makes versions resource shallow (#7403)....
r6063 render :action => 'show', :status => :created, :location => version_url(@version)
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 end
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 end
else
respond_to do |format|
Eric Davis
Refactor: split VersionsController#new into #new and #create...
r3976 format.html { render :action => 'new' }
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 format.js do
Jean-Philippe Lang
Displays the full form when creating a version from the issue form so that required custom fields can be filled (#7398)....
r8725 render :update do |page|
page.replace_html 'ajax-modal', :partial => 'versions/new_modal'
page << "Form.Element.focus('version_name');"
end
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 end
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 format.api { render_validation_errors(@version) }
Jean-Philippe Lang
Moves ProjectsController#add_version to VersionsController#new....
r3434 end
end
end
end
Eric Davis
Refactor: Split VersionsController#edit into #edit and #update...
r3974
Jean-Philippe Lang
notice messages translation...
r15 def edit
Eric Davis
Refactor: Split VersionsController#edit into #edit and #update...
r3974 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Eric Davis
Refactor: Split VersionsController#edit into #edit and #update...
r3974 def update
Eric Davis
Refactor: convert VersionsController to a REST resource....
r3983 if request.put? && params[:version]
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 attributes = params[:version].dup
attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
Jean-Philippe Lang
Prevent mass-assignment when adding/updating a version (#10390)....
r9017 @version.safe_attributes = attributes
if @version.save
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_update)
redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
}
format.api { head :ok }
end
Jean-Philippe Lang
Fixed: "Template is missing" error when validation fails on version edit (#6766)....
r4240 else
respond_to do |format|
format.html { render :action => 'edit' }
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 format.api { render_validation_errors(@version) }
Jean-Philippe Lang
Fixed: "Template is missing" error when validation fails on version edit (#6766)....
r4240 end
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 end
Jean-Philippe Lang
notice messages translation...
r15 end
end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Adds a link to automatically close completed versions in project settings (#1245)....
r2909 def close_completed
Eric Davis
Refactor: convert VersionsController to a REST resource....
r3983 if request.put?
Jean-Philippe Lang
Adds a link to automatically close completed versions in project settings (#1245)....
r2909 @project.close_completed_versions
end
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
end
Jean-Philippe Lang
notice messages translation...
r15
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def destroy
Jean-Philippe Lang
Do not raise an error when destroying a Version with assigned issues....
r3554 if @version.fixed_issues.empty?
@version.destroy
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 respond_to do |format|
format.html { redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project }
format.api { head :ok }
end
Jean-Philippe Lang
Do not raise an error when destroying a Version with assigned issues....
r3554 else
Jean-Philippe Lang
Adds REST API for versions (#7403)....
r6060 respond_to do |format|
format.html {
flash[:error] = l(:notice_unable_delete_version)
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
}
format.api { head :unprocessable_entity }
end
Jean-Philippe Lang
Do not raise an error when destroying a Version with assigned issues....
r3554 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/versions_controller.rb....
r6571
Jean-Philippe Lang
Added version details view accessible from the roadmap....
r942 def status_by
respond_to do |format|
format.html { render :action => 'show' }
format.js { render(:update) {|page| page.replace_html 'status_by', render_issue_status_by(@version, params[:status_by])} }
end
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
private
Jean-Philippe Lang
Adds a link to automatically close completed versions in project settings (#1245)....
r2909 def find_project
@project = Project.find(params[:project_id])
rescue ActiveRecord::RecordNotFound
render_404
end
Eric Davis
Refactor: move method, ProjectsController#roadmap to VersionsController#index....
r3936
def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
if ids = params[:tracker_ids]
@selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
else
@selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
end
end
Jean-Philippe Lang
Initial commit...
r2 end