summaryrefslogtreecommitdiff
path: root/lib/gitlab/diff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-09-19 01:45:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-09-19 01:45:44 +0000
commit85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch)
tree9160f299afd8c80c038f08e1545be119f5e3f1e1 /lib/gitlab/diff
parent15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff)
downloadgitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'lib/gitlab/diff')
-rw-r--r--lib/gitlab/diff/highlight.rb2
-rw-r--r--lib/gitlab/diff/highlight_cache.rb28
2 files changed, 4 insertions, 26 deletions
diff --git a/lib/gitlab/diff/highlight.rb b/lib/gitlab/diff/highlight.rb
index 0d027809ba8..a5259079345 100644
--- a/lib/gitlab/diff/highlight.rb
+++ b/lib/gitlab/diff/highlight.rb
@@ -60,7 +60,7 @@ module Gitlab
# Only update text if line is found. This will prevent
# issues with submodules given the line only exists in diff content.
if rich_line
- line_prefix = diff_line.text =~ /\A(.)/ ? $1 : ' '
+ line_prefix = diff_line.text =~ /\A(.)/ ? Regexp.last_match(1) : ' '
"#{line_prefix}#{rich_line}".html_safe
end
end
diff --git a/lib/gitlab/diff/highlight_cache.rb b/lib/gitlab/diff/highlight_cache.rb
index 0c3b6b72313..0eb22e6b3cb 100644
--- a/lib/gitlab/diff/highlight_cache.rb
+++ b/lib/gitlab/diff/highlight_cache.rb
@@ -3,6 +3,7 @@
module Gitlab
module Diff
class HighlightCache
+ include Gitlab::Utils::Gzip
include Gitlab::Utils::StrongMemoize
EXPIRATION = 1.week
@@ -83,7 +84,7 @@ module Gitlab
redis.hset(
key,
diff_file_id,
- compose_data(highlighted_diff_lines_hash.to_json)
+ gzip_compress(highlighted_diff_lines_hash.to_json)
)
end
@@ -145,35 +146,12 @@ module Gitlab
end
results.map! do |result|
- Gitlab::Json.parse(extract_data(result), symbolize_names: true) unless result.nil?
+ Gitlab::Json.parse(gzip_decompress(result), symbolize_names: true) unless result.nil?
end
file_paths.zip(results).to_h
end
- def compose_data(json_data)
- # #compress returns ASCII-8BIT, so we need to force the encoding to
- # UTF-8 before caching it in redis, else we risk encoding mismatch
- # errors.
- #
- ActiveSupport::Gzip.compress(json_data).force_encoding("UTF-8")
- rescue Zlib::GzipFile::Error
- json_data
- end
-
- def extract_data(data)
- # Since we could be dealing with an already populated cache full of data
- # that isn't gzipped, we want to also check to see if the data is
- # gzipped before we attempt to #decompress it, thus we check the first
- # 2 bytes for "\x1F\x8B" to confirm it is a gzipped string. While a
- # non-gzipped string will raise a Zlib::GzipFile::Error, which we're
- # rescuing, we don't want to count on rescue for control flow.
- #
- data[0..1] == "\x1F\x8B" ? ActiveSupport::Gzip.decompress(data) : data
- rescue Zlib::GzipFile::Error
- data
- end
-
def cacheable?(diff_file)
diffable.present? && diff_file.text? && diff_file.diffable?
end