##// END OF EJS Templates
Better handle html-only emails (#16962)....
Better handle html-only emails (#16962). git-svn-id: http://svn.redmine.org/redmine/trunk@14313 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r13490:000124f44f53
r13931:3ae42cb32617
Show More
subversion.rb
117 lines | 4.0 KiB | text/x-ruby | RubyLexer
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631 # Redmine - project management software
Jean-Philippe Lang
Copyright update....
r13490 # Copyright (C) 2006-2015 Jean-Philippe Lang
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 #
# 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
scm: subversion: code clean up model....
r5631 #
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 # 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
scm: subversion: code clean up model....
r5631 #
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 # 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 'redmine/scm/adapters/subversion_adapter'
class Repository::Subversion < Repository
attr_protected :root_url
validates_presence_of :url
Toshi MARUYAMA
use %r{} instead of // at app/models/repository/subversion.rb...
r11313 validates_format_of :url, :with => %r{\A(http|https|svn(\+[^\s:\/\\]+)?|file):\/\/.+}i
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556
Toshi MARUYAMA
scm: add scm command and version methods at repository models (#4273)....
r4702 def self.scm_adapter_class
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 Redmine::Scm::Adapters::SubversionAdapter
end
Toshi MARUYAMA
scm: add scm command and version methods at repository models (#4273)....
r4702
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 def self.scm_name
'Subversion'
end
Toshi MARUYAMA
scm: set supporting directory revisions or not at scm level....
r5024 def supports_directory_revisions?
true
end
Toshi MARUYAMA
scm: ignore log encoding setting in Subversion and Mercurial (#7597)....
r4842 def repo_log_encoding
'UTF-8'
end
Jean-Philippe Lang
SCM:...
r2739 def latest_changesets(path, rev, limit=10)
Jean-Philippe Lang
Fixed: Subversion#latest_changesets ignores revision argument (#4360)....
r3020 revisions = scm.revisions(path, rev, nil, :limit => limit)
Jean-Philippe Lang
Code cleanup....
r9625 if revisions
identifiers = revisions.collect(&:identifier).compact
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 changesets.where(:revision => identifiers).reorder("committed_on DESC").includes(:repository, :user).to_a
Jean-Philippe Lang
Code cleanup....
r9625 else
[]
end
Jean-Philippe Lang
Fixed: log is not displayed when browsing a copy in a svn repository....
r830 end
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631
Jean-Philippe Lang
Fixed: View differences for individual file of a changeset fails if the subversion repository URL doesn't point to the repository root (#1209, #1262, #1275)....
r1432 # Returns a path relative to the url of the repository
def relative_path(path)
path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '')
end
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 def fetch_changesets
scm_info = scm.info
if scm_info
# latest revision found in database
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 db_revision = latest_changeset ? latest_changeset.revision.to_i : 0
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 # latest revision in the repository
scm_revision = scm_info.lastrev.identifier.to_i
if db_revision < scm_revision
logger.debug "Fetching changesets for repository #{url}" if logger && logger.debug?
identifier_from = db_revision + 1
while (identifier_from <= scm_revision)
# loads changesets by batches of 200
identifier_to = [identifier_from + 199, scm_revision].min
revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true)
Jean-Philippe Lang
Transaction for each imported subversion changeset....
r2495 revisions.reverse_each do |revision|
transaction do
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631 changeset = Changeset.create(:repository => self,
:revision => revision.identifier,
:committer => revision.author,
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 :committed_on => revision.time,
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631 :comments => revision.message)
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 revision.paths.each do |change|
Eric Davis
Refactor: Extract method to create a Change from a Changeset....
r3246 changeset.create_change(change)
Jean-Philippe Lang
Transaction for each imported subversion changeset....
r2495 end unless changeset.new_record?
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 end
end unless revisions.nil?
identifier_from = identifier_to + 1
end
end
end
end
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631
Jean-Philippe Lang
Faster changesets loading for subversion....
r9623 protected
def load_entries_changesets(entries)
Jean-Philippe Lang
Fixed that Subversion#load_entries_changesets raises an error if entries is nil....
r9640 return unless entries
Toshi MARUYAMA
code format cleanup Repository::Subversion model...
r12451 entries_with_identifier =
entries.select {|entry| entry.lastrev && entry.lastrev.identifier.present?}
Jean-Philippe Lang
Faster changesets loading for subversion....
r9623 identifiers = entries_with_identifier.map {|entry| entry.lastrev.identifier}.compact.uniq
if identifiers.any?
Toshi MARUYAMA
code format cleanup Repository::Subversion model...
r12451 changesets_by_identifier =
changesets.where(:revision => identifiers).
Toshi MARUYAMA
remove unneeded Relation#all from Repository::Subversion model...
r12455 includes(:user, :repository).group_by(&:revision)
Jean-Philippe Lang
Faster changesets loading for subversion....
r9623 entries_with_identifier.each do |entry|
if m = changesets_by_identifier[entry.lastrev.identifier]
entry.changeset = m.first
end
end
end
end
Jean-Philippe Lang
Fixed: View differences for individual file of a changeset fails if the subversion repository URL doesn't point to the repository root (#1209, #1262, #1275)....
r1432 private
Toshi MARUYAMA
scm: subversion: code clean up model....
r5631
Jean-Philippe Lang
Fixed: View differences for individual file of a changeset fails if the subversion repository URL doesn't point to the repository root (#1209, #1262, #1275)....
r1432 # Returns the relative url of the repository
# Eg: root_url = file:///var/svn/foo
# url = file:///var/svn/foo/bar
# => returns /bar
def relative_url
Jean-Philippe Lang
Retrieve root_url if needed (#4377)....
r3044 @relative_url ||= url.gsub(Regexp.new("^#{Regexp.escape(root_url || scm.root_url)}", Regexp::IGNORECASE), '')
Jean-Philippe Lang
Fixed: View differences for individual file of a changeset fails if the subversion repository URL doesn't point to the repository root (#1209, #1262, #1275)....
r1432 end
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 end