45 lines
1 KiB
Ruby
45 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Packages
|
||
|
module Go
|
||
|
class VersionFinder
|
||
|
include Gitlab::Golang
|
||
|
|
||
|
attr_reader :mod
|
||
|
|
||
|
def initialize(mod)
|
||
|
@mod = mod
|
||
|
end
|
||
|
|
||
|
def execute
|
||
|
@mod.project.repository.tags
|
||
|
.filter { |tag| semver_tag? tag }
|
||
|
.map { |tag| @mod.version_by(ref: tag) }
|
||
|
.filter { |ver| ver.valid? }
|
||
|
end
|
||
|
|
||
|
def find(target)
|
||
|
case target
|
||
|
when String
|
||
|
if pseudo_version? target
|
||
|
semver = parse_semver(target)
|
||
|
commit = pseudo_version_commit(@mod.project, semver)
|
||
|
Packages::Go::ModuleVersion.new(@mod, :pseudo, commit, name: target, semver: semver)
|
||
|
else
|
||
|
@mod.version_by(ref: target)
|
||
|
end
|
||
|
|
||
|
when Gitlab::Git::Ref
|
||
|
@mod.version_by(ref: target)
|
||
|
|
||
|
when ::Commit, Gitlab::Git::Commit
|
||
|
@mod.version_by(commit: target)
|
||
|
|
||
|
else
|
||
|
raise ArgumentError.new 'not a valid target'
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|