Patch #8294 » 20110504-IncludeReposInScheduledFetch.patch
| app/controllers/repositories_controller.rb (working copy) | ||
|---|---|---|
| 42 | 42 |
end |
| 43 | 43 |
if request.post? && @repository |
| 44 | 44 |
@repository.attributes = params[:repository] |
| 45 |
@repository.include_in_scheduled_fetch = !params[:include_in_scheduled_fetch].nil? |
|
| 45 | 46 |
@repository.save |
| 46 | 47 |
end |
| 47 | 48 |
render(:update) do |page| |
| app/models/repository.rb (working copy) | ||
|---|---|---|
| 211 | 211 |
encoding.blank? ? 'UTF-8' : encoding |
| 212 | 212 |
end |
| 213 | 213 | |
| 214 |
# Fetches new changesets for all repositories of active projects
|
|
| 215 |
# Can be called periodically by an external script
|
|
| 216 |
# eg. ruby script/runner "Repository.fetch_changesets"
|
|
| 217 |
def self.fetch_changesets
|
|
| 214 |
# Fetches new changsets for all repositories of active projects |
|
| 215 |
# When fetch_all is true, all repositories will be processed, but when it is false,
|
|
| 216 |
# only those with the 'include_in_scheduled_fetch' flag set will be retrieved
|
|
| 217 |
def self.do_fetch_changesets(fetch_all)
|
|
| 218 | 218 |
Project.active.has_module(:repository).find(:all, :include => :repository).each do |project| |
| 219 | 219 |
if project.repository |
| 220 | 220 |
begin |
| 221 |
project.repository.fetch_changesets |
|
| 222 |
rescue Redmine::Scm::Adapters::CommandFailed => e |
|
| 223 |
logger.error "scm: error during fetching changesets: #{e.message}"
|
|
| 221 |
if (project.repository.include_in_scheduled_fetch? or fetch_all) |
|
| 222 |
begin |
|
| 223 |
project.repository.fetch_changesets |
|
| 224 |
rescue Redmine::Scm::Adapters::CommandFailed => e |
|
| 225 |
logger.error "scm: error during fetch of changesets: #{e.message}"
|
|
| 226 |
end |
|
| 227 |
end |
|
| 224 | 228 |
end |
| 225 | 229 |
end |
| 226 | 230 |
end |
| 227 | 231 |
end |
| 228 | 232 | |
| 233 |
# Fetches new changesets for all repositories of active projects |
|
| 234 |
# Can be called periodically by an external script |
|
| 235 |
# eg. ruby script/runner "Repository.fetch_changesets" |
|
| 236 |
def self.fetch_changesets |
|
| 237 |
self.do_fetch_changesets(true) |
|
| 238 |
end |
|
| 239 | ||
| 240 |
# Fetches new changesets for all repositories of active projects which have the 'include_in_scheduled_fetch' flag set |
|
| 241 |
# Should be called periodically by an external script |
|
| 242 |
# eg. ruby script/runner "Repository.scheduled_fetch_changesets" |
|
| 243 |
def self.scheduled_fetch_changesets |
|
| 244 |
self.do_fetch_changesets(false) |
|
| 245 |
end |
|
| 246 | ||
| 229 | 247 |
# scan changeset comments to find related and fixed issues for all repositories |
| 230 | 248 |
def self.scan_changesets_for_issue_ids |
| 231 | 249 |
find(:all).each(&:scan_changesets_for_issue_ids) |
| app/views/projects/settings/_repository.rhtml (working copy) | ||
|---|---|---|
| 6 | 6 |
<%= error_messages_for 'repository' %> |
| 7 | 7 | |
| 8 | 8 |
<div class="box tabular"> |
| 9 |
<p><%= label_tag('include_in_scheduled_fetch', l(:label_include_in_scheduled_fetch)) %><%= check_box_tag 'include_in_scheduled_fetch', 1, @repository && @repository.include_in_scheduled_fetch? %></p>
|
|
| 9 | 10 |
<p> |
| 10 | 11 |
<%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %>
|
| 11 | 12 |
<% if @repository %> |
| config/locales/en-GB.yml (working copy) | ||
|---|---|---|
| 804 | 804 |
label_project_copy_notifications: Send email notifications during the project copy |
| 805 | 805 |
label_principal_search: "Search for user or group:" |
| 806 | 806 |
label_user_search: "Search for user:" |
| 807 |
label_include_in_scheduled_fetch: "Include in scheduled fetch" |
|
| 807 | 808 |
|
| 808 | 809 |
button_login: Login |
| 809 | 810 |
button_submit: Submit |
| config/locales/en.yml (working copy) | ||
|---|---|---|
| 819 | 819 |
label_issues_visibility_all: All issues |
| 820 | 820 |
label_issues_visibility_public: All non private issues |
| 821 | 821 |
label_issues_visibility_own: Issues created by or assigned to the user |
| 822 |
label_include_in_scheduled_fetch: "Include in scheduled fetch" |
|
| 822 | 823 |
|
| 823 | 824 |
button_login: Login |
| 824 | 825 |
button_submit: Submit |
| db/migrate/20110504001300_add_include_repos_in_scheduled_fetch_flag.rb (revision 0) | ||
|---|---|---|
| 1 |
class AddIncludeReposInScheduledFetchFlag < ActiveRecord::Migration |
|
| 2 |
def self.up |
|
| 3 |
add_column :repositories, :include_in_scheduled_fetch, :boolean, :default => false, :null => false |
|
| 4 |
end |
|
| 5 |
|
|
| 6 |
def self.down |
|
| 7 |
drop_column :repositories, :include_in_scheduled_fetch |
|
| 8 |
end |
|
| 9 |
end |
|
| lib/tasks/scheduled_fetch_changesets.rake (revision 0) | ||
|---|---|---|
| 1 |
# redMine - project management software |
|
| 2 |
# Copyright (C) 2006-2008 Jean-Philippe Lang |
|
| 3 |
# |
|
| 4 |
# This program is free software; you can redistribute it and/or |
|
| 5 |
# modify it under the terms of the GNU General Public License |
|
| 6 |
# as published by the Free Software Foundation; either version 2 |
|
| 7 |
# of the License, or (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 General Public License for more details. |
|
| 13 |
# |
|
| 14 |
# You should have received a copy of the GNU General Public License |
|
| 15 |
# along with this program; if not, write to the Free Software |
|
| 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
| 17 |
|
|
| 18 |
desc 'Scheduled fetch changesets from the repositories' |
|
| 19 |
|
|
| 20 |
namespace :redmine do |
|
| 21 |
task :scheduled_fetch_changesets => :environment do |
|
| 22 |
Repository.scheduled_fetch_changesets |
|
| 23 |
end |
|
| 24 |
end |
|