Mercurial > hg > soundsoftware-site
comparison app/models/repository/mercurial.rb @ 1115:433d4f72a19b redmine-2.2
Update to Redmine SVN revision 11137 on 2.2-stable branch
author | Chris Cannam |
---|---|
date | Mon, 07 Jan 2013 12:01:42 +0000 |
parents | cbb26bc654de |
children | bb32da3bea34 622f24f53b42 |
comparison
equal
deleted
inserted
replaced
929:5f33065ddc4b | 1115:433d4f72a19b |
---|---|
1 # Redmine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2011 Jean-Philippe Lang | 2 # Copyright (C) 2006-2012 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. |
27 validates_presence_of :url | 27 validates_presence_of :url |
28 | 28 |
29 # number of changesets to fetch at once | 29 # number of changesets to fetch at once |
30 FETCH_AT_ONCE = 100 | 30 FETCH_AT_ONCE = 100 |
31 | 31 |
32 def self.human_attribute_name(attribute_key_name) | 32 def self.human_attribute_name(attribute_key_name, *args) |
33 attr_name = attribute_key_name | 33 attr_name = attribute_key_name.to_s |
34 if attr_name == "url" | 34 if attr_name == "url" |
35 attr_name = "path_to_repository" | 35 attr_name = "path_to_repository" |
36 end | 36 end |
37 super(attr_name) | 37 super(attr_name, *args) |
38 end | 38 end |
39 | 39 |
40 def self.scm_adapter_class | 40 def self.scm_adapter_class |
41 Redmine::Scm::Adapters::MercurialAdapter | 41 Redmine::Scm::Adapters::MercurialAdapter |
42 end | 42 end |
71 super(cs, cs_to, ' ') | 71 super(cs, cs_to, ' ') |
72 end | 72 end |
73 | 73 |
74 # Finds and returns a revision with a number or the beginning of a hash | 74 # Finds and returns a revision with a number or the beginning of a hash |
75 def find_changeset_by_name(name) | 75 def find_changeset_by_name(name) |
76 return nil if name.nil? || name.empty? | 76 return nil if name.blank? |
77 if /[^\d]/ =~ name or name.to_s.size > 8 | 77 s = name.to_s |
78 e = changesets.find(:first, :conditions => ['scmid = ?', name.to_s]) | 78 if /[^\d]/ =~ s or s.size > 8 |
79 cs = changesets.where(:scmid => s).first | |
79 else | 80 else |
80 e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) | 81 cs = changesets.where(:revision => s).first |
81 end | 82 end |
82 return e if e | 83 return cs if cs |
83 changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) # last ditch | 84 changesets.where('scmid LIKE ?', "#{s}%").first |
84 end | 85 end |
85 | 86 |
86 # Returns the latest changesets for +path+; sorted by revision number | 87 # Returns the latest changesets for +path+; sorted by revision number |
87 # | 88 # |
88 # Because :order => 'id DESC' is defined at 'has_many', | 89 # Because :order => 'id DESC' is defined at 'has_many', |
135 db_rev = latest_changeset ? latest_changeset.revision.to_i : -1 | 136 db_rev = latest_changeset ? latest_changeset.revision.to_i : -1 |
136 return unless db_rev < scm_rev # already up-to-date | 137 return unless db_rev < scm_rev # already up-to-date |
137 | 138 |
138 logger.debug "Fetching changesets for repository #{url}" if logger | 139 logger.debug "Fetching changesets for repository #{url}" if logger |
139 (db_rev + 1).step(scm_rev, FETCH_AT_ONCE) do |i| | 140 (db_rev + 1).step(scm_rev, FETCH_AT_ONCE) do |i| |
140 transaction do | 141 scm.each_revision('', i, [i + FETCH_AT_ONCE - 1, scm_rev].min) do |re| |
141 scm.each_revision('', i, [i + FETCH_AT_ONCE - 1, scm_rev].min) do |re| | 142 transaction do |
143 parents = (re.parents || []).collect{|rp| find_changeset_by_name(rp)}.compact | |
142 cs = Changeset.create(:repository => self, | 144 cs = Changeset.create(:repository => self, |
143 :revision => re.revision, | 145 :revision => re.revision, |
144 :scmid => re.scmid, | 146 :scmid => re.scmid, |
145 :committer => re.author, | 147 :committer => re.author, |
146 :committed_on => re.time, | 148 :committed_on => re.time, |
147 :comments => re.message) | 149 :comments => re.message, |
148 re.paths.each { |e| cs.create_change(e) } | 150 :parents => parents) |
149 parents = {} | 151 unless cs.new_record? |
150 parents[cs] = re.parents unless re.parents.nil? | 152 re.paths.each { |e| cs.create_change(e) } |
151 parents.each do |ch, chparents| | |
152 ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact | |
153 end | 153 end |
154 end | 154 end |
155 end | 155 end |
156 end | 156 end |
157 end | 157 end |