Commit ef205c88 authored by Douwe Maan's avatar Douwe Maan Committed by Yorick Peterse

Merge branch 'current-settings-use-request-store-during-request'

parent ac538743
...@@ -8,6 +8,10 @@ v 8.8.3 ...@@ -8,6 +8,10 @@ v 8.8.3
- Improve design of Pipeline View. !4230 - Improve design of Pipeline View. !4230
- Fix gitlab importer failing to import new projects due to missing credentials. !4301 - Fix gitlab importer failing to import new projects due to missing credentials. !4301
- Fix import URL migration not rescuing with the correct Error. !4321 - Fix import URL migration not rescuing with the correct Error. !4321
- Fix gitlab importer failing to import new projects due to missing credentials
- Fix import URL migration not rescuing with the correct Error
- In search results, only show notes on confidential issues that the user has access to
- Fix health check access token changing due to old application settings being used
v 8.8.2 v 8.8.2
- Added remove due date button. !4209 - Added remove due date button. !4209
......
...@@ -98,6 +98,10 @@ class ApplicationSetting < ActiveRecord::Base ...@@ -98,6 +98,10 @@ class ApplicationSetting < ActiveRecord::Base
Rails.cache.delete(CACHE_KEY) Rails.cache.delete(CACHE_KEY)
end end
def self.cached
Rails.cache.fetch(CACHE_KEY)
end
def self.create_from_defaults def self.create_from_defaults
create( create(
default_projects_limit: Settings.gitlab['default_projects_limit'], default_projects_limit: Settings.gitlab['default_projects_limit'],
......
module Gitlab module Gitlab
module CurrentSettings module CurrentSettings
def current_application_settings def current_application_settings
key = :current_application_settings if RequestStore.active?
RequestStore.fetch(:current_application_settings) { ensure_application_settings! }
RequestStore.store[key] ||= begin else
settings = nil ensure_application_settings!
end
end
if connect_to_db? def ensure_application_settings!
settings = ::ApplicationSetting.current settings = ::ApplicationSetting.cached
settings ||= ::ApplicationSetting.create_from_defaults unless ActiveRecord::Migrator.needs_migration?
end
settings || fake_application_settings if !settings && connect_to_db?
settings = ::ApplicationSetting.current
settings ||= ::ApplicationSetting.create_from_defaults unless ActiveRecord::Migrator.needs_migration?
end end
settings || fake_application_settings
end end
def fake_application_settings def fake_application_settings
......
...@@ -11,7 +11,7 @@ describe RegistrationsController do ...@@ -11,7 +11,7 @@ describe RegistrationsController do
let(:user_params) { { user: { name: "new_user", username: "new_username", email: "new@user.com", password: "Any_password" } } } let(:user_params) { { user: { name: "new_user", username: "new_username", email: "new@user.com", password: "Any_password" } } }
context 'when sending email confirmation' do context 'when sending email confirmation' do
before { allow(current_application_settings).to receive(:send_user_confirmation_email).and_return(false) } before { allow_any_instance_of(ApplicationSetting).to receive(:send_user_confirmation_email).and_return(false) }
it 'logs user in directly' do it 'logs user in directly' do
post(:create, user_params) post(:create, user_params)
...@@ -21,7 +21,7 @@ describe RegistrationsController do ...@@ -21,7 +21,7 @@ describe RegistrationsController do
end end
context 'when not sending email confirmation' do context 'when not sending email confirmation' do
before { allow(current_application_settings).to receive(:send_user_confirmation_email).and_return(true) } before { allow_any_instance_of(ApplicationSetting).to receive(:send_user_confirmation_email).and_return(true) }
it 'does not authenticate user and sends confirmation email' do it 'does not authenticate user and sends confirmation email' do
post(:create, user_params) post(:create, user_params)
......
...@@ -6,8 +6,8 @@ describe Gitlab::AkismetHelper, type: :helper do ...@@ -6,8 +6,8 @@ describe Gitlab::AkismetHelper, type: :helper do
before do before do
allow(Gitlab.config.gitlab).to receive(:url).and_return(Settings.send(:build_gitlab_url)) allow(Gitlab.config.gitlab).to receive(:url).and_return(Settings.send(:build_gitlab_url))
current_application_settings.akismet_enabled = true allow_any_instance_of(ApplicationSetting).to receive(:akismet_enabled).and_return(true)
current_application_settings.akismet_api_key = '12345' allow_any_instance_of(ApplicationSetting).to receive(:akismet_api_key).and_return('12345')
end end
describe '#check_for_spam?' do describe '#check_for_spam?' do
......
...@@ -51,7 +51,7 @@ describe Notify do ...@@ -51,7 +51,7 @@ describe Notify do
context 'when enabled email_author_in_body' do context 'when enabled email_author_in_body' do
before do before do
allow(current_application_settings).to receive(:email_author_in_body).and_return(true) allow_any_instance_of(ApplicationSetting).to receive(:email_author_in_body).and_return(true)
end end
it 'contains a link to note author' do it 'contains a link to note author' do
...@@ -230,7 +230,7 @@ describe Notify do ...@@ -230,7 +230,7 @@ describe Notify do
context 'when enabled email_author_in_body' do context 'when enabled email_author_in_body' do
before do before do
allow(current_application_settings).to receive(:email_author_in_body).and_return(true) allow_any_instance_of(ApplicationSetting).to receive(:email_author_in_body).and_return(true)
end end
it 'contains a link to note author' do it 'contains a link to note author' do
...@@ -454,7 +454,7 @@ describe Notify do ...@@ -454,7 +454,7 @@ describe Notify do
context 'when enabled email_author_in_body' do context 'when enabled email_author_in_body' do
before do before do
allow(current_application_settings).to receive(:email_author_in_body).and_return(true) allow_any_instance_of(ApplicationSetting).to receive(:email_author_in_body).and_return(true)
end end
it 'contains a link to note author' do it 'contains a link to note author' do
......
...@@ -67,7 +67,7 @@ describe User, models: true do ...@@ -67,7 +67,7 @@ describe User, models: true do
describe 'email' do describe 'email' do
context 'when no signup domains listed' do context 'when no signup domains listed' do
before { allow(current_application_settings).to receive(:restricted_signup_domains).and_return([]) } before { allow_any_instance_of(ApplicationSetting).to receive(:restricted_signup_domains).and_return([]) }
it 'accepts any email' do it 'accepts any email' do
user = build(:user, email: "info@example.com") user = build(:user, email: "info@example.com")
expect(user).to be_valid expect(user).to be_valid
...@@ -75,7 +75,7 @@ describe User, models: true do ...@@ -75,7 +75,7 @@ describe User, models: true do
end end
context 'when a signup domain is listed and subdomains are allowed' do context 'when a signup domain is listed and subdomains are allowed' do
before { allow(current_application_settings).to receive(:restricted_signup_domains).and_return(['example.com', '*.example.com']) } before { allow_any_instance_of(ApplicationSetting).to receive(:restricted_signup_domains).and_return(['example.com', '*.example.com']) }
it 'accepts info@example.com' do it 'accepts info@example.com' do
user = build(:user, email: "info@example.com") user = build(:user, email: "info@example.com")
expect(user).to be_valid expect(user).to be_valid
...@@ -93,7 +93,7 @@ describe User, models: true do ...@@ -93,7 +93,7 @@ describe User, models: true do
end end
context 'when a signup domain is listed and subdomains are not allowed' do context 'when a signup domain is listed and subdomains are not allowed' do
before { allow(current_application_settings).to receive(:restricted_signup_domains).and_return(['example.com']) } before { allow_any_instance_of(ApplicationSetting).to receive(:restricted_signup_domains).and_return(['example.com']) }
it 'accepts info@example.com' do it 'accepts info@example.com' do
user = build(:user, email: "info@example.com") user = build(:user, email: "info@example.com")
...@@ -141,7 +141,7 @@ describe User, models: true do ...@@ -141,7 +141,7 @@ describe User, models: true do
end end
describe '#confirm' do describe '#confirm' do
before { allow(current_application_settings).to receive(:send_user_confirmation_email).and_return(true) } before { allow_any_instance_of(ApplicationSetting).to receive(:send_user_confirmation_email).and_return(true) }
let(:user) { create(:user, confirmed_at: nil, unconfirmed_email: 'test@gitlab.com') } let(:user) { create(:user, confirmed_at: nil, unconfirmed_email: 'test@gitlab.com') }
it 'returns unconfirmed' do it 'returns unconfirmed' do
......
...@@ -13,8 +13,8 @@ describe Groups::CreateService, services: true do ...@@ -13,8 +13,8 @@ describe Groups::CreateService, services: true do
end end
context "cannot create group with restricted visibility level" do context "cannot create group with restricted visibility level" do
before { allow(current_application_settings).to receive(:restricted_visibility_levels).and_return([Gitlab::VisibilityLevel::PUBLIC]) } before { allow_any_instance_of(ApplicationSetting).to receive(:restricted_visibility_levels).and_return([Gitlab::VisibilityLevel::PUBLIC]) }
it { is_expected.to_not be_persisted } it { is_expected.not_to be_persisted }
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment