Mercurial > hg > soundsoftware-site
comparison .svn/pristine/43/43272555ea477da0c1b59cf98e2f63d68056c98b.svn-base @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2011 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) | |
24 attr_name = attribute_key_name | |
25 if attr_name == "url" | |
26 attr_name = "path_to_repository" | |
27 end | |
28 super(attr_name) | |
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 entries | |
70 end | |
71 | |
72 def cat(path, identifier=nil) | |
73 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) | |
74 scm.cat(path, patch.nil? ? nil : patch.scmid) | |
75 end | |
76 | |
77 def diff(path, rev, rev_to) | |
78 patch_from = changesets.find_by_revision(rev) | |
79 return nil if patch_from.nil? | |
80 patch_to = changesets.find_by_revision(rev_to) if rev_to | |
81 if path.blank? | |
82 path = patch_from.changes.collect{|change| change.path}.join(' ') | |
83 end | |
84 patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil | |
85 end | |
86 | |
87 def fetch_changesets | |
88 scm_info = scm.info | |
89 if scm_info | |
90 db_last_id = latest_changeset ? latest_changeset.scmid : nil | |
91 next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 | |
92 # latest revision in the repository | |
93 scm_revision = scm_info.lastrev.scmid | |
94 unless changesets.find_by_scmid(scm_revision) | |
95 revisions = scm.revisions('', db_last_id, nil, :with_path => true) | |
96 transaction do | |
97 revisions.reverse_each do |revision| | |
98 changeset = Changeset.create(:repository => self, | |
99 :revision => next_rev, | |
100 :scmid => revision.scmid, | |
101 :committer => revision.author, | |
102 :committed_on => revision.time, | |
103 :comments => revision.message) | |
104 revision.paths.each do |change| | |
105 changeset.create_change(change) | |
106 end | |
107 next_rev += 1 | |
108 end if revisions | |
109 end | |
110 end | |
111 end | |
112 end | |
113 end |