Mercurial > hg > soundsoftware-site
comparison app/models/repository/subversion.rb @ 523:0b6c82dead28 luisf
Merge from branch "cannam"
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Mon, 25 Jul 2011 14:23:37 +0100 |
parents | cbce1fd3b1b7 |
children | 433d4f72a19b |
comparison
equal
deleted
inserted
replaced
318:f7c525dc7585 | 523:0b6c82dead28 |
---|---|
1 # redMine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2007 Jean-Philippe Lang | 2 # Copyright (C) 2006-2011 Jean-Philippe Lang |
3 # | 3 # |
4 # This program is free software; you can redistribute it and/or | 4 # This program is free software; you can redistribute it and/or |
5 # modify it under the terms of the GNU General Public License | 5 # modify it under the terms of the GNU General Public License |
6 # as published by the Free Software Foundation; either version 2 | 6 # as published by the Free Software Foundation; either version 2 |
7 # of the License, or (at your option) any later version. | 7 # of the License, or (at your option) any later version. |
8 # | 8 # |
9 # This program is distributed in the hope that it will be useful, | 9 # This program is distributed in the hope that it will be useful, |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 # GNU General Public License for more details. | 12 # GNU General Public License for more details. |
13 # | 13 # |
14 # You should have received a copy of the GNU General Public License | 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 | 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. | 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 |
18 require 'redmine/scm/adapters/subversion_adapter' | 18 require 'redmine/scm/adapters/subversion_adapter' |
20 class Repository::Subversion < Repository | 20 class Repository::Subversion < Repository |
21 attr_protected :root_url | 21 attr_protected :root_url |
22 validates_presence_of :url | 22 validates_presence_of :url |
23 validates_format_of :url, :with => /^(http|https|svn(\+[^\s:\/\\]+)?|file):\/\/.+/i | 23 validates_format_of :url, :with => /^(http|https|svn(\+[^\s:\/\\]+)?|file):\/\/.+/i |
24 | 24 |
25 def scm_adapter | 25 def self.scm_adapter_class |
26 Redmine::Scm::Adapters::SubversionAdapter | 26 Redmine::Scm::Adapters::SubversionAdapter |
27 end | 27 end |
28 | 28 |
29 def self.scm_name | 29 def self.scm_name |
30 'Subversion' | 30 'Subversion' |
31 end | |
32 | |
33 def supports_directory_revisions? | |
34 true | |
35 end | |
36 | |
37 def repo_log_encoding | |
38 'UTF-8' | |
31 end | 39 end |
32 | 40 |
33 def latest_changesets(path, rev, limit=10) | 41 def latest_changesets(path, rev, limit=10) |
34 revisions = scm.revisions(path, rev, nil, :limit => limit) | 42 revisions = scm.revisions(path, rev, nil, :limit => limit) |
35 revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : [] | 43 revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : [] |
36 end | 44 end |
37 | 45 |
38 # Returns a path relative to the url of the repository | 46 # Returns a path relative to the url of the repository |
39 def relative_path(path) | 47 def relative_path(path) |
40 path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '') | 48 path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '') |
41 end | 49 end |
42 | 50 |
43 def fetch_changesets | 51 def fetch_changesets |
44 scm_info = scm.info | 52 scm_info = scm.info |
45 if scm_info | 53 if scm_info |
46 # latest revision found in database | 54 # latest revision found in database |
47 db_revision = latest_changeset ? latest_changeset.revision.to_i : 0 | 55 db_revision = latest_changeset ? latest_changeset.revision.to_i : 0 |
54 # loads changesets by batches of 200 | 62 # loads changesets by batches of 200 |
55 identifier_to = [identifier_from + 199, scm_revision].min | 63 identifier_to = [identifier_from + 199, scm_revision].min |
56 revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true) | 64 revisions = scm.revisions('', identifier_to, identifier_from, :with_paths => true) |
57 revisions.reverse_each do |revision| | 65 revisions.reverse_each do |revision| |
58 transaction do | 66 transaction do |
59 changeset = Changeset.create(:repository => self, | 67 changeset = Changeset.create(:repository => self, |
60 :revision => revision.identifier, | 68 :revision => revision.identifier, |
61 :committer => revision.author, | 69 :committer => revision.author, |
62 :committed_on => revision.time, | 70 :committed_on => revision.time, |
63 :comments => revision.message) | 71 :comments => revision.message) |
64 | 72 |
65 revision.paths.each do |change| | 73 revision.paths.each do |change| |
66 changeset.create_change(change) | 74 changeset.create_change(change) |
67 end unless changeset.new_record? | 75 end unless changeset.new_record? |
68 end | 76 end |
69 end unless revisions.nil? | 77 end unless revisions.nil? |
70 identifier_from = identifier_to + 1 | 78 identifier_from = identifier_to + 1 |
71 end | 79 end |
72 end | 80 end |
73 end | 81 end |
74 end | 82 end |
75 | 83 |
76 private | 84 private |
77 | 85 |
78 # Returns the relative url of the repository | 86 # Returns the relative url of the repository |
79 # Eg: root_url = file:///var/svn/foo | 87 # Eg: root_url = file:///var/svn/foo |
80 # url = file:///var/svn/foo/bar | 88 # url = file:///var/svn/foo/bar |
81 # => returns /bar | 89 # => returns /bar |
82 def relative_url | 90 def relative_url |