33 lines
879 B
Ruby
33 lines
879 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module BulkImports
|
||
|
module PathNormalization
|
||
|
private
|
||
|
|
||
|
def normalize_path(path)
|
||
|
path = path.parameterize.downcase
|
||
|
return path if path =~ Gitlab::Regex.oci_repository_path_regex
|
||
|
|
||
|
# remove invalid characters from end and start of path
|
||
|
delete_invalid_edge_characters(delete_invalid_edge_characters(path))
|
||
|
# remove invalid multiplied characters
|
||
|
delete_invalid_multiple_characters(path)
|
||
|
end
|
||
|
|
||
|
def delete_invalid_edge_characters(path)
|
||
|
path.reverse!
|
||
|
path.each_char do |char|
|
||
|
break path unless char.match(Gitlab::Regex.oci_repository_path_regex).nil?
|
||
|
|
||
|
path.delete_prefix!(char)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def delete_invalid_multiple_characters(path)
|
||
|
path.gsub!('-_', '-') if path.include?('-_')
|
||
|
path.gsub!('_-', '-') if path.include?('_-')
|
||
|
path
|
||
|
end
|
||
|
end
|
||
|
end
|