Skip to content
Snippets Groups Projects
Commit 16168b5b authored by Jacob Vosmaer (GitLab)'s avatar Jacob Vosmaer (GitLab)
Browse files

Use the iterator inside DiffCollection only once

parent fcdc4279
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -19,22 +19,19 @@ module Gitlab
@line_count = 0
@byte_count = 0
@overflow = false
@empty = true
@array = Array.new
end
 
def each(&block)
if @populated
# @iterator.each is slower than just iterating the array in place
@array.each(&block)
else
Gitlab::GitalyClient.migrate(:commit_raw_diffs) do
each_patch(&block)
end
Gitlab::GitalyClient.migrate(:commit_raw_diffs) do
each_patch(&block)
end
end
 
def empty?
!@iterator.any?
any? # Make sure the iterator has been exercised
@empty
end
 
def overflow?
Loading
Loading
@@ -60,7 +57,6 @@ module Gitlab
collection = each_with_index do |element, i|
@array[i] = yield(element)
end
@populated = true
collection
end
 
Loading
Loading
@@ -70,7 +66,6 @@ module Gitlab
return if @populated
 
each { nil } # force a loop through all diffs
@populated = true
nil
end
 
Loading
Loading
@@ -79,15 +74,17 @@ module Gitlab
end
 
def each_patch
@iterator.each_with_index do |raw, i|
# First yield cached Diff instances from @array
if @array[i]
yield @array[i]
next
end
i = 0
@array.each do |diff|
yield diff
i += 1
end
return if @overflow
return if @iterator.nil?
 
# We have exhausted @array, time to create new Diff instances or stop.
break if @overflow
@iterator.each do |raw|
@empty = false
 
if !@all_diffs && i >= @max_files
@overflow = true
Loading
Loading
@@ -113,7 +110,13 @@ module Gitlab
end
 
yield @array[i] = diff
i += 1
end
@populated = true
# Allow iterator to be garbage-collected. It cannot be reused anyway.
@iterator = nil
end
end
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment