##// END OF EJS Templates
Introduce virtual MenuNodes (#15880)....
Introduce virtual MenuNodes (#15880). They are characterized by having a blank url. they will only be rendered if the user is authorized to see at least one of its children. they render as links which do nothing when clicked. Patch by Jan Schulz-Hofen. git-svn-id: http://svn.redmine.org/redmine/trunk@15501 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r14856:cda9c63d9c21
r15119:53710d80fc88
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
Updates copyright for 2016....
r14856 # Copyright (C) 2006-2016 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