Commit c9aa7932 authored by micael.bergeron's avatar micael.bergeron

revert to using a simple representation

parent bca72f59
...@@ -295,7 +295,7 @@ module API ...@@ -295,7 +295,7 @@ module API
expose :new_file?, as: :new_file expose :new_file?, as: :new_file
expose :renamed_file?, as: :renamed_file expose :renamed_file?, as: :renamed_file
expose :deleted_file?, as: :deleted_file expose :deleted_file?, as: :deleted_file
expose :diff expose :json_safe_diff, as: :diff
end end
class ProtectedRefAccess < Grape::Entity class ProtectedRefAccess < Grape::Entity
......
...@@ -24,7 +24,7 @@ module Gitlab ...@@ -24,7 +24,7 @@ module Gitlab
# return message if message type is binary # return message if message type is binary
detect = CharlockHolmes::EncodingDetector.detect(message) detect = CharlockHolmes::EncodingDetector.detect(message)
return message.force_encoding("BINARY") if binary?(message, detect) return message.force_encoding("BINARY") if all_binary?(message, detect)
if detect && detect[:encoding] && detect[:confidence] > ENCODING_CONFIDENCE_THRESHOLD if detect && detect[:encoding] && detect[:confidence] > ENCODING_CONFIDENCE_THRESHOLD
# force detected encoding if we have sufficient confidence. # force detected encoding if we have sufficient confidence.
...@@ -34,14 +34,21 @@ module Gitlab ...@@ -34,14 +34,21 @@ module Gitlab
# encode and clean the bad chars # encode and clean the bad chars
message.replace clean(message) message.replace clean(message)
rescue => e rescue => e
byebug
encoding = detect ? detect[:encoding] : "unknown" encoding = detect ? detect[:encoding] : "unknown"
"--broken encoding: #{encoding}" "--broken encoding: #{encoding}"
end end
def binary?(message, detect=nil) def all_binary?(data, detect=nil)
detect ||= CharlockHolmes::EncodingDetector.detect(message) detect ||= CharlockHolmes::EncodingDetector.detect(data)
detect && detect[:type] == :binary && detect[:confidence] == 100 detect && detect[:type] == :binary
end
def libgit2_binary?(data)
# EncodingDetector checks the first 1024 * 1024 bytes for NUL byte, libgit2 checks
# only the first 8000 (https://github.com/libgit2/libgit2/blob/2ed855a9e8f9af211e7274021c2264e600c0f86b/src/filter.h#L15),
# which is what we use below to keep a consistent behavior.
detect = CharlockHolmes::EncodingDetector.new(8000).detect(data)
all_binary?(data, detect)
end end
def encode_utf8(message) def encode_utf8(message)
......
...@@ -42,14 +42,6 @@ module Gitlab ...@@ -42,14 +42,6 @@ module Gitlab
end end
end end
def binary?(data)
# EncodingDetector checks the first 1024 * 1024 bytes for NUL byte, libgit2 checks
# only the first 8000 (https://github.com/libgit2/libgit2/blob/2ed855a9e8f9af211e7274021c2264e600c0f86b/src/filter.h#L15),
# which is what we use below to keep a consistent behavior.
detect = CharlockHolmes::EncodingDetector.new(8000).detect(data)
detect && detect[:type] == :binary
end
# Returns an array of Blob instances, specified in blob_references as # Returns an array of Blob instances, specified in blob_references as
# [[commit_sha, path], [commit_sha, path], ...]. If blob_size_limit < 0 then the # [[commit_sha, path], [commit_sha, path], ...]. If blob_size_limit < 0 then the
# full blob contents are returned. If blob_size_limit >= 0 then each blob will # full blob contents are returned. If blob_size_limit >= 0 then each blob will
...@@ -169,6 +161,10 @@ module Gitlab ...@@ -169,6 +161,10 @@ module Gitlab
end end
end end
end end
def binary?(data)
EncodingHelper.libgit2_binary?(data)
end
end end
def initialize(options) def initialize(options)
......
...@@ -197,6 +197,13 @@ module Gitlab ...@@ -197,6 +197,13 @@ module Gitlab
@collapsed = true @collapsed = true
end end
def json_safe_diff
return @diff unless all_binary?(@diff)
# the diff is binary, let's make a message for it
Diff::binary_message(@old_path, @new_path)
end
private private
def init_from_rugged(rugged) def init_from_rugged(rugged)
...@@ -221,14 +228,7 @@ module Gitlab ...@@ -221,14 +228,7 @@ module Gitlab
# binary we're not going to display anything so we skip the size check. # binary we're not going to display anything so we skip the size check.
return if !patch.delta.binary? && prune_large_patch(patch) return if !patch.delta.binary? && prune_large_patch(patch)
diff = strip_diff_headers(patch.to_s) @diff = encode!(strip_diff_headers(patch.to_s))
@diff = if binary?(diff)
# the diff is binary, let's make a message for it
Diff::binary_message(patch.delta.old_file[:path],
patch.delta.new_file[:path])
else
encode!(diff)
end
end end
def init_from_hash(hash) def init_from_hash(hash)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment