]> source.dussan.org Git - redmine.git/commitdiff
scm: mercurial: transaction for each imported revisions (#10470)
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Thu, 29 Mar 2012 16:50:10 +0000 (16:50 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Thu, 29 Mar 2012 16:50:10 +0000 (16:50 +0000)
Subversion transaction switched at r2563.
Subversion and Mercurial have a sequential revision number.
So, Mercurial can use the same logic with Subversion.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9288 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/repository/mercurial.rb

index b2ee184453ca13de8f4fc228ed5adc355ef9b3bc..c31682783717e540dd5e3e4cc147264fe9c102d8 100644 (file)
@@ -138,19 +138,21 @@ class Repository::Mercurial < Repository
 
     logger.debug "Fetching changesets for repository #{url}" if logger
     (db_rev + 1).step(scm_rev, FETCH_AT_ONCE) do |i|
-      transaction do
-        scm.each_revision('', i, [i + FETCH_AT_ONCE - 1, scm_rev].min) do |re|
+      scm.each_revision('', i, [i + FETCH_AT_ONCE - 1, scm_rev].min) do |re|
+        transaction do
           cs = Changeset.create(:repository   => self,
                                 :revision     => re.revision,
                                 :scmid        => re.scmid,
                                 :committer    => re.author,
                                 :committed_on => re.time,
                                 :comments     => re.message)
-          re.paths.each { |e| cs.create_change(e) }
-          parents = {}
-          parents[cs] = re.parents unless re.parents.nil?
-          parents.each do |ch, chparents|
-            ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact
+          unless cs.new_record?
+            re.paths.each { |e| cs.create_change(e) }
+            parents = {}
+            parents[cs] = re.parents unless re.parents.nil?
+            parents.each do |ch, chparents|
+              ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact
+            end
           end
         end
       end