summaryrefslogtreecommitdiffstats
path: root/app/models/repository
diff options
context:
space:
mode:
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>2012-03-07 05:57:59 +0000
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>2012-03-07 05:57:59 +0000
commitbcba955456c798ab0c22b2132fe9ff4cc44764fe (patch)
tree51a948ad88aca5b04e786de1e7decf2351d3fde7 /app/models/repository
parentf0987e4b8f014bdb226a1eb1c67e78dcae1c8c49 (diff)
downloadredmine-bcba955456c798ab0c22b2132fe9ff4cc44764fe.tar.gz
redmine-bcba955456c798ab0c22b2132fe9ff4cc44764fe.zip
scm: git: reduce saving heads times in fetching revisions (#8857, #9472)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9143 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/repository')
-rw-r--r--app/models/repository/git.rb18
1 files changed, 15 insertions, 3 deletions
diff --git a/app/models/repository/git.rb b/app/models/repository/git.rb
index 98c5788bf..9f2fa7bed 100644
--- a/app/models/repository/git.rb
+++ b/app/models/repository/git.rb
@@ -154,10 +154,13 @@ class Repository::Git < Repository
from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br]
h["branches"][br] ||= {}
begin
+ cnt = 0
+ last_rev_scmid = nil
scm.revisions('', from_scmid, br, {:reverse => true}) do |rev|
+ cnt += 1
db_rev = find_changeset_by_name(rev.revision)
- transaction do
- if db_rev.nil?
+ if db_rev.nil?
+ transaction do
db_saved_rev = save_revision(rev)
parents = {}
parents[db_saved_rev] = rev.parents unless rev.parents.nil?
@@ -165,11 +168,20 @@ class Repository::Git < Repository
ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact
end
end
- h["branches"][br]["last_scmid"] = rev.scmid
+ end
+ last_rev_scmid = rev.scmid
+ if cnt > 100
+ cnt = 0
+ h["branches"][br]["last_scmid"] = last_rev_scmid
merge_extra_info(h)
self.save
end
end
+ unless last_rev_scmid.nil?
+ h["branches"][br]["last_scmid"] = last_rev_scmid
+ merge_extra_info(h)
+ self.save
+ end
rescue Redmine::Scm::Adapters::CommandFailed => e
logger.error("save revisions error: #{e.message}")
end