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:
Diffstat (limited to 'lib/gitlab/dependency_linker/go_sum_linker.rb')
-rw-r--r--lib/gitlab/dependency_linker/go_sum_linker.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/gitlab/dependency_linker/go_sum_linker.rb b/lib/gitlab/dependency_linker/go_sum_linker.rb
new file mode 100644
index 00000000000..20dc82ede9f
--- /dev/null
+++ b/lib/gitlab/dependency_linker/go_sum_linker.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module DependencyLinker
+ class GoSumLinker < GoModLinker
+ self.file_type = :go_sum
+
+ private
+
+ BASE64 = Gitlab::Regex.base64_regex
+ REGEX = Regexp.new("^\\s*(?<name>#{NAME.source})\\s+(?<version>v#{SEMVER.source})(\/go.mod)?\\s+h1:(?<checksum>#{BASE64.source})\\s*$", NAME.options).freeze
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def link_dependencies
+ highlighted_lines.map!.with_index do |rich_line, i|
+ plain_line = plain_lines[i].chomp
+ match = REGEX.match(plain_line)
+ next rich_line unless match
+
+ i0, j0 = match.offset(:name)
+ i2, j2 = match.offset(:checksum)
+
+ marker = StringRangeMarker.new(plain_line, rich_line.html_safe)
+ marker.mark([i0..(j0 - 1), i2..(j2 - 1)]) do |text, left:, right:|
+ if left
+ url = package_url(text, match[:version])
+ url ? link_tag(text, url) : text
+
+ elsif right
+ link_tag(text, "https://sum.golang.org/lookup/#{match[:name]}@#{match[:version]}")
+ end
+ end
+ end
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+ end
+end