Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2017-07-25 19:57:02 +0300
committerSean McGivern <sean@gitlab.com>2017-07-26 17:34:57 +0300
commit396b8f91ec47ffb5a02ebf6d713ef4cbf04f1f94 (patch)
treec27074b1608622faa29efb8275be983a9331b2db /app/models/merge_request_diff_file.rb
parent0c563225b663742b4f26731dc7bc822a38f7289b (diff)
Fix saving diffs that are not valid UTF-8
Previously, we used Psych, which would: 1. Check if a string was encoded as binary, and not ASCII-compatible. 2. Add the !binary tag in that case. 3. Convert to base64. We need to do the same thing, using a new column in place of the tag.
Diffstat (limited to 'app/models/merge_request_diff_file.rb')
-rw-r--r--app/models/merge_request_diff_file.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/app/models/merge_request_diff_file.rb b/app/models/merge_request_diff_file.rb
index 598ebd4d829..1199ff5af22 100644
--- a/app/models/merge_request_diff_file.rb
+++ b/app/models/merge_request_diff_file.rb
@@ -8,4 +8,14 @@ class MergeRequestDiffFile < ActiveRecord::Base
encode_utf8(diff) if diff.respond_to?(:encoding)
end
+
+ def diff
+ binary? ? super.unpack('m0').first : super
+ end
+
+ def to_hash
+ keys = Gitlab::Git::Diff::SERIALIZE_KEYS - [:diff]
+
+ as_json(only: keys).merge(diff: diff).with_indifferent_access
+ end
end