[6.6] Large diffs are still broken
Created by: dan-blanchard
Despite the improvements to large diff handling that are supposed to be in 6.6, we are still experiencing many problems with merge requests and commits with "large" diffs.
The problem we had before was #5239 (as far back as 6.1), where we got the error:
Started GET "/nlp/alek/merge_requests/1/diffs?_=1380646328731" for 127.0.0.1 at 2013-10-01 12:52:10 -0400
Processing by Projects::MergeRequestsController#diffs as JS
Parameters: {"_"=>"1380646328731", "project_id"=>"nlp/alek", "id"=>"1"}
Completed 500 Internal Server Error in 282ms
NoMethodError (undefined method `diff' for "--broken-diff":String):
app/models/commit.rb:25:in `block in diff_line_count'
app/models/commit.rb:25:in `each'
app/models/commit.rb:25:in `reduce'
app/models/commit.rb:25:in `diff_line_count'
app/controllers/projects/merge_requests_controller.rb:44:in `diffs'
Now when we try to download a large diff by clicking the plain diff
link on the page for a particular commit, we experience a slightly different 500 error:
Completed 500 Internal Server Error in 6849ms
Grit::Git::GitTimeout (Grit::Git::GitTimeout):
app/models/commit.rb:136:in `method_missing'
app/controllers/projects/commit_controller.rb:42:in `block (2 levels) in show'
app/controllers/projects/commit_controller.rb:35:in `show'
app/controllers/application_controller.rb:57:in `set_current_user_for_thread'
That only happens when we view the individual commits and try to download their diffs. If we try to download a merge request's diff that contains a commit with a "large" diff, we get a file that contains only the string false
instead of a 500 error.
Please let me know if I can provide any further information to help track down this issue, as it makes it very difficult to perform code review currently.