summaryrefslogtreecommitdiffstats
path: root/lib/redmine
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-06-29 09:41:42 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-06-29 09:41:42 +0000
commit00593f2f345f51565535257cf183b004c1087a21 (patch)
tree78de030885a13946311dadaa679cd1bdfb82f2d9 /lib/redmine
parenta40add57de53ed3f5b0c91028ce45d9f4ec902d3 (diff)
downloadredmine-00593f2f345f51565535257cf183b004c1087a21.tar.gz
redmine-00593f2f345f51565535257cf183b004c1087a21.zip
Reduces memory usage when importing large git repositories (#1482).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1599 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib/redmine')
-rw-r--r--lib/redmine/scm/adapters/git_adapter.rb33
1 files changed, 22 insertions, 11 deletions
diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb
index d05b4fb38..30d624001 100644
--- a/lib/redmine/scm/adapters/git_adapter.rb
+++ b/lib/redmine/scm/adapters/git_adapter.rb
@@ -139,10 +139,10 @@ module Redmine
def revisions(path, identifier_from, identifier_to, options={})
revisions = Revisions.new
cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw "
+ cmd << " --reverse" if options[:reverse]
cmd << " -n #{options[:limit].to_i} " if (!options.nil?) && options[:limit]
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from
cmd << " #{shell_quote identifier_to} " if identifier_to
- #cmd << " HEAD " if !identifier_to
shellout(cmd) do |io|
files=[]
changeset = {}
@@ -155,13 +155,18 @@ module Redmine
value = $1
if (parsing_descr == 1 || parsing_descr == 2)
parsing_descr = 0
- revisions << Revision.new({:identifier => changeset[:commit],
- :scmid => changeset[:commit],
- :author => changeset[:author],
- :time => Time.parse(changeset[:date]),
- :message => changeset[:description],
- :paths => files
- })
+ revision = Revision.new({:identifier => changeset[:commit],
+ :scmid => changeset[:commit],
+ :author => changeset[:author],
+ :time => Time.parse(changeset[:date]),
+ :message => changeset[:description],
+ :paths => files
+ })
+ if block_given?
+ yield revision
+ else
+ revisions << revision
+ end
changeset = {}
files = []
revno = revno + 1
@@ -190,14 +195,20 @@ module Redmine
end
end
- revisions << Revision.new({:identifier => changeset[:commit],
+ if changeset[:commit]
+ revision = Revision.new({:identifier => changeset[:commit],
:scmid => changeset[:commit],
:author => changeset[:author],
:time => Time.parse(changeset[:date]),
:message => changeset[:description],
:paths => files
- }) if changeset[:commit]
-
+ })
+ if block_given?
+ yield revision
+ else
+ revisions << revision
+ end
+ end
end
return nil if $? && $?.exitstatus != 0