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 | |