Mercurial > hg > soundsoftware-site
comparison app/models/repository/.svn/text-base/darcs.rb.svn-base @ 441:cbce1fd3b1b7 redmine-1.2
Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author | Chris Cannam |
---|---|
date | Mon, 06 Jun 2011 14:24:13 +0100 |
parents | 051f544170fe |
children |
comparison
equal
deleted
inserted
replaced
245:051f544170fe | 441:cbce1fd3b1b7 |
---|---|
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/darcs_adapter' | 18 require 'redmine/scm/adapters/darcs_adapter' |
19 | 19 |
20 class Repository::Darcs < Repository | 20 class Repository::Darcs < Repository |
21 validates_presence_of :url, :log_encoding | 21 validates_presence_of :url, :log_encoding |
22 | 22 |
23 ATTRIBUTE_KEY_NAMES = { | |
24 "url" => "Root directory", | |
25 "log_encoding" => "Commit messages encoding", | |
26 } | |
27 def self.human_attribute_name(attribute_key_name) | 23 def self.human_attribute_name(attribute_key_name) |
28 ATTRIBUTE_KEY_NAMES[attribute_key_name] || super | 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 | 29 end |
30 | 30 |
31 def self.scm_adapter_class | 31 def self.scm_adapter_class |
32 Redmine::Scm::Adapters::DarcsAdapter | 32 Redmine::Scm::Adapters::DarcsAdapter |
33 end | 33 end |
34 | 34 |
35 def self.scm_name | 35 def self.scm_name |
36 'Darcs' | 36 'Darcs' |
37 end | 37 end |
38 | 38 |
39 def supports_directory_revisions? | |
40 true | |
41 end | |
42 | |
39 def entry(path=nil, identifier=nil) | 43 def entry(path=nil, identifier=nil) |
40 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) | 44 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) |
41 scm.entry(path, patch.nil? ? nil : patch.scmid) | 45 scm.entry(path, patch.nil? ? nil : patch.scmid) |
42 end | 46 end |
43 | 47 |
44 def entries(path=nil, identifier=nil) | 48 def entries(path=nil, identifier=nil) |
45 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier) | 49 patch = nil |
50 if ! identifier.nil? | |
51 patch = changesets.find_by_revision(identifier) | |
52 return nil if patch.nil? | |
53 end | |
46 entries = scm.entries(path, patch.nil? ? nil : patch.scmid) | 54 entries = scm.entries(path, patch.nil? ? nil : patch.scmid) |
47 if entries | 55 if entries |
48 entries.each do |entry| | 56 entries.each do |entry| |
49 # Search the DB for the entry's last change | 57 # Search the DB for the entry's last change |
50 changeset = changesets.find_by_scmid(entry.lastrev.scmid) if entry.lastrev && !entry.lastrev.scmid.blank? | 58 if entry.lastrev && !entry.lastrev.scmid.blank? |
59 changeset = changesets.find_by_scmid(entry.lastrev.scmid) | |
60 end | |
51 if changeset | 61 if changeset |
52 entry.lastrev.identifier = changeset.revision | 62 entry.lastrev.identifier = changeset.revision |
53 entry.lastrev.name = changeset.revision | 63 entry.lastrev.name = changeset.revision |
54 entry.lastrev.time = changeset.committed_on | 64 entry.lastrev.time = changeset.committed_on |
55 entry.lastrev.author = changeset.committer | 65 entry.lastrev.author = changeset.committer |
56 end | 66 end |
57 end | 67 end |
58 end | 68 end |
59 entries | 69 entries |
60 end | 70 end |
61 | 71 |
62 def cat(path, identifier=nil) | 72 def cat(path, identifier=nil) |
63 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) | 73 patch = identifier.nil? ? nil : changesets.find_by_revision(identifier.to_s) |
64 scm.cat(path, patch.nil? ? nil : patch.scmid) | 74 scm.cat(path, patch.nil? ? nil : patch.scmid) |
65 end | 75 end |
66 | 76 |
67 def diff(path, rev, rev_to) | 77 def diff(path, rev, rev_to) |
68 patch_from = changesets.find_by_revision(rev) | 78 patch_from = changesets.find_by_revision(rev) |
69 return nil if patch_from.nil? | 79 return nil if patch_from.nil? |
70 patch_to = changesets.find_by_revision(rev_to) if rev_to | 80 patch_to = changesets.find_by_revision(rev_to) if rev_to |
71 if path.blank? | 81 if path.blank? |
72 path = patch_from.changes.collect{|change| change.path}.join(' ') | 82 path = patch_from.changes.collect{|change| change.path}.join(' ') |
73 end | 83 end |
74 patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil | 84 patch_from ? scm.diff(path, patch_from.scmid, patch_to ? patch_to.scmid : nil) : nil |
75 end | 85 end |
76 | 86 |
77 def fetch_changesets | 87 def fetch_changesets |
78 scm_info = scm.info | 88 scm_info = scm.info |
79 if scm_info | 89 if scm_info |
80 db_last_id = latest_changeset ? latest_changeset.scmid : nil | 90 db_last_id = latest_changeset ? latest_changeset.scmid : nil |
81 next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 | 91 next_rev = latest_changeset ? latest_changeset.revision.to_i + 1 : 1 |
82 # latest revision in the repository | 92 # latest revision in the repository |
83 scm_revision = scm_info.lastrev.scmid | 93 scm_revision = scm_info.lastrev.scmid |
84 unless changesets.find_by_scmid(scm_revision) | 94 unless changesets.find_by_scmid(scm_revision) |
85 revisions = scm.revisions('', db_last_id, nil, :with_path => true) | 95 revisions = scm.revisions('', db_last_id, nil, :with_path => true) |
86 transaction do | 96 transaction do |
87 revisions.reverse_each do |revision| | 97 revisions.reverse_each do |revision| |
88 changeset = Changeset.create(:repository => self, | 98 changeset = Changeset.create(:repository => self, |
89 :revision => next_rev, | 99 :revision => next_rev, |
90 :scmid => revision.scmid, | 100 :scmid => revision.scmid, |
91 :committer => revision.author, | 101 :committer => revision.author, |
92 :committed_on => revision.time, | 102 :committed_on => revision.time, |
93 :comments => revision.message) | 103 :comments => revision.message) |
94 | |
95 revision.paths.each do |change| | 104 revision.paths.each do |change| |
96 changeset.create_change(change) | 105 changeset.create_change(change) |
97 end | 106 end |
98 next_rev += 1 | 107 next_rev += 1 |
99 end if revisions | 108 end if revisions |