Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
3f91ec43
Commit
3f91ec43
authored
Apr 19, 2021
by
Doug Stull
Committed by
Matthias Käppler
Apr 19, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ignore managing_group n+1 false positive on GroupMemberPresenter
parent
2b932374
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
321 additions
and
7 deletions
+321
-7
config/bullet.yml
config/bullet.yml
+44
-0
config/initializers/bullet.rb
config/initializers/bullet.rb
+7
-7
ee/spec/lib/gitlab/bullet/exclusions_spec.rb
ee/spec/lib/gitlab/bullet/exclusions_spec.rb
+11
-0
lib/gitlab/bullet.rb
lib/gitlab/bullet.rb
+16
-0
lib/gitlab/bullet/exclusions.rb
lib/gitlab/bullet/exclusions.rb
+37
-0
spec/lib/gitlab/bullet/exclusions_spec.rb
spec/lib/gitlab/bullet/exclusions_spec.rb
+155
-0
spec/lib/gitlab/bullet_spec.rb
spec/lib/gitlab/bullet_spec.rb
+51
-0
No files found.
config/bullet.yml
0 → 100644
View file @
3f91ec43
---
exclusions
:
# See https://github.com/flyerhzm/bullet#configuration for exclusion formats
# Example usage:
#
# paths with method name(recommended use):
#
# example_path_with_method_exclusion_name:
# merge_request: 'some merge request link for context'
# exact_file_name: true
# exclude:
# - 'some_ruby_file_name.rb'
# - 'method_name_inside_the_file_above'
#
# path or pattern only to file(fuzzy, not recommended):
#
# example_path_with_exact_file_name:
# merge_request: 'some merge request link for context'
# exact_file_name: true
# exclude:
# - 'some_ruby_file_name.rb'
#
# example_path_with_pattern:
# merge_request: 'some merge request link for context'
# exact_file_name: false
# exclude:
# - 'file_pattern'
#
# path with line numbers(extremely fragile, not recommended):
#
# example_path_with_line_range:
# merge_request: 'some merge request link for context'
# exact_file_name: true
# exclude:
# - 'some_ruby_file_name.rb'
# - 5..10
#
group_member_presenter_managing_group
:
merge_request
:
'
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58927'
path_with_method
:
true
exclude
:
-
'
ee/app/presenters/ee/group_member_presenter.rb'
-
'
group_managed_account?'
config/initializers/bullet.rb
View file @
3f91ec43
# frozen_string_literal: true
def
bullet_enabled?
Gitlab
::
Utils
.
to_boolean
(
ENV
[
'ENABLE_BULLET'
].
to_s
)
end
if
defined?
(
Bullet
)
&&
(
bullet_enabled?
||
Rails
.
env
.
development?
)
if
Gitlab
::
Bullet
.
configure_bullet?
Rails
.
application
.
configure
do
config
.
after_initialize
do
Bullet
.
enable
=
true
Bullet
.
bullet_logger
=
bullet_enabled?
Bullet
.
console
=
bullet_enabled?
if
Gitlab
::
Bullet
.
extra_logging_enabled?
Bullet
.
bullet_logger
=
true
Bullet
.
console
=
true
end
Bullet
.
raise
=
Rails
.
env
.
test?
Bullet
.
stacktrace_excludes
=
Gitlab
::
Bullet
::
Exclusions
.
new
.
execute
end
end
end
ee/spec/lib/gitlab/bullet/exclusions_spec.rb
0 → 100644
View file @
3f91ec43
# frozen_string_literal: true
require
'fast_spec_helper'
RSpec
.
describe
Gitlab
::
Bullet
::
Exclusions
do
describe
'#validate_paths!'
do
it
'validates paths for existence'
do
described_class
.
new
.
validate_paths!
end
end
end
lib/gitlab/bullet.rb
0 → 100644
View file @
3f91ec43
# frozen_string_literal: true
module
Gitlab
module
Bullet
extend
self
def
enabled?
Gitlab
::
Utils
.
to_boolean
(
ENV
[
'ENABLE_BULLET'
],
default:
false
)
end
alias_method
:extra_logging_enabled?
,
:enabled?
def
configure_bullet?
defined?
(
::
Bullet
)
&&
(
enabled?
||
Rails
.
env
.
development?
)
end
end
end
lib/gitlab/bullet/exclusions.rb
0 → 100644
View file @
3f91ec43
# frozen_string_literal: true
module
Gitlab
module
Bullet
class
Exclusions
def
initialize
(
config_file
=
Gitlab
.
root
.
join
(
'config/bullet.yml'
))
@config_file
=
config_file
end
def
execute
exclusions
.
map
{
|
v
|
v
[
'exclude'
]
}
end
def
validate_paths!
exclusions
.
each
do
|
properties
|
next
unless
properties
[
'path_with_method'
]
file
=
properties
[
'exclude'
].
first
raise
"Bullet: File used by
#{
config_file
}
doesn't exist, validate the
#{
file
}
exclusion!"
unless
File
.
exist?
(
file
)
end
end
private
attr_reader
:config_file
def
exclusions
@exclusions
||=
if
File
.
exist?
(
config_file
)
YAML
.
load_file
(
config_file
)[
'exclusions'
]
&
.
values
||
[]
else
[]
end
end
end
end
end
spec/lib/gitlab/bullet/exclusions_spec.rb
0 → 100644
View file @
3f91ec43
# frozen_string_literal: true
require
'fast_spec_helper'
RSpec
.
describe
Gitlab
::
Bullet
::
Exclusions
do
let
(
:config_file
)
do
file
=
Tempfile
.
new
(
'bullet.yml'
)
File
.
basename
(
file
)
end
let
(
:exclude
)
{
[]
}
let
(
:config
)
do
{
exclusions:
{
abc:
{
merge_request:
'_mr_'
,
path_with_method:
true
,
exclude:
exclude
}
}
}
end
before
do
File
.
write
(
config_file
,
config
.
deep_stringify_keys
.
to_yaml
)
end
after
do
FileUtils
.
rm_f
(
config_file
)
end
describe
'#execute'
do
subject
(
:executor
)
{
described_class
.
new
(
config_file
).
execute
}
shared_examples_for
'loads exclusion results'
do
let
(
:config
)
{
{
exclusions:
{
abc:
{
exclude:
exclude
}
}
}
}
let
(
:results
)
{
[
exclude
]
}
specify
do
expect
(
executor
).
to
match
(
results
)
end
end
context
'with preferred method of path and method name'
do
it_behaves_like
'loads exclusion results'
do
let
(
:exclude
)
{
%w[_path_ _method_]
}
end
end
context
'with file pattern'
do
it_behaves_like
'loads exclusion results'
do
let
(
:exclude
)
{
[
'_file_pattern_'
]
}
end
end
context
'with file name and line range'
do
it_behaves_like
'loads exclusion results'
do
let
(
:exclude
)
{
[
'file_name.rb'
,
5
..
10
]
}
end
end
context
'without exclusions'
do
it_behaves_like
'loads exclusion results'
do
let
(
:exclude
)
{
[]
}
end
end
context
'without exclusions key in config'
do
it_behaves_like
'loads exclusion results'
do
let
(
:config
)
{
{}
}
let
(
:results
)
{
[]
}
end
end
context
'when config file does not exist'
do
it
'provides an empty array for exclusions'
do
expect
(
described_class
.
new
(
'_some_bogus_file_'
).
execute
).
to
match
([])
end
end
end
describe
'#validate_paths!'
do
context
'when validating scenarios'
do
let
(
:source_file
)
do
file
=
Tempfile
.
new
(
'bullet_test_source_file.rb'
)
File
.
basename
(
file
)
end
subject
{
described_class
.
new
(
config_file
).
validate_paths!
}
before
do
FileUtils
.
touch
(
source_file
)
end
after
do
FileUtils
.
rm_f
(
source_file
)
end
context
'when using paths with method name'
do
let
(
:exclude
)
{
[
source_file
,
'_method_'
]
}
context
'when source file for exclusion exists'
do
specify
do
expect
{
subject
}.
not_to
raise_error
end
end
context
'when source file for exclusion does not exist'
do
let
(
:exclude
)
{
%w[_bogus_file_ _method_]
}
specify
do
expect
{
subject
}.
to
raise_error
(
RuntimeError
)
end
end
end
context
'when using path only'
do
let
(
:exclude
)
{
[
source_file
]
}
context
'when source file for exclusion exists'
do
specify
do
expect
{
subject
}.
not_to
raise_error
end
end
context
'when source file for exclusion does not exist'
do
let
(
:exclude
)
{
'_bogus_file_'
}
specify
do
expect
{
subject
}.
to
raise_error
(
RuntimeError
)
end
end
end
context
'when path_with_method is false for a file pattern'
do
let
(
:exclude
)
{
[
'_file_pattern_'
]
}
let
(
:config
)
do
{
exclusions:
{
abc:
{
merge_request:
'_mr_'
,
path_with_method:
false
,
exclude:
exclude
}
}
}
end
specify
do
expect
{
subject
}.
not_to
raise_error
end
end
end
end
end
spec/lib/gitlab/bullet_spec.rb
0 → 100644
View file @
3f91ec43
# frozen_string_literal: true
require
'spec_helper'
RSpec
.
describe
Gitlab
::
Bullet
do
describe
'#enabled?'
do
it
'is enabled'
do
stub_env
(
'ENABLE_BULLET'
,
true
)
expect
(
described_class
.
enabled?
).
to
be
(
true
)
end
it
'is not enabled'
do
stub_env
(
'ENABLE_BULLET'
,
nil
)
expect
(
described_class
.
enabled?
).
to
be
(
false
)
end
it
'is correctly aliased for #extra_logging_enabled?'
do
expect
(
described_class
.
method
(
:extra_logging_enabled?
).
original_name
).
to
eq
(
:enabled?
)
end
end
describe
'#configure_bullet?'
do
context
'with ENABLE_BULLET true'
do
before
do
stub_env
(
'ENABLE_BULLET'
,
true
)
end
it
'is configurable'
do
expect
(
described_class
.
configure_bullet?
).
to
be
(
true
)
end
end
context
'with ENABLE_BULLET falsey'
do
before
do
stub_env
(
'ENABLE_BULLET'
,
nil
)
end
it
'is not configurable'
do
expect
(
described_class
.
configure_bullet?
).
to
be
(
false
)
end
it
'is configurable in development'
do
allow
(
Rails
).
to
receive_message_chain
(
:env
,
:development?
).
and_return
(
true
)
expect
(
described_class
.
configure_bullet?
).
to
be
(
true
)
end
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment