##// END OF EJS Templates
Add a test for my page with all blocks....
Add a test for my page with all blocks. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10934 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r9640:667693b32cfa
r10707:127a2508fadb
Show More
subversion.rb
116 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....
r9453 # Copyright (C) 2006-2012 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
Jean-Philippe Lang
Accept any svn tunnel scheme in repository URL (#3278)....
r2624 validates_format_of :url, :with => /^(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
changesets.where(:revision => identifiers).reorder("committed_on DESC").includes(:repository, :user).all
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
Jean-Philippe Lang
Faster changesets loading for subversion....
r9623 entries_with_identifier = entries.select {|entry| entry.lastrev && entry.lastrev.identifier.present?}
identifiers = entries_with_identifier.map {|entry| entry.lastrev.identifier}.compact.uniq
if identifiers.any?
changesets_by_identifier = changesets.where(:revision => identifiers).includes(:user, :repository).all.group_by(&:revision)
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