diff --git a/lib/tasks/changesets.rake b/lib/tasks/changesets.rake new file mode 100644 index 000000000..db644838a --- /dev/null +++ b/lib/tasks/changesets.rake @@ -0,0 +1,45 @@ +namespace :redmine do + namespace :changesets do + desc 'Sync all revisions in repositories related with all active project.' + task :reload => :environment do + Project.active.has_module(:repository).find_each do |project| + project.repositories.find_each do |repository| + detail = [ + "PJ-ID #{repository.project_id}", + "Identifier #{repository.identifier}", + "URL #{repository.url}", + ].join(", ") + changesets = repository.changesets + puts("Sync revisions: #{changesets.count}: #{detail}") + latest_changeset = changesets.first + changeset = latest_changeset + while changeset + revisions = repository.scm.revisions(nil, + changeset.identifier, + changeset.identifier) + revisions.each do |revision| + changeset.committer = + Changeset.to_utf8(revision.author, + repository.repo_log_encoding) + changeset.comments = + Changeset.normalize_comments(revision.message, + repository.repo_log_encoding) + changeset.user = + repository.find_committer_user(changeset.committer) + next unless changeset.changed? + changeset.scan_for_issues + if changeset.save + puts("Sync revision: #{changeset.identifier}, #{detail}") + else + puts("Failed to sync revision: " + + "#{changeset.identifier}, #{detail}: " + + "#{changeset.errors}") + end + end + changeset = changeset.previous + end + end + end + end + end +end \ No newline at end of file