Commit 924643198c924c19d0b468b27ee92077cefe7424
Exists in
master
and in
4 other branches
Merge pull request #3252 from hiroponz/fix-timeout-large-repository
Fix timeout error while showing the network graph.
Showing
4 changed files
with
46 additions
and
22 deletions
Show diff stats
app/models/network/graph.rb
... | ... | @@ -25,15 +25,7 @@ module Network |
25 | 25 | def collect_commits |
26 | 26 | refs_cache = build_refs_cache |
27 | 27 | |
28 | - Grit::Commit.find_all( | |
29 | - @repo, | |
30 | - nil, | |
31 | - { | |
32 | - date_order: true, | |
33 | - max_count: self.class.max_count, | |
34 | - skip: count_to_display_commit_in_center | |
35 | - } | |
36 | - ) | |
28 | + find_commits(count_to_display_commit_in_center) | |
37 | 29 | .map do |commit| |
38 | 30 | # Decorate with app/model/network/commit.rb |
39 | 31 | Network::Commit.new(commit, refs_cache[commit.id]) |
... | ... | @@ -74,18 +66,47 @@ module Network |
74 | 66 | |
75 | 67 | # Skip count that the target commit is displayed in center. |
76 | 68 | def count_to_display_commit_in_center |
77 | - commit_index = Grit::Commit.find_all(@repo, nil, {date_order: true}).index do |c| | |
78 | - c.id == @commit.id | |
69 | + offset = -1 | |
70 | + skip = 0 | |
71 | + while offset == -1 | |
72 | + tmp_commits = find_commits(skip) | |
73 | + if tmp_commits.size > 0 | |
74 | + index = tmp_commits.index do |c| | |
75 | + c.id == @commit.id | |
76 | + end | |
77 | + | |
78 | + if index | |
79 | + # Find the target commit | |
80 | + offset = index + skip | |
81 | + else | |
82 | + skip += self.class.max_count | |
83 | + end | |
84 | + else | |
85 | + # Cant't find the target commit in the repo. | |
86 | + offset = 0 | |
87 | + end | |
79 | 88 | end |
80 | 89 | |
81 | - if commit_index && (self.class.max_count / 2 < commit_index) then | |
90 | + if self.class.max_count / 2 < offset then | |
82 | 91 | # get max index that commit is displayed in the center. |
83 | - commit_index - self.class.max_count / 2 | |
92 | + offset - self.class.max_count / 2 | |
84 | 93 | else |
85 | 94 | 0 |
86 | 95 | end |
87 | 96 | end |
88 | 97 | |
98 | + def find_commits(skip = 0) | |
99 | + Grit::Commit.find_all( | |
100 | + @repo, | |
101 | + nil, | |
102 | + { | |
103 | + date_order: true, | |
104 | + max_count: self.class.max_count, | |
105 | + skip: skip | |
106 | + } | |
107 | + ) | |
108 | + end | |
109 | + | |
89 | 110 | def commits_sort_by_ref |
90 | 111 | @commits.sort do |a,b| |
91 | 112 | if include_ref?(a) | ... | ... |
features/support/env.rb
... | ... | @@ -28,8 +28,8 @@ require 'capybara/poltergeist' |
28 | 28 | Capybara.javascript_driver = :poltergeist |
29 | 29 | Spinach.hooks.on_tag("javascript") do |
30 | 30 | ::Capybara.current_driver = ::Capybara.javascript_driver |
31 | - ::Capybara.default_wait_time = 5 | |
32 | 31 | end |
32 | +Capybara.default_wait_time = 10 | |
33 | 33 | |
34 | 34 | |
35 | 35 | DatabaseCleaner.strategy = :truncation | ... | ... |
spec/features/projects_spec.rb
spec/features/security/project_access_spec.rb
... | ... | @@ -230,14 +230,17 @@ describe "Application access" do |
230 | 230 | end |
231 | 231 | |
232 | 232 | describe "GET /project_code/files" do |
233 | - subject { files_project_path(project) } | |
233 | + pending("ProjectsController#files have been deleted.") do | |
234 | 234 | |
235 | - it { should be_allowed_for master } | |
236 | - it { should be_allowed_for reporter } | |
237 | - it { should be_denied_for :admin } | |
238 | - it { should be_denied_for guest } | |
239 | - it { should be_denied_for :user } | |
240 | - it { should be_denied_for :visitor } | |
235 | + subject { files_project_path(project) } | |
236 | + | |
237 | + it { should be_allowed_for master } | |
238 | + it { should be_allowed_for reporter } | |
239 | + it { should be_denied_for :admin } | |
240 | + it { should be_denied_for guest } | |
241 | + it { should be_denied_for :user } | |
242 | + it { should be_denied_for :visitor } | |
243 | + end | |
241 | 244 | end |
242 | 245 | end |
243 | 246 | end | ... | ... |