Mercurial > hg > soundsoftware-site
comparison .svn/pristine/c8/c8c8b891b8b1a98cd7dec3eea46d3351c5d63dc0.svn-base @ 1295:622f24f53b42 redmine-2.3
Update to Redmine SVN revision 11972 on 2.3-stable branch
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:02:21 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1294:3e4c3460b6ca | 1295:622f24f53b42 |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2013 Jean-Philippe Lang | |
3 # | |
4 # This program is free software; you can redistribute it and/or | |
5 # modify it under the terms of the GNU General Public License | |
6 # as published by the Free Software Foundation; either version 2 | |
7 # of the License, or (at your option) any later version. | |
8 # | |
9 # This program is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 # | |
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 | |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 | |
18 require 'redmine/scm/adapters/darcs_adapter' | |
19 | |
20 class Repository::Darcs < Repository | |
21 validates_presence_of :url, :log_encoding | |
22 | |
23 def self.human_attribute_name(attribute_key_name, *args) | |
24 attr_name = attribute_key_name.to_s | |
25 if attr_name == "url" | |
26 attr_name = "path_to_repository" | |
27 end | |
28 super(attr_name, *args) | |
29 end | |
30 | |
31 def self.scm_adapter_class | |
32 Redmine::Scm::Adapters::DarcsAdapter | |
33 end | |
34 | |
35 def self.scm_name | |
36 'Darcs' | |
37 end | |
38 | |
39 def supports_directory_revisions? | |
40 true | |
41 end | |
42 | |
43 def entry(path=nil, identifier=nil) | |
44 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) | |
45 scm.entry(path, patch.nil? ? nil : patch.scmid) | |
46 end | |
47 | |
48 def entries(path=nil, identifier=nil) | |
49 patch = nil | |
50 if ! identifier.nil? | |
51 patch = changesets.find_by_revision(identifier) | |
52 return nil if patch.nil? | |
53 end | |
54 entries = scm.entries(path, patch.nil? ? nil : patch.scmid) | |
55 if entries | |
56 entries.each do |entry| | |
57 # Search the DB for the entry's last change | |
58 if entry.lastrev && !entry.lastrev.scmid.blank? | |
59 changeset = changesets.find_by_scmid(entry.lastrev.scmid) | |
60 end | |
61 if changeset | |
62 entry.lastrev.identifier = changeset.revision | |
63 entry.lastrev.name = changeset.revision | |
64 entry.lastrev.time = changeset.committed_on | |
65 entry.lastrev.author = changeset.committer | |
66 end | |
67 end | |
68 end | |
69 load_entries_changesets(entries) | |
70 entries | |
71 end | |
72 | |
73 def cat(path, identifier=nil) | |
74 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) | |
75 scm.cat(path, patch.nil? ? nil : patch.scmid) | |
76 end | |
77 | |
78 def diff(path, rev, rev_to) | |
79 patch_from = changesets.find_by_revision(rev) | |
80 return nil if patch_from.nil? | |
81 patch_to = changesets.find_by_revision(rev_to) if rev_to | |
82 if path.blank? | |
83 path = patch_from.filechanges.collect{|change| change.path}.join(' ') | |
84 end | |
85 patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil | |
86 end | |
87 | |
88 def fetch_changesets | |
89 scm_info = scm.info | |
90 if scm_info | |
91 db_last_id = latest_changeset ? latest_changeset.scmid : nil | |
92 next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 | |
93 # latest revision in the repository | |
94 scm_revision = scm_info.lastrev.scmid | |
95 unless changesets.find_by_scmid(scm_revision) | |
96 revisions = scm.revisions('', db_last_id, nil, :with_path => true) | |
97 transaction do | |
98 revisions.reverse_each do |revision| | |
99 changeset = Changeset.create(:repository => self, | |
100 :revision => next_rev, | |
101 :scmid => revision.scmid, | |
102 :committer => revision.author, | |
103 :committed_on => revision.time, | |
104 :comments => revision.message) | |
105 revision.paths.each do |change| | |
106 changeset.create_change(change) | |
107 end | |
108 next_rev += 1 | |
109 end if revisions | |
110 end | |
111 end | |
112 end | |
113 end | |
114 end |