Merge branch '42497-rubocop-style-regexpliteral' into 'master'
Enable Style/RegexpLiteral cop Closes #42497 See merge request gitlab-org/gitlab-ce!16752
This commit is contained in:
commit
76b9f1a4c5
|
@ -704,7 +704,9 @@ Style/RedundantSelf:
|
|||
# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
|
||||
# SupportedStyles: slashes, percent_r, mixed
|
||||
Style/RegexpLiteral:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
EnforcedStyle: mixed
|
||||
AllowInnerSlashes: false
|
||||
|
||||
# Offense count: 36
|
||||
# Cop supports --auto-correct.
|
||||
|
|
|
@ -5,7 +5,7 @@ class HelpController < ApplicationController
|
|||
|
||||
# Taken from Jekyll
|
||||
# https://github.com/jekyll/jekyll/blob/3.5-stable/lib/jekyll/document.rb#L13
|
||||
YAML_FRONT_MATTER_REGEXP = %r!\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)!m
|
||||
YAML_FRONT_MATTER_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
|
||||
|
||||
def index
|
||||
# Remove YAML frontmatter so that it doesn't look weird
|
||||
|
|
|
@ -403,6 +403,6 @@ class ProjectsController < Projects::ApplicationController
|
|||
# to
|
||||
# localhost/group/project
|
||||
#
|
||||
redirect_to request.original_url.sub(/\.git\/?\Z/, '') if params[:format] == 'git'
|
||||
redirect_to request.original_url.sub(%r{\.git/?\Z}, '') if params[:format] == 'git'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
module SidekiqHelper
|
||||
SIDEKIQ_PS_REGEXP = /\A
|
||||
SIDEKIQ_PS_REGEXP = %r{\A
|
||||
(?<pid>\d+)\s+
|
||||
(?<cpu>[\d\.,]+)\s+
|
||||
(?<mem>[\d\.,]+)\s+
|
||||
(?<state>[DIEKNRSTVWXZNLpsl\+<>\/\d]+)\s+
|
||||
(?<state>[DIEKNRSTVWXZNLpsl\+<>/\d]+)\s+
|
||||
(?<start>.+?)\s+
|
||||
(?<command>(?:ruby\d+:\s+)?sidekiq.*\].*)
|
||||
\z/x
|
||||
\z}x
|
||||
|
||||
def parse_sidekiq_ps(line)
|
||||
match = line.strip.match(SIDEKIQ_PS_REGEXP)
|
||||
|
|
|
@ -11,7 +11,7 @@ module SubmoduleHelper
|
|||
url = File.join(Gitlab.config.gitlab.url, @project.full_path)
|
||||
end
|
||||
|
||||
if url =~ /([^\/:]+)\/([^\/]+(?:\.git)?)\Z/
|
||||
if url =~ %r{([^/:]+)/([^/]+(?:\.git)?)\Z}
|
||||
namespace, project = $1, $2
|
||||
gitlab_hosts = [Gitlab.config.gitlab.url,
|
||||
Gitlab.config.gitlab_shell.ssh_path_prefix]
|
||||
|
@ -23,7 +23,7 @@ module SubmoduleHelper
|
|||
end
|
||||
end
|
||||
|
||||
namespace.sub!(/\A\//, '')
|
||||
namespace.sub!(%r{\A/}, '')
|
||||
project.rstrip!
|
||||
project.sub!(/\.git\z/, '')
|
||||
|
||||
|
@ -47,11 +47,11 @@ module SubmoduleHelper
|
|||
protected
|
||||
|
||||
def github_dot_com_url?(url)
|
||||
url =~ /github\.com[\/:][^\/]+\/[^\/]+\Z/
|
||||
url =~ %r{github\.com[/:][^/]+/[^/]+\Z}
|
||||
end
|
||||
|
||||
def gitlab_dot_com_url?(url)
|
||||
url =~ /gitlab\.com[\/:][^\/]+\/[^\/]+\Z/
|
||||
url =~ %r{gitlab\.com[/:][^/]+/[^/]+\Z}
|
||||
end
|
||||
|
||||
def self_url?(url, namespace, project)
|
||||
|
@ -65,7 +65,7 @@ module SubmoduleHelper
|
|||
|
||||
def relative_self_url?(url)
|
||||
# (./)?(../repo.git) || (./)?(../../project/repo.git) )
|
||||
url =~ /\A((\.\/)?(\.\.\/))(?!(\.\.)|(.*\/)).*(\.git)?\z/ || url =~ /\A((\.\/)?(\.\.\/){2})(?!(\.\.))([^\/]*)\/(?!(\.\.)|(.*\/)).*(\.git)?\z/
|
||||
url =~ %r{\A((\./)?(\.\./))(?!(\.\.)|(.*/)).*(\.git)?\z} || url =~ %r{\A((\./)?(\.\./){2})(?!(\.\.))([^/]*)/(?!(\.\.)|(.*/)).*(\.git)?\z}
|
||||
end
|
||||
|
||||
def standard_links(host, namespace, project, commit)
|
||||
|
|
|
@ -110,7 +110,7 @@ module TreeHelper
|
|||
|
||||
# returns the relative path of the first subdir that doesn't have only one directory descendant
|
||||
def flatten_tree(root_path, tree)
|
||||
return tree.flat_path.sub(/\A#{root_path}\//, '') if tree.flat_path.present?
|
||||
return tree.flat_path.sub(%r{\A#{root_path}/}, '') if tree.flat_path.present?
|
||||
|
||||
subtree = Gitlab::Git::Tree.where(@repository, @commit.id, tree.path)
|
||||
if subtree.count == 1 && subtree.first.dir?
|
||||
|
|
|
@ -292,7 +292,7 @@ module Ci
|
|||
|
||||
def repo_url
|
||||
auth = "gitlab-ci-token:#{ensure_token!}@"
|
||||
project.http_url_to_repo.sub(/^https?:\/\//) do |prefix|
|
||||
project.http_url_to_repo.sub(%r{^https?://}) do |prefix|
|
||||
prefix + auth
|
||||
end
|
||||
end
|
||||
|
|
|
@ -141,7 +141,7 @@ class CommitStatus < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def group_name
|
||||
name.to_s.gsub(/\d+[\s:\/\\]+\d+\s*/, '').strip
|
||||
name.to_s.gsub(%r{\d+[\s:/\\]+\d+\s*}, '').strip
|
||||
end
|
||||
|
||||
def failed_but_allowed?
|
||||
|
|
|
@ -9,13 +9,13 @@ require 'task_list/filter'
|
|||
module Taskable
|
||||
COMPLETED = 'completed'.freeze
|
||||
INCOMPLETE = 'incomplete'.freeze
|
||||
ITEM_PATTERN = /
|
||||
ITEM_PATTERN = %r{
|
||||
^
|
||||
\s*(?:[-+*]|(?:\d+\.)) # list prefix required - task item has to be always in a list
|
||||
\s+ # whitespace prefix has to be always presented for a list item
|
||||
(\[\s\]|\[[xX]\]) # checkbox
|
||||
(\s.+) # followed by whitespace and some text.
|
||||
/x
|
||||
}x
|
||||
|
||||
def self.get_tasks(content)
|
||||
content.to_s.scan(ITEM_PATTERN).map do |checkbox, label|
|
||||
|
|
|
@ -115,7 +115,7 @@ class Environment < ActiveRecord::Base
|
|||
def formatted_external_url
|
||||
return nil unless external_url
|
||||
|
||||
external_url.gsub(/\A.*?:\/\//, '')
|
||||
external_url.gsub(%r{\A.*?://}, '')
|
||||
end
|
||||
|
||||
def stop_action?
|
||||
|
|
|
@ -234,7 +234,7 @@ class Project < ActiveRecord::Base
|
|||
validates :creator, presence: true, on: :create
|
||||
validates :description, length: { maximum: 2000 }, allow_blank: true
|
||||
validates :ci_config_path,
|
||||
format: { without: /(\.{2}|\A\/)/,
|
||||
format: { without: %r{(\.{2}|\A/)},
|
||||
message: 'cannot include leading slash or directory traversal.' },
|
||||
length: { maximum: 255 },
|
||||
allow_blank: true
|
||||
|
@ -1338,7 +1338,7 @@ class Project < ActiveRecord::Base
|
|||
host = "#{subdomain}.#{Settings.pages.host}".downcase
|
||||
|
||||
# The host in URL always needs to be downcased
|
||||
url = Gitlab.config.pages.url.sub(/^https?:\/\//) do |prefix|
|
||||
url = Gitlab.config.pages.url.sub(%r{^https?://}) do |prefix|
|
||||
"#{prefix}#{subdomain}."
|
||||
end.downcase
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ http://app.asana.com/-/account_api'
|
|||
# - fix/ed/es/ing
|
||||
# - close/s/d
|
||||
# - closing
|
||||
issue_finder = /(fix\w*|clos[ei]\w*+)?\W*(?:https:\/\/app\.asana\.com\/\d+\/\d+\/(\d+)|#(\d+))/i
|
||||
issue_finder = %r{(fix\w*|clos[ei]\w*+)?\W*(?:https://app\.asana\.com/\d+/\d+/(\d+)|#(\d+))}i
|
||||
|
||||
message.scan(issue_finder).each do |tuple|
|
||||
# tuple will be
|
||||
|
|
|
@ -10,9 +10,9 @@ class IssueTrackerService < Service
|
|||
# overriden patterns. See ReferenceRegexes::EXTERNAL_PATTERN
|
||||
def self.reference_pattern(only_long: false)
|
||||
if only_long
|
||||
%r{(\b[A-Z][A-Z0-9_]+-)(?<issue>\d+)}
|
||||
/(\b[A-Z][A-Z0-9_]+-)(?<issue>\d+)/
|
||||
else
|
||||
%r{(\b[A-Z][A-Z0-9_]+-|#{Issue.reference_prefix})(?<issue>\d+)}
|
||||
/(\b[A-Z][A-Z0-9_]+-|#{Issue.reference_prefix})(?<issue>\d+)/
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ class JiraService < IssueTrackerService
|
|||
|
||||
# {PROJECT-KEY}-{NUMBER} Examples: JIRA-1, PROJECT-1
|
||||
def self.reference_pattern(only_long: true)
|
||||
@reference_pattern ||= %r{(?<issue>\b([A-Z][A-Z0-9_]+-)\d+)}
|
||||
@reference_pattern ||= /(?<issue>\b([A-Z][A-Z0-9_]+-)\d+)/
|
||||
end
|
||||
|
||||
def initialize_properties
|
||||
|
|
|
@ -842,13 +842,13 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def full_website_url
|
||||
return "http://#{website_url}" if website_url !~ /\Ahttps?:\/\//
|
||||
return "http://#{website_url}" if website_url !~ %r{\Ahttps?://}
|
||||
|
||||
website_url
|
||||
end
|
||||
|
||||
def short_website_url
|
||||
website_url.sub(/\Ahttps?:\/\//, '')
|
||||
website_url.sub(%r{\Ahttps?://}, '')
|
||||
end
|
||||
|
||||
def all_ssh_keys
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Enable RuboCop Style/RegexpLiteral
|
||||
merge_request: 16752
|
||||
author: Takuya Noguchi
|
||||
type: other
|
|
@ -110,7 +110,7 @@ class Settings < Settingslogic
|
|||
url = "http://#{url}" unless url.start_with?('http')
|
||||
|
||||
# Get rid of the path so that we don't even have to encode it
|
||||
url_without_path = url.sub(%r{(https?://[^\/]+)/?.*}, '\1')
|
||||
url_without_path = url.sub(%r{(https?://[^/]+)/?.*}, '\1')
|
||||
|
||||
URI.parse(url_without_path).host
|
||||
end
|
||||
|
@ -469,10 +469,10 @@ end
|
|||
# repository_downloads_path value.
|
||||
#
|
||||
repositories_storages = Settings.repositories.storages.values
|
||||
repository_downloads_path = Settings.gitlab['repository_downloads_path'].to_s.gsub(/\/$/, '')
|
||||
repository_downloads_path = Settings.gitlab['repository_downloads_path'].to_s.gsub(%r{/$}, '')
|
||||
repository_downloads_full_path = File.expand_path(repository_downloads_path, Settings.gitlab['user_home'])
|
||||
|
||||
if repository_downloads_path.blank? || repositories_storages.any? { |rs| [repository_downloads_path, repository_downloads_full_path].include?(rs['path'].gsub(/\/$/, '')) }
|
||||
if repository_downloads_path.blank? || repositories_storages.any? { |rs| [repository_downloads_path, repository_downloads_full_path].include?(rs['path'].gsub(%r{/$}, '')) }
|
||||
Settings.gitlab['repository_downloads_path'] = File.join(Settings.shared['path'], 'cache/archive')
|
||||
end
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ elsif Gitlab::Database.mysql?
|
|||
def initialize_type_map(mapping)
|
||||
super mapping
|
||||
|
||||
mapping.register_type(%r(timestamp)i) do |sql_type|
|
||||
mapping.register_type(/timestamp/i) do |sql_type|
|
||||
precision = extract_precision(sql_type)
|
||||
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlDateTimeWithTimeZone.new(precision: precision)
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace :admin do
|
||||
resources :users, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ } do
|
||||
resources :users, constraints: { id: %r{[a-zA-Z./0-9_\-]+} } do
|
||||
resources :keys, only: [:show, :destroy]
|
||||
resources :identities, except: [:show]
|
||||
resources :impersonation_tokens, only: [:index, :create] do
|
||||
|
|
|
@ -35,7 +35,7 @@ constraints(GroupUrlConstrainer.new) do
|
|||
post :toggle_subscription, on: :member
|
||||
end
|
||||
|
||||
resources :milestones, constraints: { id: /[^\/]+/ }, only: [:index, :show, :edit, :update, :new, :create] do
|
||||
resources :milestones, constraints: { id: %r{[^/]+} }, only: [:index, :show, :edit, :update, :new, :create] do
|
||||
member do
|
||||
get :merge_requests
|
||||
get :participants
|
||||
|
@ -52,7 +52,7 @@ constraints(GroupUrlConstrainer.new) do
|
|||
|
||||
resources :uploads, only: [:create] do
|
||||
collection do
|
||||
get ":secret/:filename", action: :show, as: :show, constraints: { filename: /[^\/]+/ }
|
||||
get ":secret/:filename", action: :show, as: :show, constraints: { filename: %r{[^/]+} }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,7 +40,7 @@ constraints(ProjectUrlConstrainer.new) do
|
|||
#
|
||||
# Templates
|
||||
#
|
||||
get '/templates/:template_type/:key' => 'templates#show', as: :template, constraints: { key: /[^\/]+/ }
|
||||
get '/templates/:template_type/:key' => 'templates#show', as: :template, constraints: { key: %r{[^/]+} }
|
||||
|
||||
resource :avatar, only: [:show, :destroy]
|
||||
resources :commit, only: [:show], constraints: { id: /\h{7,40}/ } do
|
||||
|
@ -55,7 +55,7 @@ constraints(ProjectUrlConstrainer.new) do
|
|||
end
|
||||
|
||||
resource :pages, only: [:show, :destroy] do
|
||||
resources :domains, only: [:show, :new, :create, :destroy], controller: 'pages_domains', constraints: { id: /[^\/]+/ }
|
||||
resources :domains, only: [:show, :new, :create, :destroy], controller: 'pages_domains', constraints: { id: %r{[^/]+} }
|
||||
end
|
||||
|
||||
resources :snippets, concerns: :awardable, constraints: { id: /\d+/ } do
|
||||
|
@ -65,7 +65,7 @@ constraints(ProjectUrlConstrainer.new) do
|
|||
end
|
||||
end
|
||||
|
||||
resources :services, constraints: { id: /[^\/]+/ }, only: [:index, :edit, :update] do
|
||||
resources :services, constraints: { id: %r{[^/]+} }, only: [:index, :edit, :update] do
|
||||
member do
|
||||
put :test
|
||||
end
|
||||
|
@ -346,7 +346,7 @@ constraints(ProjectUrlConstrainer.new) do
|
|||
end
|
||||
end
|
||||
|
||||
resources :project_members, except: [:show, :new, :edit], constraints: { id: /[a-zA-Z.\/0-9_\-#%+]+/ }, concerns: :access_requestable do
|
||||
resources :project_members, except: [:show, :new, :edit], constraints: { id: %r{[a-zA-Z./0-9_\-#%+]+} }, concerns: :access_requestable do
|
||||
collection do
|
||||
delete :leave
|
||||
|
||||
|
@ -379,7 +379,7 @@ constraints(ProjectUrlConstrainer.new) do
|
|||
|
||||
resources :uploads, only: [:create] do
|
||||
collection do
|
||||
get ":secret/:filename", action: :show, as: :show, constraints: { filename: /[^\/]+/ }
|
||||
get ":secret/:filename", action: :show, as: :show, constraints: { filename: %r{[^/]+} }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -2,17 +2,17 @@ scope path: :uploads do
|
|||
# Note attachments and User/Group/Project avatars
|
||||
get "-/system/:model/:mounted_as/:id/:filename",
|
||||
to: "uploads#show",
|
||||
constraints: { model: /note|user|group|project/, mounted_as: /avatar|attachment/, filename: /[^\/]+/ }
|
||||
constraints: { model: /note|user|group|project/, mounted_as: /avatar|attachment/, filename: %r{[^/]+} }
|
||||
|
||||
# show uploads for models, snippets (notes) available for now
|
||||
get '-/system/:model/:id/:secret/:filename',
|
||||
to: 'uploads#show',
|
||||
constraints: { model: /personal_snippet/, id: /\d+/, filename: /[^\/]+/ }
|
||||
constraints: { model: /personal_snippet/, id: /\d+/, filename: %r{[^/]+} }
|
||||
|
||||
# show temporary uploads
|
||||
get '-/system/temp/:secret/:filename',
|
||||
to: 'uploads#show',
|
||||
constraints: { filename: /[^\/]+/ }
|
||||
constraints: { filename: %r{[^/]+} }
|
||||
|
||||
# Appearance
|
||||
get "-/system/:model/:mounted_as/:id/:filename",
|
||||
|
@ -22,7 +22,7 @@ scope path: :uploads do
|
|||
# Project markdown uploads
|
||||
get ":namespace_id/:project_id/:secret/:filename",
|
||||
to: "projects/uploads#show",
|
||||
constraints: { namespace_id: /[a-zA-Z.0-9_\-]+/, project_id: /[a-zA-Z.0-9_\-]+/, filename: /[^\/]+/ }
|
||||
constraints: { namespace_id: /[a-zA-Z.0-9_\-]+/, project_id: /[a-zA-Z.0-9_\-]+/, filename: %r{[^/]+} }
|
||||
|
||||
# create uploads for models, snippets (notes) available for now
|
||||
post ':model',
|
||||
|
@ -34,4 +34,4 @@ end
|
|||
# Redirect old note attachments path to new uploads path.
|
||||
get "files/note/:id/:filename",
|
||||
to: redirect("uploads/note/attachment/%{id}/%{filename}"),
|
||||
constraints: { filename: /[^\/]+/ }
|
||||
constraints: { filename: %r{[^/]+} }
|
||||
|
|
|
@ -193,7 +193,7 @@ class Spinach::Features::ProjectSourceMarkdownRender < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
step 'The link with text "/ID" should have url "tree/markdownID"' do
|
||||
find('a', text: /^\/#id$/)['href'] == current_host + project_tree_path(@project, "markdown") + '#id'
|
||||
find('a', text: %r{^/#id$})['href'] == current_host + project_tree_path(@project, "markdown") + '#id'
|
||||
end
|
||||
|
||||
step 'The link with text "README.mdID" '\
|
||||
|
@ -203,7 +203,7 @@ class Spinach::Features::ProjectSourceMarkdownRender < Spinach::FeatureSteps
|
|||
|
||||
step 'The link with text "d/README.mdID" should have '\
|
||||
'url "blob/markdown/d/README.mdID"' do
|
||||
find('a', text: /^d\/README.md#id$/)['href'] == current_host + project_blob_path(@project, "d/markdown/README.md") + '#id'
|
||||
find('a', text: %r{^d/README.md#id$})['href'] == current_host + project_blob_path(@project, "d/markdown/README.md") + '#id'
|
||||
end
|
||||
|
||||
step 'The link with text "ID" should have url "blob/markdown/README.mdID"' do
|
||||
|
@ -212,7 +212,7 @@ class Spinach::Features::ProjectSourceMarkdownRender < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
step 'The link with text "/ID" should have url "blob/markdown/README.mdID"' do
|
||||
find('a', text: /^\/#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id'
|
||||
find('a', text: %r{^/#id$})['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id'
|
||||
end
|
||||
|
||||
# Wiki
|
||||
|
|
|
@ -17,15 +17,15 @@ module API
|
|||
}
|
||||
}.freeze
|
||||
PROJECT_TEMPLATE_REGEX =
|
||||
/[\<\{\[]
|
||||
%r{[\<\{\[]
|
||||
(project|description|
|
||||
one\sline\s.+\swhat\sit\sdoes\.) # matching the start and end is enough here
|
||||
[\>\}\]]/xi.freeze
|
||||
[\>\}\]]}xi.freeze
|
||||
YEAR_TEMPLATE_REGEX = /[<{\[](year|yyyy)[>}\]]/i.freeze
|
||||
FULLNAME_TEMPLATE_REGEX =
|
||||
/[\<\{\[]
|
||||
%r{[\<\{\[]
|
||||
(fullname|name\sof\s(author|copyright\sowner))
|
||||
[\>\}\]]/xi.freeze
|
||||
[\>\}\]]}xi.freeze
|
||||
|
||||
helpers do
|
||||
def parsed_license_template
|
||||
|
|
|
@ -173,7 +173,7 @@ module API
|
|||
use :sort_params
|
||||
use :pagination
|
||||
end
|
||||
get "/search/:query", requirements: { query: /[^\/]+/ } do
|
||||
get "/search/:query", requirements: { query: %r{[^/]+} } do
|
||||
search_service = Search::GlobalService.new(current_user, search: params[:query]).execute
|
||||
projects = search_service.objects('projects', params[:page], false)
|
||||
projects = projects.reorder(params[:order_by] => params[:sort])
|
||||
|
|
|
@ -16,15 +16,15 @@ module API
|
|||
}
|
||||
}.freeze
|
||||
PROJECT_TEMPLATE_REGEX =
|
||||
/[\<\{\[]
|
||||
%r{[\<\{\[]
|
||||
(project|description|
|
||||
one\sline\s.+\swhat\sit\sdoes\.) # matching the start and end is enough here
|
||||
[\>\}\]]/xi.freeze
|
||||
[\>\}\]]}xi.freeze
|
||||
YEAR_TEMPLATE_REGEX = /[<{\[](year|yyyy)[>}\]]/i.freeze
|
||||
FULLNAME_TEMPLATE_REGEX =
|
||||
/[\<\{\[]
|
||||
%r{[\<\{\[]
|
||||
(fullname|name\sof\s(author|copyright\sowner))
|
||||
[\>\}\]]/xi.freeze
|
||||
[\>\}\]]}xi.freeze
|
||||
DEPRECATION_MESSAGE = ' This endpoint is deprecated and has been removed in V4.'.freeze
|
||||
|
||||
helpers do
|
||||
|
|
|
@ -54,9 +54,9 @@ module Banzai
|
|||
# Build a regexp that matches all valid :emoji: names.
|
||||
def self.emoji_pattern
|
||||
@emoji_pattern ||=
|
||||
/(?<=[^[:alnum:]:]|\n|^)
|
||||
%r{(?<=[^[:alnum:]:]|\n|^)
|
||||
:(#{Gitlab::Emoji.emojis_names.map { |name| Regexp.escape(name) }.join('|')}):
|
||||
(?=[^[:alnum:]:]|$)/x
|
||||
(?=[^[:alnum:]:]|$)}x
|
||||
end
|
||||
|
||||
# Build a regexp that matches all valid unicode emojis names.
|
||||
|
|
|
@ -51,10 +51,10 @@ module Banzai
|
|||
# See https://github.com/gollum/gollum/wiki
|
||||
#
|
||||
# Rubular: http://rubular.com/r/7dQnE5CUCH
|
||||
TAGS_PATTERN = %r{\[\[(.+?)\]\]}.freeze
|
||||
TAGS_PATTERN = /\[\[(.+?)\]\]/.freeze
|
||||
|
||||
# Pattern to match allowed image extensions
|
||||
ALLOWED_IMAGE_EXTENSIONS = %r{.+(jpg|png|gif|svg|bmp)\z}i.freeze
|
||||
ALLOWED_IMAGE_EXTENSIONS = /.+(jpg|png|gif|svg|bmp)\z/i.freeze
|
||||
|
||||
def call
|
||||
search_text_nodes(doc).each do |node|
|
||||
|
|
|
@ -11,7 +11,7 @@ module ContainerRegistry
|
|||
private
|
||||
|
||||
def default_path
|
||||
@uri.sub(/^https?:\/\//, '')
|
||||
@uri.sub(%r{^https?://}, '')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -56,7 +56,7 @@ module ExtractsPath
|
|||
|
||||
if valid_refs.length == 0
|
||||
# No exact ref match, so just try our best
|
||||
pair = id.match(/([^\/]+)(.*)/).captures
|
||||
pair = id.match(%r{([^/]+)(.*)}).captures
|
||||
else
|
||||
# There is a distinct possibility that multiple refs prefix the ID.
|
||||
# Use the longest match to maximize the chance that we have the
|
||||
|
@ -68,7 +68,7 @@ module ExtractsPath
|
|||
end
|
||||
|
||||
# Remove ending slashes from path
|
||||
pair[1].gsub!(/^\/|\/$/, '')
|
||||
pair[1].gsub!(%r{^/|/$}, '')
|
||||
|
||||
pair
|
||||
end
|
||||
|
|
|
@ -12,7 +12,7 @@ module Gitlab
|
|||
|
||||
# Ends with /:random_hex/:filename
|
||||
FILE_UPLOADER_PATH = %r{/\h+/[^/]+\z}
|
||||
FULL_PATH_CAPTURE = %r{\A(.+)#{FILE_UPLOADER_PATH}}
|
||||
FULL_PATH_CAPTURE = /\A(.+)#{FILE_UPLOADER_PATH}/
|
||||
|
||||
# These regex patterns are tested against a relative path, relative to
|
||||
# the upload directory.
|
||||
|
|
|
@ -97,7 +97,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def total_size
|
||||
descendant_pattern = %r{^#{Regexp.escape(@path.to_s)}}
|
||||
descendant_pattern = /^#{Regexp.escape(@path.to_s)}/
|
||||
entries.sum do |path, entry|
|
||||
(entry[:size] if path =~ descendant_pattern).to_i
|
||||
end
|
||||
|
|
|
@ -11,7 +11,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def package_url(name)
|
||||
"https://packagist.org/packages/#{name}" if name =~ %r{\A#{REPO_REGEX}\z}
|
||||
"https://packagist.org/packages/#{name}" if name =~ /\A#{REPO_REGEX}\z/
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,7 +15,7 @@ module Gitlab
|
|||
link_regex(/(github:|:github\s*=>)\s*['"](?<name>[^'"]+)['"]/, &method(:github_url))
|
||||
|
||||
# Link `git: "https://gitlab.example.com/user/repo"` to https://gitlab.example.com/user/repo
|
||||
link_regex(%r{(git:|:git\s*=>)\s*['"](?<name>#{URL_REGEX})['"]}, &:itself)
|
||||
link_regex(/(git:|:git\s*=>)\s*['"](?<name>#{URL_REGEX})['"]/, &:itself)
|
||||
|
||||
# Link `source "https://rubygems.org"` to https://rubygems.org
|
||||
link_method_call('source', URL_REGEX, &:itself)
|
||||
|
|
|
@ -12,7 +12,7 @@ module Gitlab
|
|||
def link_dependencies
|
||||
link_method_call('homepage', URL_REGEX, &:itself)
|
||||
|
||||
link_regex(%r{(git:|:git\s*=>)\s*['"](?<name>#{URL_REGEX})['"]}, &:itself)
|
||||
link_regex(/(git:|:git\s*=>)\s*['"](?<name>#{URL_REGEX})['"]/, &:itself)
|
||||
|
||||
link_method_call('license', &method(:license_url))
|
||||
link_regex(/license\s*=\s*\{\s*(type:|:type\s*=>)\s*#{STRING_REGEX}/, &method(:license_url))
|
||||
|
|
|
@ -43,7 +43,7 @@ module Gitlab
|
|||
return "" unless decoded
|
||||
|
||||
# Certain trigger phrases that means we didn't parse correctly
|
||||
if decoded =~ /(Content\-Type\:|multipart\/alternative|text\/plain)/
|
||||
if decoded =~ %r{(Content\-Type\:|multipart/alternative|text/plain)}
|
||||
return ""
|
||||
end
|
||||
|
||||
|
|
|
@ -6,14 +6,14 @@ module Gitlab
|
|||
module FileDetector
|
||||
PATTERNS = {
|
||||
# Project files
|
||||
readme: /\Areadme[^\/]*\z/i,
|
||||
changelog: /\A(changelog|history|changes|news)[^\/]*\z/i,
|
||||
license: /\A(licen[sc]e|copying)(\.[^\/]+)?\z/i,
|
||||
contributing: /\Acontributing[^\/]*\z/i,
|
||||
readme: %r{\Areadme[^/]*\z}i,
|
||||
changelog: %r{\A(changelog|history|changes|news)[^/]*\z}i,
|
||||
license: %r{\A(licen[sc]e|copying)(\.[^/]+)?\z}i,
|
||||
contributing: %r{\Acontributing[^/]*\z}i,
|
||||
version: 'version',
|
||||
avatar: /\Alogo\.(png|jpg|gif)\z/,
|
||||
issue_template: /\A\.gitlab\/issue_templates\/[^\/]+\.md\z/,
|
||||
merge_request_template: /\A\.gitlab\/merge_request_templates\/[^\/]+\.md\z/,
|
||||
issue_template: %r{\A\.gitlab/issue_templates/[^/]+\.md\z},
|
||||
merge_request_template: %r{\A\.gitlab/merge_request_templates/[^/]+\.md\z},
|
||||
|
||||
# Configuration files
|
||||
gitignore: '.gitignore',
|
||||
|
@ -22,17 +22,17 @@ module Gitlab
|
|||
route_map: '.gitlab/route-map.yml',
|
||||
|
||||
# Dependency files
|
||||
cartfile: /\ACartfile[^\/]*\z/,
|
||||
cartfile: %r{\ACartfile[^/]*\z},
|
||||
composer_json: 'composer.json',
|
||||
gemfile: /\A(Gemfile|gems\.rb)\z/,
|
||||
gemfile_lock: 'Gemfile.lock',
|
||||
gemspec: /\A[^\/]*\.gemspec\z/,
|
||||
gemspec: %r{\A[^/]*\.gemspec\z},
|
||||
godeps_json: 'Godeps.json',
|
||||
package_json: 'package.json',
|
||||
podfile: 'Podfile',
|
||||
podspec_json: /\A[^\/]*\.podspec\.json\z/,
|
||||
podspec: /\A[^\/]*\.podspec\z/,
|
||||
requirements_txt: /\A[^\/]*requirements\.txt\z/,
|
||||
podspec_json: %r{\A[^/]*\.podspec\.json\z},
|
||||
podspec: %r{\A[^/]*\.podspec\z},
|
||||
requirements_txt: %r{\A[^/]*requirements\.txt\z},
|
||||
yarn_lock: 'yarn.lock'
|
||||
}.freeze
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ module Gitlab
|
|||
include Gitlab::EncodingHelper
|
||||
|
||||
def ref_name(ref)
|
||||
encode!(ref).sub(/\Arefs\/(tags|heads|remotes)\//, '')
|
||||
encode!(ref).sub(%r{\Arefs/(tags|heads|remotes)/}, '')
|
||||
end
|
||||
|
||||
def branch_name(ref)
|
||||
|
|
|
@ -107,7 +107,7 @@ module Gitlab
|
|||
def find_entry_by_path(repository, root_id, path)
|
||||
root_tree = repository.lookup(root_id)
|
||||
# Strip leading slashes
|
||||
path[/^\/*/] = ''
|
||||
path[%r{^/*}] = ''
|
||||
path_arr = path.split('/')
|
||||
|
||||
entry = root_tree.find do |entry|
|
||||
|
@ -140,7 +140,7 @@ module Gitlab
|
|||
def find_by_gitaly(repository, sha, path, limit: MAX_DATA_DISPLAY_SIZE)
|
||||
return unless path
|
||||
|
||||
path = path.sub(/\A\/*/, '')
|
||||
path = path.sub(%r{\A/*}, '')
|
||||
path = '/' if path.empty?
|
||||
name = File.basename(path)
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ module Gitlab
|
|||
class << self
|
||||
def normalize_path(filename)
|
||||
# Strip all leading slashes so that //foo -> foo
|
||||
filename[/^\/*/] = ''
|
||||
filename[%r{^/*}] = ''
|
||||
|
||||
# Expand relative paths (e.g. foo/../bar)
|
||||
filename = Pathname.new(filename)
|
||||
|
|
|
@ -23,7 +23,7 @@ module Gitlab
|
|||
# Ex.
|
||||
# Ref.extract_branch_name('refs/heads/master') #=> 'master'
|
||||
def self.extract_branch_name(str)
|
||||
str.gsub(/\Arefs\/heads\//, '')
|
||||
str.gsub(%r{\Arefs/heads/}, '')
|
||||
end
|
||||
|
||||
# Gitaly: this method will probably be migrated indirectly via its call sites.
|
||||
|
|
|
@ -1392,7 +1392,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def search_files_by_name(query, ref)
|
||||
safe_query = Regexp.escape(query.sub(/^\/*/, ""))
|
||||
safe_query = Regexp.escape(query.sub(%r{^/*}, ""))
|
||||
|
||||
return [] if empty? || safe_query.blank?
|
||||
|
||||
|
@ -2002,7 +2002,7 @@ module Gitlab
|
|||
target_commit = Gitlab::Git::Commit.find(self, rugged_ref.target)
|
||||
Gitlab::Git::Branch.new(self, rugged_ref.name, rugged_ref.target, target_commit)
|
||||
rescue Rugged::ReferenceError => e
|
||||
raise InvalidRef.new("Branch #{ref} already exists") if e.to_s =~ /'refs\/heads\/#{ref}'/
|
||||
raise InvalidRef.new("Branch #{ref} already exists") if e.to_s =~ %r{'refs/heads/#{ref}'}
|
||||
|
||||
raise InvalidRef.new("Invalid reference #{start_point}")
|
||||
end
|
||||
|
|
|
@ -43,7 +43,7 @@ module Gitlab
|
|||
branches = []
|
||||
|
||||
rugged.references.each("refs/remotes/#{remote_name}/*").map do |ref|
|
||||
name = ref.name.sub(/\Arefs\/remotes\/#{remote_name}\//, '')
|
||||
name = ref.name.sub(%r{\Arefs/remotes/#{remote_name}/}, '')
|
||||
|
||||
begin
|
||||
target_commit = Gitlab::Git::Commit.find(self, ref.target)
|
||||
|
|
|
@ -13,7 +13,7 @@ module Gitlab
|
|||
:diff_hunk, :author, :note, :created_at, :updated_at,
|
||||
:github_id
|
||||
|
||||
NOTEABLE_ID_REGEX = /\/pull\/(?<iid>\d+)/i
|
||||
NOTEABLE_ID_REGEX = %r{/pull/(?<iid>\d+)}i
|
||||
|
||||
# Builds a diff note from a GitHub API response.
|
||||
#
|
||||
|
|
|
@ -12,7 +12,7 @@ module Gitlab
|
|||
expose_attribute :noteable_id, :noteable_type, :author, :note,
|
||||
:created_at, :updated_at, :github_id
|
||||
|
||||
NOTEABLE_TYPE_REGEX = /\/(?<type>(pull|issues))\/(?<iid>\d+)/i
|
||||
NOTEABLE_TYPE_REGEX = %r{/(?<type>(pull|issues))/(?<iid>\d+)}i
|
||||
|
||||
# Builds a note from a GitHub API response.
|
||||
#
|
||||
|
|
|
@ -59,7 +59,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def extracted_files
|
||||
Dir.glob("#{@shared.export_path}/**/*", File::FNM_DOTMATCH).reject { |f| f =~ /.*\/\.{1,2}$/ }
|
||||
Dir.glob("#{@shared.export_path}/**/*", File::FNM_DOTMATCH).reject { |f| f =~ %r{.*/\.{1,2}$} }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -34,7 +34,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def relative_path(path)
|
||||
path.gsub(/^#{Rails.root.to_s}\/?/, '')
|
||||
path.gsub(%r{^#{Rails.root.to_s}/?}, '')
|
||||
end
|
||||
|
||||
def values_for(event)
|
||||
|
|
|
@ -56,12 +56,12 @@ module Gitlab
|
|||
end
|
||||
|
||||
def strip_url(url)
|
||||
url.gsub(/\Ahttps?:\/\//, '')
|
||||
url.gsub(%r{\Ahttps?://}, '')
|
||||
end
|
||||
|
||||
def project_path(request)
|
||||
path_info = request.env["PATH_INFO"]
|
||||
path_info.sub!(/^\//, '')
|
||||
path_info.sub!(%r{^/}, '')
|
||||
|
||||
project_path_match = "#{path_info}/".match(PROJECT_PATH_REGEX)
|
||||
return unless project_path_match
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
module Gitlab
|
||||
module Middleware
|
||||
class Static < ActionDispatch::Static
|
||||
UPLOADS_REGEX = /\A\/uploads(\/|\z)/.freeze
|
||||
UPLOADS_REGEX = %r{\A/uploads(/|\z)}.freeze
|
||||
|
||||
def call(env)
|
||||
return @app.call(env) if env['PATH_INFO'] =~ UPLOADS_REGEX
|
||||
|
|
|
@ -9,7 +9,7 @@ module Gitlab
|
|||
# if date doesn't present return time with current date
|
||||
# in other cases return nil
|
||||
class SpendTimeAndDateSeparator
|
||||
DATE_REGEX = /(\d{2,4}[\/\-.]\d{1,2}[\/\-.]\d{1,2})/
|
||||
DATE_REGEX = %r{(\d{2,4}[/\-.]\d{1,2}[/\-.]\d{1,2})}
|
||||
|
||||
def initialize(spend_command_arg)
|
||||
@spend_arg = spend_command_arg
|
||||
|
|
|
@ -30,7 +30,7 @@ module Gitlab
|
|||
raise NotFoundError.new("No known storage path matches #{repo_path.inspect}")
|
||||
end
|
||||
|
||||
result.sub(/\A\/*/, '')
|
||||
result.sub(%r{\A/*}, '')
|
||||
end
|
||||
|
||||
def self.find_project(project_path)
|
||||
|
|
|
@ -31,7 +31,7 @@ module Gitlab
|
|||
storages << { name: 'test_second_storage', path: Rails.root.join('tmp', 'tests', 'second_storage').to_s }
|
||||
end
|
||||
|
||||
config = { socket_path: address.sub(%r{\Aunix:}, ''), storage: storages }
|
||||
config = { socket_path: address.sub(/\Aunix:/, ''), storage: storages }
|
||||
config[:auth] = { token: 'secret' } if Rails.env.test?
|
||||
config[:'gitaly-ruby'] = { dir: File.join(gitaly_dir, 'ruby') } if gitaly_ruby
|
||||
config[:'gitlab-shell'] = { dir: Gitlab.config.gitlab_shell.path }
|
||||
|
|
|
@ -16,7 +16,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def relative_path
|
||||
@relative_path ||= @file.gsub(/^#{Rails.root.to_s}\/?/, '')
|
||||
@relative_path ||= @file.gsub(%r{^#{Rails.root.to_s}/?}, '')
|
||||
end
|
||||
|
||||
def to_param
|
||||
|
|
|
@ -2,7 +2,7 @@ module Gitlab
|
|||
module Sherlock
|
||||
# Rack middleware used for tracking request metrics.
|
||||
class Middleware
|
||||
CONTENT_TYPES = /text\/html|application\/json/i
|
||||
CONTENT_TYPES = %r{text/html|application/json}i
|
||||
|
||||
IGNORE_PATHS = %r{^/sherlock}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ module Gitlab
|
|||
attr_reader :id, :query, :started_at, :finished_at, :backtrace
|
||||
|
||||
# SQL identifiers that should be prefixed with newlines.
|
||||
PREFIX_NEWLINE = /
|
||||
PREFIX_NEWLINE = %r{
|
||||
\s+(FROM
|
||||
|(LEFT|RIGHT)?INNER\s+JOIN
|
||||
|(LEFT|RIGHT)?OUTER\s+JOIN
|
||||
|
@ -13,7 +13,7 @@ module Gitlab
|
|||
|GROUP\s+BY
|
||||
|ORDER\s+BY
|
||||
|LIMIT
|
||||
|OFFSET)\s+/ix # Vim indent breaks when this is on a newline :<
|
||||
|OFFSET)\s+}ix # Vim indent breaks when this is on a newline :<
|
||||
|
||||
# Creates a new Query using a String and a separate Array of bindings.
|
||||
#
|
||||
|
|
|
@ -49,7 +49,7 @@ module Gitlab
|
|||
|
||||
def fetch_git_tags
|
||||
remote_tags, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} ls-remote --tags https://gitlab.com/gitlab-org/gitlab-ce.git))
|
||||
remote_tags.split("\n").grep(/tags\/v#{current_version.major}/)
|
||||
remote_tags.split("\n").grep(%r{tags/v#{current_version.major}})
|
||||
end
|
||||
|
||||
def update_commands
|
||||
|
|
|
@ -7,7 +7,7 @@ module QA
|
|||
element :settings_link, 'link_to edit_project_path'
|
||||
element :repository_link, "title: 'Repository'"
|
||||
element :pipelines_settings_link, "title: 'CI / CD'"
|
||||
element :issues_link, %r{link_to.*shortcuts-issues}
|
||||
element :issues_link, /link_to.*shortcuts-issues/
|
||||
element :issues_link_text, "Issues"
|
||||
element :top_level_items, '.sidebar-top-level-items'
|
||||
element :activity_link, "title: 'Activity'"
|
||||
|
|
|
@ -3,7 +3,7 @@ describe QA::Runtime::RSAKey do
|
|||
subject { described_class.new.public_key }
|
||||
|
||||
it 'generates a public RSA key' do
|
||||
expect(subject).to match(/\Assh\-rsa AAAA[0-9A-Za-z+\/]+={0,3}\z/)
|
||||
expect(subject).to match(%r{\Assh\-rsa AAAA[0-9A-Za-z+/]+={0,3}\z})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -29,7 +29,7 @@ module RuboCop
|
|||
path = Pathname.new(source_name).relative_path_from(rails_root)
|
||||
dirname = File.dirname(path)
|
||||
.sub(%r{\Adb/(migrate|post_migrate)}, 'spec/migrations')
|
||||
filename = File.basename(source_name, '.rb').sub(%r{\A\d+_}, '')
|
||||
filename = File.basename(source_name, '.rb').sub(/\A\d+_/, '')
|
||||
|
||||
File.join(dirname, "#{filename}_spec.rb")
|
||||
end
|
||||
|
|
|
@ -137,8 +137,8 @@ describe Projects::JobsController do
|
|||
|
||||
it 'exposes needed information' do
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['raw_path']).to match(/jobs\/\d+\/raw\z/)
|
||||
expect(json_response.dig('merge_request', 'path')).to match(/merge_requests\/\d+\z/)
|
||||
expect(json_response['raw_path']).to match(%r{jobs/\d+/raw\z})
|
||||
expect(json_response.dig('merge_request', 'path')).to match(%r{merge_requests/\d+\z})
|
||||
expect(json_response['new_issue_path'])
|
||||
.to include('/issues/new')
|
||||
end
|
||||
|
|
|
@ -36,7 +36,7 @@ describe Projects::TodosController do
|
|||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(json_response['count']).to eq 1
|
||||
expect(json_response['delete_path']).to match(/\/dashboard\/todos\/\d{1}/)
|
||||
expect(json_response['delete_path']).to match(%r{/dashboard/todos/\d{1}})
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -104,7 +104,7 @@ describe Projects::TodosController do
|
|||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(json_response['count']).to eq 1
|
||||
expect(json_response['delete_path']).to match(/\/dashboard\/todos\/\d{1}/)
|
||||
expect(json_response['delete_path']).to match(%r{/dashboard/todos/\d{1}})
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ describe "User Feed" do
|
|||
end
|
||||
|
||||
it 'has XHTML summaries in issue descriptions' do
|
||||
expect(body).to match /<hr ?\/>/
|
||||
expect(body).to match %r{<hr ?/>}
|
||||
end
|
||||
|
||||
it 'has XHTML summaries in notes' do
|
||||
|
@ -72,7 +72,7 @@ describe "User Feed" do
|
|||
end
|
||||
|
||||
it 'has XHTML summaries in merge request descriptions' do
|
||||
expect(body).to match /Here is the fix: <a[^>]*><img[^>]*\/><\/a>/
|
||||
expect(body).to match %r{Here is the fix: <a[^>]*><img[^>]*/></a>}
|
||||
end
|
||||
|
||||
it 'has push event commit ID' do
|
||||
|
|
|
@ -100,12 +100,12 @@ describe 'Merge request > User resolves conflicts', :js do
|
|||
end
|
||||
|
||||
it 'shows a link to the conflict resolution page' do
|
||||
expect(page).to have_link('conflicts', href: /\/conflicts\Z/)
|
||||
expect(page).to have_link('conflicts', href: %r{/conflicts\Z})
|
||||
end
|
||||
|
||||
context 'in Inline view mode' do
|
||||
before do
|
||||
click_link('conflicts', href: /\/conflicts\Z/)
|
||||
click_link('conflicts', href: %r{/conflicts\Z})
|
||||
end
|
||||
|
||||
include_examples "conflicts are resolved in Interactive mode"
|
||||
|
@ -114,7 +114,7 @@ describe 'Merge request > User resolves conflicts', :js do
|
|||
|
||||
context 'in Parallel view mode' do
|
||||
before do
|
||||
click_link('conflicts', href: /\/conflicts\Z/)
|
||||
click_link('conflicts', href: %r{/conflicts\Z})
|
||||
click_button 'Side-by-side'
|
||||
end
|
||||
|
||||
|
@ -128,7 +128,7 @@ describe 'Merge request > User resolves conflicts', :js do
|
|||
|
||||
before do
|
||||
visit project_merge_request_path(project, merge_request)
|
||||
click_link('conflicts', href: /\/conflicts\Z/)
|
||||
click_link('conflicts', href: %r{/conflicts\Z})
|
||||
end
|
||||
|
||||
it 'conflicts can not be resolved in Interactive mode' do
|
||||
|
@ -181,7 +181,7 @@ describe 'Merge request > User resolves conflicts', :js do
|
|||
end
|
||||
|
||||
it 'does not show a link to the conflict resolution page' do
|
||||
expect(page).not_to have_link('conflicts', href: /\/conflicts\Z/)
|
||||
expect(page).not_to have_link('conflicts', href: %r{/conflicts\Z})
|
||||
end
|
||||
|
||||
it 'shows an error if the conflicts page is visited directly' do
|
||||
|
|
|
@ -105,7 +105,7 @@ describe GroupsHelper do
|
|||
|
||||
it 'outputs the groups in the correct order' do
|
||||
expect(helper.group_title(very_deep_nested_group))
|
||||
.to match(/<li style="text-indent: 16px;"><a.*>#{deep_nested_group.name}.*<\/li>.*<a.*>#{very_deep_nested_group.name}<\/a>/m)
|
||||
.to match(%r{<li style="text-indent: 16px;"><a.*>#{deep_nested_group.name}.*</li>.*<a.*>#{very_deep_nested_group.name}</a>}m)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -120,7 +120,7 @@ describe GroupsHelper do
|
|||
let(:possible_help_texts) do
|
||||
{
|
||||
default_help: "This setting will be applied to all subgroups unless overridden by a group owner",
|
||||
ancestor_locked_but_you_can_override: /This setting is applied on <a .+>.+<\/a>\. You can override the setting or .+/,
|
||||
ancestor_locked_but_you_can_override: %r{This setting is applied on <a .+>.+</a>\. You can override the setting or .+},
|
||||
ancestor_locked_so_ask_the_owner: /This setting is applied on .+\. To share projects in this group with another group, ask the owner to override the setting or remove the share with group lock from .+/,
|
||||
ancestor_locked_and_has_been_overridden: /This setting is applied on .+ and has been overridden on this subgroup/
|
||||
}
|
||||
|
|
|
@ -104,7 +104,7 @@ describe LabelsHelper do
|
|||
context 'with a tooltip argument' do
|
||||
context 'set to false' do
|
||||
it 'does not include the has-tooltip class' do
|
||||
expect(link_to_label(label, tooltip: false)).not_to match %r{has-tooltip}
|
||||
expect(link_to_label(label, tooltip: false)).not_to match /has-tooltip/
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,7 +27,7 @@ describe VersionCheckHelper do
|
|||
end
|
||||
|
||||
it 'should have a VersionCheck url as the src' do
|
||||
expect(@image_tag).to match(/src="https:\/\/version\.host\.com\/check\.svg\?gitlab_info=xxx"/)
|
||||
expect(@image_tag).to match(%r{src="https://version\.host\.com/check\.svg\?gitlab_info=xxx"})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -53,7 +53,7 @@ describe Banzai::Filter::CommitRangeReferenceFilter do
|
|||
doc = reference_filter("See (#{reference}.)")
|
||||
|
||||
exp = Regexp.escape(range.reference_link_text)
|
||||
expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{exp}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid commit IDs' do
|
||||
|
@ -222,7 +222,7 @@ describe Banzai::Filter::CommitRangeReferenceFilter do
|
|||
doc = reference_filter("Fixed (#{reference}.)")
|
||||
|
||||
exp = Regexp.escape(range.reference_link_text(project))
|
||||
expect(doc.to_html).to match(/\(<a.+>#{exp}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{exp}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid commit IDs on the referenced project' do
|
||||
|
|
|
@ -42,7 +42,7 @@ describe Banzai::Filter::CommitReferenceFilter do
|
|||
it 'links with adjacent text' do
|
||||
doc = reference_filter("See (#{reference}.)")
|
||||
|
||||
expect(doc.to_html).to match(/\(<a.+>#{commit.short_id}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{commit.short_id}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid commit IDs' do
|
||||
|
@ -199,12 +199,12 @@ describe Banzai::Filter::CommitReferenceFilter do
|
|||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Fixed (#{reference}.)")
|
||||
|
||||
expect(doc.to_html).to match(/\(<a.+>#{commit.reference_link_text(project)}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{commit.reference_link_text(project)}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid commit IDs on the referenced project' do
|
||||
act = "Committed #{invalidate_reference(reference)}"
|
||||
expect(reference_filter(act).to_html).to match(/<a.+>#{Regexp.escape(invalidate_reference(reference))}<\/a>/)
|
||||
expect(reference_filter(act).to_html).to match(%r{<a.+>#{Regexp.escape(invalidate_reference(reference))}</a>})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -49,7 +49,7 @@ describe Banzai::Filter::ExternalIssueReferenceFilter do
|
|||
it 'links with adjacent text' do
|
||||
doc = filter("Issue (#{reference}.)")
|
||||
|
||||
expect(doc.to_html).to match(/\(<a.+>#{reference}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{reference}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'includes a title attribute' do
|
||||
|
|
|
@ -14,7 +14,7 @@ describe Banzai::Filter::ImageLinkFilter do
|
|||
|
||||
it 'does not wrap a duplicate link' do
|
||||
doc = filter(%Q(<a href="/whatever">#{image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg')}</a>))
|
||||
expect(doc.to_html).to match /^<a href="\/whatever"><img[^>]*><\/a>$/
|
||||
expect(doc.to_html).to match %r{^<a href="/whatever"><img[^>]*></a>$}
|
||||
end
|
||||
|
||||
it 'works with external images' do
|
||||
|
@ -24,6 +24,6 @@ describe Banzai::Filter::ImageLinkFilter do
|
|||
|
||||
it 'works with inline images' do
|
||||
doc = filter(%Q(<p>test #{image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg')} inline</p>))
|
||||
expect(doc.to_html).to match /^<p>test <a[^>]*><img[^>]*><\/a> inline<\/p>$/
|
||||
expect(doc.to_html).to match %r{^<p>test <a[^>]*><img[^>]*></a> inline</p>$}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -288,7 +288,7 @@ describe Banzai::Filter::IssueReferenceFilter do
|
|||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Fixed (#{reference}.)")
|
||||
|
||||
expect(doc.to_html).to match(/\(<a.+>#{Regexp.escape(issue.to_reference(project))} \(comment 123\)<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{Regexp.escape(issue.to_reference(project))} \(comment 123\)</a>\.\)})
|
||||
end
|
||||
|
||||
it 'includes default classes' do
|
||||
|
@ -317,7 +317,7 @@ describe Banzai::Filter::IssueReferenceFilter do
|
|||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Fixed (#{reference_link}.)")
|
||||
|
||||
expect(doc.to_html).to match(/\(<a.+>Reference<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>Reference</a>\.\)})
|
||||
end
|
||||
|
||||
it 'includes default classes' do
|
||||
|
@ -346,7 +346,7 @@ describe Banzai::Filter::IssueReferenceFilter do
|
|||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Fixed (#{reference_link}.)")
|
||||
|
||||
expect(doc.to_html).to match(/\(<a.+>Reference<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>Reference</a>\.\)})
|
||||
end
|
||||
|
||||
it 'includes default classes' do
|
||||
|
|
|
@ -42,7 +42,7 @@ describe Banzai::Filter::MergeRequestReferenceFilter do
|
|||
|
||||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Merge (#{reference}.)")
|
||||
expect(doc.to_html).to match(/\(<a.+>#{Regexp.escape(reference)}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{Regexp.escape(reference)}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid merge IDs' do
|
||||
|
@ -211,7 +211,7 @@ describe Banzai::Filter::MergeRequestReferenceFilter do
|
|||
|
||||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Merge (#{reference}.)")
|
||||
expect(doc.to_html).to match(/\(<a.+>#{Regexp.escape(merge.to_reference(project))} \(diffs, comment 123\)<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{Regexp.escape(merge.to_reference(project))} \(diffs, comment 123\)</a>\.\)})
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ describe Banzai::Filter::SnippetReferenceFilter do
|
|||
|
||||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Snippet (#{reference}.)")
|
||||
expect(doc.to_html).to match(/\(<a.+>#{Regexp.escape(reference)}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{Regexp.escape(reference)}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid snippet IDs' do
|
||||
|
@ -192,13 +192,13 @@ describe Banzai::Filter::SnippetReferenceFilter do
|
|||
|
||||
it 'links with adjacent text' do
|
||||
doc = reference_filter("See (#{reference}.)")
|
||||
expect(doc.to_html).to match(/\(<a.+>#{Regexp.escape(snippet.to_reference(project))}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{Regexp.escape(snippet.to_reference(project))}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'ignores invalid snippet IDs on the referenced project' do
|
||||
act = "See #{invalidate_reference(reference)}"
|
||||
|
||||
expect(reference_filter(act).to_html).to match(/<a.+>#{Regexp.escape(invalidate_reference(reference))}<\/a>/)
|
||||
expect(reference_filter(act).to_html).to match(%r{<a.+>#{Regexp.escape(invalidate_reference(reference))}</a>})
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -146,7 +146,7 @@ describe Banzai::Filter::UserReferenceFilter do
|
|||
|
||||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Mention me (#{reference}.)")
|
||||
expect(doc.to_html).to match(/\(<a.+>#{reference}<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>#{reference}</a>\.\)})
|
||||
end
|
||||
|
||||
it 'includes default classes' do
|
||||
|
@ -172,7 +172,7 @@ describe Banzai::Filter::UserReferenceFilter do
|
|||
|
||||
it 'links with adjacent text' do
|
||||
doc = reference_filter("Mention me (#{reference}.)")
|
||||
expect(doc.to_html).to match(/\(<a.+>User<\/a>\.\)/)
|
||||
expect(doc.to_html).to match(%r{\(<a.+>User</a>\.\)})
|
||||
end
|
||||
|
||||
it 'includes a data-user attribute' do
|
||||
|
|
|
@ -249,7 +249,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
|
|||
end
|
||||
|
||||
shared_examples 'archive check' do |extenstion|
|
||||
it { expect(metadata['ArchivePath']).to match(/tmp\/gitlab-git-test.git\/gitlab-git-test-master-#{SeedRepo::LastCommit::ID}/) }
|
||||
it { expect(metadata['ArchivePath']).to match(%r{tmp/gitlab-git-test.git/gitlab-git-test-master-#{SeedRepo::LastCommit::ID}}) }
|
||||
it { expect(metadata['ArchivePath']).to end_with extenstion }
|
||||
end
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ describe Gitlab::PathRegex do
|
|||
STARTING_WITH_NAMESPACE = %r{^/\*namespace_id/:(project_)?id}
|
||||
NON_PARAM_PARTS = %r{[^:*][a-z\-_/]*}
|
||||
ANY_OTHER_PATH_PART = %r{[a-z\-_/:]*}
|
||||
WILDCARD_SEGMENT = %r{\*}
|
||||
WILDCARD_SEGMENT = /\*/
|
||||
let(:namespaced_wildcard_routes) do
|
||||
routes_without_format.select do |p|
|
||||
p =~ %r{#{STARTING_WITH_NAMESPACE}/#{NON_PARAM_PARTS}/#{ANY_OTHER_PATH_PART}#{WILDCARD_SEGMENT}}
|
||||
|
|
|
@ -1357,7 +1357,7 @@ describe Notify do
|
|||
|
||||
matcher :have_part_with do |expected|
|
||||
match do |actual|
|
||||
actual.body.parts.any? { |part| part.content_type.try(:match, %r(#{expected})) }
|
||||
actual.body.parts.any? { |part| part.content_type.try(:match, /#{expected}/) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -205,7 +205,7 @@ describe JiraService do
|
|||
@jira_service.close_issue(merge_request, ExternalIssue.new("JIRA-123", project))
|
||||
|
||||
expect(WebMock).to have_requested(:post, @comment_url).with(
|
||||
body: /#{custom_base_url}\/#{project.full_path}\/commit\/#{merge_request.diff_head_sha}/
|
||||
body: %r{#{custom_base_url}/#{project.full_path}/commit/#{merge_request.diff_head_sha}}
|
||||
).once
|
||||
end
|
||||
|
||||
|
@ -220,7 +220,7 @@ describe JiraService do
|
|||
@jira_service.close_issue(merge_request, ExternalIssue.new("JIRA-123", project))
|
||||
|
||||
expect(WebMock).to have_requested(:post, @comment_url).with(
|
||||
body: /#{Gitlab.config.gitlab.url}\/#{project.full_path}\/commit\/#{merge_request.diff_head_sha}/
|
||||
body: %r{#{Gitlab.config.gitlab.url}/#{project.full_path}/commit/#{merge_request.diff_head_sha}}
|
||||
).once
|
||||
end
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do
|
|||
|
||||
it 'creates a system note' do
|
||||
note = merge_request.notes.last
|
||||
expect(note.note).to match /enabled an automatic merge when the pipeline for (\w+\/\w+@)?\h{8}/
|
||||
expect(note.note).to match %r{enabled an automatic merge when the pipeline for (\w+/\w+@)?\h{8}}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -308,7 +308,7 @@ describe SystemNoteService do
|
|||
end
|
||||
|
||||
it "posts the 'merge when pipeline succeeds' system note" do
|
||||
expect(subject.note).to match(/enabled an automatic merge when the pipeline for (\w+\/\w+@)?\h{40} succeeds/)
|
||||
expect(subject.note).to match(%r{enabled an automatic merge when the pipeline for (\w+/\w+@)?\h{40} succeeds})
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -695,7 +695,7 @@ describe SystemNoteService do
|
|||
commit = double(title: '<pre>This is a test</pre>', short_id: '12345678')
|
||||
escaped = '<pre>This is a test</pre>'
|
||||
|
||||
expect(described_class.new_commit_summary([commit])).to all(match(%r[- #{escaped}]))
|
||||
expect(described_class.new_commit_summary([commit])).to all(match(/- #{escaped}/))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -165,7 +165,7 @@ describe 'gitlab:app namespace rake task' do
|
|||
expect(tar_contents).to match('pages.tar.gz')
|
||||
expect(tar_contents).to match('lfs.tar.gz')
|
||||
expect(tar_contents).to match('registry.tar.gz')
|
||||
expect(tar_contents).not_to match(/^.{4,9}[rwx].* (database.sql.gz|uploads.tar.gz|repositories|builds.tar.gz|pages.tar.gz|artifacts.tar.gz|registry.tar.gz)\/$/)
|
||||
expect(tar_contents).not_to match(%r{^.{4,9}[rwx].* (database.sql.gz|uploads.tar.gz|repositories|builds.tar.gz|pages.tar.gz|artifacts.tar.gz|registry.tar.gz)/$})
|
||||
end
|
||||
|
||||
it 'deletes temp directories' do
|
||||
|
|
|
@ -19,7 +19,7 @@ describe 'gitlab:git rake tasks' do
|
|||
|
||||
describe 'fsck' do
|
||||
it 'outputs the integrity check for a repo' do
|
||||
expect { run_rake_task('gitlab:git:fsck') }.to output(/Performed Checking integrity at .*@hashed\/1\/2\/test.git/).to_stdout
|
||||
expect { run_rake_task('gitlab:git:fsck') }.to output(%r{Performed Checking integrity at .*@hashed/1/2/test.git}).to_stdout
|
||||
end
|
||||
|
||||
it 'errors out about config.lock issues' do
|
||||
|
|
|
@ -112,7 +112,7 @@ describe FileUploader do
|
|||
fixture = Rails.root.join('spec', 'fixtures', 'rails_sample.jpg')
|
||||
uploader.store!(fixture_file_upload(fixture))
|
||||
|
||||
expect(uploader.relative_path).to match(/\A\h{32}\/rails_sample.jpg\z/)
|
||||
expect(uploader.relative_path).to match(%r{\A\h{32}/rails_sample.jpg\z})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,7 +12,7 @@ describe JobArtifactUploader do
|
|||
|
||||
context 'when using local storage' do
|
||||
it { is_expected.to start_with(local_path) }
|
||||
it { is_expected.to match(/\h{2}\/\h{2}\/\h{64}\/\d{4}_\d{1,2}_\d{1,2}\/\d+\/\d+\z/) }
|
||||
it { is_expected.to match(%r{\h{2}/\h{2}/\h{64}/\d{4}_\d{1,2}_\d{1,2}/\d+/\d+\z}) }
|
||||
it { is_expected.to end_with(path) }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue