Merge branch 'remove-rails4-specific-code' into 'master'
Remove rails4 specific code See merge request gitlab-org/gitlab-ce!23847
This commit is contained in:
commit
32b6129d8c
|
@ -12,9 +12,6 @@ class ApplicationController < ActionController::Base
|
||||||
include EnforcesTwoFactorAuthentication
|
include EnforcesTwoFactorAuthentication
|
||||||
include WithPerformanceBar
|
include WithPerformanceBar
|
||||||
include SessionlessAuthentication
|
include SessionlessAuthentication
|
||||||
# this can be removed after switching to rails 5
|
|
||||||
# https://gitlab.com/gitlab-org/gitlab-ce/issues/51908
|
|
||||||
include InvalidUTF8ErrorHandler unless Gitlab.rails5?
|
|
||||||
|
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_action :enforce_terms!, if: :should_enforce_terms?
|
before_action :enforce_terms!, if: :should_enforce_terms?
|
||||||
|
@ -157,7 +154,7 @@ class ApplicationController < ActionController::Base
|
||||||
def log_exception(exception)
|
def log_exception(exception)
|
||||||
Gitlab::Sentry.track_acceptable_exception(exception)
|
Gitlab::Sentry.track_acceptable_exception(exception)
|
||||||
|
|
||||||
backtrace_cleaner = Gitlab.rails5? ? request.env["action_dispatch.backtrace_cleaner"] : env
|
backtrace_cleaner = request.env["action_dispatch.backtrace_cleaner"]
|
||||||
application_trace = ActionDispatch::ExceptionWrapper.new(backtrace_cleaner, exception).application_trace
|
application_trace = ActionDispatch::ExceptionWrapper.new(backtrace_cleaner, exception).application_trace
|
||||||
application_trace.map! { |t| " #{t}\n" }
|
application_trace.map! { |t| " #{t}\n" }
|
||||||
logger.error "\n#{exception.class.name} (#{exception.message}):\n#{application_trace.join}"
|
logger.error "\n#{exception.class.name} (#{exception.message}):\n#{application_trace.join}"
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module InvalidUTF8ErrorHandler
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
rescue_from ArgumentError, with: :handle_invalid_utf8
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def handle_invalid_utf8(error)
|
|
||||||
if error.message == "invalid byte sequence in UTF-8"
|
|
||||||
render_412
|
|
||||||
else
|
|
||||||
raise(error)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def render_412
|
|
||||||
respond_to do |format|
|
|
||||||
format.html { render "errors/precondition_failed", layout: "errors", status: 412 }
|
|
||||||
format.js { render json: { error: 'Invalid UTF-8' }, status: :precondition_failed, content_type: 'application/json' }
|
|
||||||
format.any { head :precondition_failed }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -56,11 +56,7 @@ module Ci
|
||||||
validates :tag, inclusion: { in: [false], if: :merge_request? }
|
validates :tag, inclusion: { in: [false], if: :merge_request? }
|
||||||
validates :status, presence: { unless: :importing? }
|
validates :status, presence: { unless: :importing? }
|
||||||
validate :valid_commit_sha, unless: :importing?
|
validate :valid_commit_sha, unless: :importing?
|
||||||
|
validates :source, exclusion: { in: %w(unknown), unless: :importing? }, on: :create
|
||||||
# Replace validator below with
|
|
||||||
# `validates :source, presence: { unless: :importing? }, on: :create`
|
|
||||||
# when removing Gitlab.rails5? code.
|
|
||||||
validate :valid_source, unless: :importing?, on: :create
|
|
||||||
|
|
||||||
after_create :keep_around_commits, unless: :importing?
|
after_create :keep_around_commits, unless: :importing?
|
||||||
|
|
||||||
|
@ -738,11 +734,5 @@ module Ci
|
||||||
|
|
||||||
project.repository.keep_around(self.sha, self.before_sha)
|
project.repository.keep_around(self.sha, self.before_sha)
|
||||||
end
|
end
|
||||||
|
|
||||||
def valid_source
|
|
||||||
if source.nil? || source == "unknown"
|
|
||||||
errors.add(:source, "invalid source")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -58,8 +58,7 @@ module Ci
|
||||||
|
|
||||||
# BACKWARD COMPATIBILITY: There are needed to maintain compatibility with `AVAILABLE_SCOPES` used by `lib/api/runners.rb`
|
# BACKWARD COMPATIBILITY: There are needed to maintain compatibility with `AVAILABLE_SCOPES` used by `lib/api/runners.rb`
|
||||||
scope :deprecated_shared, -> { instance_type }
|
scope :deprecated_shared, -> { instance_type }
|
||||||
# this should get replaced with `project_type.or(group_type)` once using Rails5
|
scope :deprecated_specific, -> { project_type.or(group_type) }
|
||||||
scope :deprecated_specific, -> { where(runner_type: [runner_types[:project_type], runner_types[:group_type]]) }
|
|
||||||
|
|
||||||
scope :belonging_to_project, -> (project_id) {
|
scope :belonging_to_project, -> (project_id) {
|
||||||
joins(:runner_projects).where(ci_runner_projects: { project_id: project_id })
|
joins(:runner_projects).where(ci_runner_projects: { project_id: project_id })
|
||||||
|
|
|
@ -16,7 +16,7 @@ module EnumWithNil
|
||||||
# E.g. for enum_with_nil failure_reason: { unknown_failure: nil }
|
# E.g. for enum_with_nil failure_reason: { unknown_failure: nil }
|
||||||
# this overrides auto-generated method `unknown_failure?`
|
# this overrides auto-generated method `unknown_failure?`
|
||||||
define_method("#{key_with_nil}?") do
|
define_method("#{key_with_nil}?") do
|
||||||
Gitlab.rails5? ? self[name].nil? : super()
|
self[name].nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
# E.g. for enum_with_nil failure_reason: { unknown_failure: nil }
|
# E.g. for enum_with_nil failure_reason: { unknown_failure: nil }
|
||||||
|
@ -24,7 +24,6 @@ module EnumWithNil
|
||||||
define_method(name) do
|
define_method(name) do
|
||||||
orig = super()
|
orig = super()
|
||||||
|
|
||||||
return orig unless Gitlab.rails5?
|
|
||||||
return orig unless orig.nil?
|
return orig unless orig.nil?
|
||||||
|
|
||||||
self.class.public_send(name.to_s.pluralize).key(nil) # rubocop:disable GitlabSecurity/PublicSend
|
self.class.public_send(name.to_s.pluralize).key(nil) # rubocop:disable GitlabSecurity/PublicSend
|
||||||
|
|
|
@ -49,10 +49,6 @@ module RedisCacheable
|
||||||
end
|
end
|
||||||
|
|
||||||
def cast_value_from_cache(attribute, value)
|
def cast_value_from_cache(attribute, value)
|
||||||
if Gitlab.rails5?
|
self.class.type_for_attribute(attribute.to_s).cast(value)
|
||||||
self.class.type_for_attribute(attribute.to_s).cast(value)
|
|
||||||
else
|
|
||||||
self.class.column_for_attribute(attribute).type_cast_from_database(value)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -114,19 +114,6 @@ class Event < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Remove this method when removing Gitlab.rails5? code.
|
|
||||||
def subclass_from_attributes(attrs)
|
|
||||||
return super if Gitlab.rails5?
|
|
||||||
|
|
||||||
# Without this Rails will keep calling this method on the returned class,
|
|
||||||
# resulting in an infinite loop.
|
|
||||||
return unless self == Event
|
|
||||||
|
|
||||||
action = attrs.with_indifferent_access[inheritance_column].to_i
|
|
||||||
|
|
||||||
PushEvent if action == PUSHED
|
|
||||||
end
|
|
||||||
|
|
||||||
# Update Gitlab::ContributionsCalendar#activity_dates if this changes
|
# Update Gitlab::ContributionsCalendar#activity_dates if this changes
|
||||||
def contributions
|
def contributions
|
||||||
where("action = ? OR (target_type IN (?) AND action IN (?)) OR (target_type = ? AND action = ?)",
|
where("action = ? OR (target_type IN (?) AND action IN (?)) OR (target_type = ? AND action = ?)",
|
||||||
|
|
|
@ -210,11 +210,7 @@ class Service < ActiveRecord::Base
|
||||||
class_eval %{
|
class_eval %{
|
||||||
def #{arg}?
|
def #{arg}?
|
||||||
# '!!' is used because nil or empty string is converted to nil
|
# '!!' is used because nil or empty string is converted to nil
|
||||||
if Gitlab.rails5?
|
!!ActiveRecord::Type::Boolean.new.cast(#{arg})
|
||||||
!!ActiveRecord::Type::Boolean.new.cast(#{arg})
|
|
||||||
else
|
|
||||||
!!ActiveRecord::Type::Boolean.new.type_cast_from_database(#{arg})
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Remove rails4 specific code
|
||||||
|
merge_request: 23847
|
||||||
|
author: Jasper Maes
|
||||||
|
type: other
|
|
@ -5,12 +5,6 @@ require 'rails/all'
|
||||||
Bundler.require(:default, Rails.env)
|
Bundler.require(:default, Rails.env)
|
||||||
|
|
||||||
module Gitlab
|
module Gitlab
|
||||||
# This method is used for smooth upgrading from the current Rails 4.x to Rails 5.0.
|
|
||||||
# https://gitlab.com/gitlab-org/gitlab-ce/issues/14286
|
|
||||||
def self.rails5?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
class Application < Rails::Application
|
class Application < Rails::Application
|
||||||
require_dependency Rails.root.join('lib/gitlab/redis/wrapper')
|
require_dependency Rails.root.join('lib/gitlab/redis/wrapper')
|
||||||
require_dependency Rails.root.join('lib/gitlab/redis/cache')
|
require_dependency Rails.root.join('lib/gitlab/redis/cache')
|
||||||
|
|
|
@ -37,12 +37,7 @@ class AddTrigramIndexesForSearching < ActiveRecord::Migration[4.2]
|
||||||
res = execute("SELECT true AS enabled FROM pg_available_extensions WHERE name = 'pg_trgm' AND installed_version IS NOT NULL;")
|
res = execute("SELECT true AS enabled FROM pg_available_extensions WHERE name = 'pg_trgm' AND installed_version IS NOT NULL;")
|
||||||
row = res.first
|
row = res.first
|
||||||
|
|
||||||
check = if Gitlab.rails5?
|
row && row['enabled'] == true
|
||||||
true
|
|
||||||
else
|
|
||||||
't'
|
|
||||||
end
|
|
||||||
row && row['enabled'] == check ? true : false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_trigrams_extension
|
def create_trigrams_extension
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
class FixupEnvironmentNameUniqueness < ActiveRecord::Migration[4.2]
|
class FixupEnvironmentNameUniqueness < ActiveRecord::Migration[4.2]
|
||||||
include Gitlab::Database::ArelMethods
|
|
||||||
include Gitlab::Database::MigrationHelpers
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
DOWNTIME = true
|
DOWNTIME = true
|
||||||
|
@ -42,7 +41,7 @@ class FixupEnvironmentNameUniqueness < ActiveRecord::Migration[4.2]
|
||||||
|
|
||||||
conflicts.each do |id, name|
|
conflicts.each do |id, name|
|
||||||
update_sql =
|
update_sql =
|
||||||
arel_update_manager
|
Arel::UpdateManager.new
|
||||||
.table(environments)
|
.table(environments)
|
||||||
.set(environments[:name] => name + "-" + id.to_s)
|
.set(environments[:name] => name + "-" + id.to_s)
|
||||||
.where(environments[:id].eq(id))
|
.where(environments[:id].eq(id))
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
# for more information on how to write migrations for GitLab.
|
# for more information on how to write migrations for GitLab.
|
||||||
|
|
||||||
class AddEnvironmentSlug < ActiveRecord::Migration[4.2]
|
class AddEnvironmentSlug < ActiveRecord::Migration[4.2]
|
||||||
include Gitlab::Database::ArelMethods
|
|
||||||
include Gitlab::Database::MigrationHelpers
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
DOWNTIME = true
|
DOWNTIME = true
|
||||||
|
@ -20,7 +19,7 @@ class AddEnvironmentSlug < ActiveRecord::Migration[4.2]
|
||||||
finder = environments.project(:id, :name)
|
finder = environments.project(:id, :name)
|
||||||
|
|
||||||
connection.exec_query(finder.to_sql).rows.each do |id, name|
|
connection.exec_query(finder.to_sql).rows.each do |id, name|
|
||||||
updater = arel_update_manager
|
updater = Arel::UpdateManager.new
|
||||||
.table(environments)
|
.table(environments)
|
||||||
.set(environments[:slug] => generate_slug(name))
|
.set(environments[:slug] => generate_slug(name))
|
||||||
.where(environments[:id].eq(id))
|
.where(environments[:id].eq(id))
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
class FixProjectRecordsWithInvalidVisibility < ActiveRecord::Migration[4.2]
|
class FixProjectRecordsWithInvalidVisibility < ActiveRecord::Migration[4.2]
|
||||||
include Gitlab::Database::ArelMethods
|
|
||||||
include Gitlab::Database::MigrationHelpers
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
BATCH_SIZE = 500
|
BATCH_SIZE = 500
|
||||||
|
@ -34,7 +33,7 @@ class FixProjectRecordsWithInvalidVisibility < ActiveRecord::Migration[4.2]
|
||||||
end
|
end
|
||||||
|
|
||||||
updates.each do |visibility_level, project_ids|
|
updates.each do |visibility_level, project_ids|
|
||||||
updater = arel_update_manager
|
updater = Arel::UpdateManager.new
|
||||||
.table(projects)
|
.table(projects)
|
||||||
.set(projects[:visibility_level] => visibility_level)
|
.set(projects[:visibility_level] => visibility_level)
|
||||||
.where(projects[:id].in(project_ids))
|
.where(projects[:id].in(project_ids))
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# rubocop:disable Migration/UpdateLargeTable
|
# rubocop:disable Migration/UpdateLargeTable
|
||||||
class MigrateUserActivitiesToUsersLastActivityOn < ActiveRecord::Migration[4.2]
|
class MigrateUserActivitiesToUsersLastActivityOn < ActiveRecord::Migration[4.2]
|
||||||
include Gitlab::Database::ArelMethods
|
|
||||||
include Gitlab::Database::MigrationHelpers
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
disable_ddl_transaction!
|
disable_ddl_transaction!
|
||||||
|
@ -40,7 +39,7 @@ class MigrateUserActivitiesToUsersLastActivityOn < ActiveRecord::Migration[4.2]
|
||||||
activities = activities(day.at_beginning_of_day, day.at_end_of_day, page: page)
|
activities = activities(day.at_beginning_of_day, day.at_end_of_day, page: page)
|
||||||
|
|
||||||
update_sql =
|
update_sql =
|
||||||
arel_update_manager
|
Arel::UpdateManager.new
|
||||||
.table(users_table)
|
.table(users_table)
|
||||||
.set(users_table[:last_activity_on] => day.to_date)
|
.set(users_table[:last_activity_on] => day.to_date)
|
||||||
.where(users_table[:username].in(activities.map(&:first)))
|
.where(users_table[:username].in(activities.map(&:first)))
|
||||||
|
|
|
@ -291,7 +291,7 @@ module API
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
permitted_attrs = ActionController::Parameters.new(attrs).permit!
|
permitted_attrs = ActionController::Parameters.new(attrs).permit!
|
||||||
Gitlab.rails5? ? permitted_attrs.to_h : permitted_attrs
|
permitted_attrs.to_h
|
||||||
end
|
end
|
||||||
|
|
||||||
# rubocop: disable CodeReuse/ActiveRecord
|
# rubocop: disable CodeReuse/ActiveRecord
|
||||||
|
|
|
@ -22,14 +22,10 @@ module DeclarativePolicy
|
||||||
key = Cache.policy_key(user, subject)
|
key = Cache.policy_key(user, subject)
|
||||||
|
|
||||||
cache[key] ||=
|
cache[key] ||=
|
||||||
if Gitlab.rails5?
|
# to avoid deadlocks in multi-threaded environment when
|
||||||
# to avoid deadlocks in multi-threaded environment when
|
# autoloading is enabled, we allow concurrent loads,
|
||||||
# autoloading is enabled, we allow concurrent loads,
|
# https://gitlab.com/gitlab-org/gitlab-ce/issues/48263
|
||||||
# https://gitlab.com/gitlab-org/gitlab-ce/issues/48263
|
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
|
||||||
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
|
|
||||||
class_for(subject).new(user, subject, opts)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
class_for(subject).new(user, subject, opts)
|
class_for(subject).new(user, subject, opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -232,11 +232,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.cached_table_exists?(table_name)
|
def self.cached_table_exists?(table_name)
|
||||||
if Gitlab.rails5?
|
connection.schema_cache.data_source_exists?(table_name)
|
||||||
connection.schema_cache.data_source_exists?(table_name)
|
|
||||||
else
|
|
||||||
connection.schema_cache.table_exists?(table_name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private_class_method :connection
|
private_class_method :connection
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Gitlab
|
|
||||||
module Database
|
|
||||||
module ArelMethods
|
|
||||||
private
|
|
||||||
|
|
||||||
# In Arel 7.0.0 (Arel 7.1.4 is used in Rails 5.0) the `engine` parameter of `Arel::UpdateManager#initializer`
|
|
||||||
# was removed.
|
|
||||||
# Remove this file and inline this method when removing rails5? code.
|
|
||||||
def arel_update_manager
|
|
||||||
if Gitlab.rails5?
|
|
||||||
Arel::UpdateManager.new
|
|
||||||
else
|
|
||||||
Arel::UpdateManager.new(ActiveRecord::Base)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -35,13 +35,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def mysql_median_datetime_sql(arel_table, query_so_far, column_sym)
|
def mysql_median_datetime_sql(arel_table, query_so_far, column_sym)
|
||||||
arel_from = if Gitlab.rails5?
|
query = arel_table.from
|
||||||
arel_table.from
|
|
||||||
else
|
|
||||||
arel_table
|
|
||||||
end
|
|
||||||
|
|
||||||
query = arel_from
|
|
||||||
.from(arel_table.project(Arel.sql('*')).order(arel_table[column_sym]).as(arel_table.table_name))
|
.from(arel_table.project(Arel.sql('*')).order(arel_table[column_sym]).as(arel_table.table_name))
|
||||||
.project(average([arel_table[column_sym]], 'median'))
|
.project(average([arel_table[column_sym]], 'median'))
|
||||||
.where(
|
.where(
|
||||||
|
@ -151,13 +145,8 @@ module Gitlab
|
||||||
.order(arel_table[column_sym])
|
.order(arel_table[column_sym])
|
||||||
).as('row_id')
|
).as('row_id')
|
||||||
|
|
||||||
arel_from = if Gitlab.rails5?
|
count = arel_table.from.from(arel_table.alias)
|
||||||
arel_table.from.from(arel_table.alias)
|
.project('COUNT(*)')
|
||||||
else
|
|
||||||
arel_table.from(arel_table.alias)
|
|
||||||
end
|
|
||||||
|
|
||||||
count = arel_from.project('COUNT(*)')
|
|
||||||
.where(arel_table[partition_column].eq(arel_table.alias[partition_column]))
|
.where(arel_table[partition_column].eq(arel_table.alias[partition_column]))
|
||||||
.as('ct')
|
.as('ct')
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
module Gitlab
|
module Gitlab
|
||||||
module Database
|
module Database
|
||||||
module MigrationHelpers
|
module MigrationHelpers
|
||||||
include Gitlab::Database::ArelMethods
|
|
||||||
|
|
||||||
BACKGROUND_MIGRATION_BATCH_SIZE = 1000 # Number of rows to process per job
|
BACKGROUND_MIGRATION_BATCH_SIZE = 1000 # Number of rows to process per job
|
||||||
BACKGROUND_MIGRATION_JOB_BUFFER_SIZE = 1000 # Number of jobs to bulk queue at a time
|
BACKGROUND_MIGRATION_JOB_BUFFER_SIZE = 1000 # Number of jobs to bulk queue at a time
|
||||||
|
|
||||||
|
@ -361,7 +359,7 @@ module Gitlab
|
||||||
stop_arel = yield table, stop_arel if block_given?
|
stop_arel = yield table, stop_arel if block_given?
|
||||||
stop_row = exec_query(stop_arel.to_sql).to_hash.first
|
stop_row = exec_query(stop_arel.to_sql).to_hash.first
|
||||||
|
|
||||||
update_arel = arel_update_manager
|
update_arel = Arel::UpdateManager.new
|
||||||
.table(table)
|
.table(table)
|
||||||
.set([[table[column], value]])
|
.set([[table[column], value]])
|
||||||
.where(table[:id].gteq(start_id))
|
.where(table[:id].gteq(start_id))
|
||||||
|
|
|
@ -5,8 +5,6 @@ module Gitlab
|
||||||
module RenameReservedPathsMigration
|
module RenameReservedPathsMigration
|
||||||
module V1
|
module V1
|
||||||
class RenameBase
|
class RenameBase
|
||||||
include Gitlab::Database::ArelMethods
|
|
||||||
|
|
||||||
attr_reader :paths, :migration
|
attr_reader :paths, :migration
|
||||||
|
|
||||||
delegate :update_column_in_batches,
|
delegate :update_column_in_batches,
|
||||||
|
@ -66,7 +64,7 @@ module Gitlab
|
||||||
old_full_path,
|
old_full_path,
|
||||||
new_full_path)
|
new_full_path)
|
||||||
|
|
||||||
update = arel_update_manager
|
update = Arel::UpdateManager.new
|
||||||
.table(routes)
|
.table(routes)
|
||||||
.set([[routes[:path], replace_statement]])
|
.set([[routes[:path], replace_statement]])
|
||||||
.where(Arel::Nodes::SqlLiteral.new(filter))
|
.where(Arel::Nodes::SqlLiteral.new(filter))
|
||||||
|
|
|
@ -8,14 +8,7 @@ module Gitlab
|
||||||
# behaviour from the default Binary type.
|
# behaviour from the default Binary type.
|
||||||
ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Bytea
|
ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Bytea
|
||||||
else
|
else
|
||||||
# In Rails 5.0 `Type` has been moved from `ActiveRecord` to `ActiveModel`
|
ActiveModel::Type::Binary
|
||||||
# https://github.com/rails/rails/commit/9cc8c6f3730df3d94c81a55be9ee1b7b4ffd29f6#diff-f8ba7983a51d687976e115adcd95822b
|
|
||||||
# Remove this method and leave just `ActiveModel::Type::Binary` when removing Gitlab.rails5? code.
|
|
||||||
if Gitlab.rails5?
|
|
||||||
ActiveModel::Type::Binary
|
|
||||||
else
|
|
||||||
ActiveRecord::Type::Binary
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Class for casting binary data to hexadecimal SHA1 hashes (and vice-versa).
|
# Class for casting binary data to hexadecimal SHA1 hashes (and vice-versa).
|
||||||
|
@ -26,31 +19,9 @@ module Gitlab
|
||||||
class ShaAttribute < BINARY_TYPE
|
class ShaAttribute < BINARY_TYPE
|
||||||
PACK_FORMAT = 'H*'.freeze
|
PACK_FORMAT = 'H*'.freeze
|
||||||
|
|
||||||
# It is called from activerecord-4.2.10/lib/active_record internal methods.
|
|
||||||
# Remove this method when removing Gitlab.rails5? code.
|
|
||||||
def type_cast_from_database(value)
|
|
||||||
unpack_sha(super)
|
|
||||||
end
|
|
||||||
|
|
||||||
# It is called from activerecord-4.2.10/lib/active_record internal methods.
|
|
||||||
# Remove this method when removing Gitlab.rails5? code.
|
|
||||||
def type_cast_for_database(value)
|
|
||||||
serialize(value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# It is called from activerecord-5.0.6/lib/active_record/attribute.rb
|
|
||||||
# Remove this method when removing Gitlab.rails5? code..
|
|
||||||
def deserialize(value)
|
|
||||||
value = Gitlab.rails5? ? super : method(:type_cast_from_database).super_method.call(value)
|
|
||||||
|
|
||||||
unpack_sha(value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Rename this method to `deserialize(value)` removing Gitlab.rails5? code.
|
|
||||||
# Casts binary data to a SHA1 in hexadecimal.
|
# Casts binary data to a SHA1 in hexadecimal.
|
||||||
def unpack_sha(value)
|
def deserialize(value)
|
||||||
# Uncomment this line when removing Gitlab.rails5? code.
|
value = super(value)
|
||||||
# value = super
|
|
||||||
value ? value.unpack(PACK_FORMAT)[0] : nil
|
value ? value.unpack(PACK_FORMAT)[0] : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -58,7 +29,7 @@ module Gitlab
|
||||||
def serialize(value)
|
def serialize(value)
|
||||||
arg = value ? [value].pack(PACK_FORMAT) : nil
|
arg = value ? [value].pack(PACK_FORMAT) : nil
|
||||||
|
|
||||||
Gitlab.rails5? ? super(arg) : method(:type_cast_for_database).super_method.call(arg)
|
super(arg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,15 +6,11 @@ module Gitlab
|
||||||
class << self
|
class << self
|
||||||
def self_join(relation)
|
def self_join(relation)
|
||||||
t = relation.arel_table
|
t = relation.arel_table
|
||||||
t2 = if !Gitlab.rails5?
|
# Work around a bug in Rails 5, where LIMIT causes trouble
|
||||||
relation.arel.as('t2')
|
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/51729
|
||||||
else
|
r = relation.limit(nil).arel
|
||||||
# Work around a bug in Rails 5, where LIMIT causes trouble
|
r.take(relation.limit_value) if relation.limit_value
|
||||||
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/51729
|
t2 = r.as('t2')
|
||||||
r = relation.limit(nil).arel
|
|
||||||
r.take(relation.limit_value) if relation.limit_value
|
|
||||||
r.as('t2')
|
|
||||||
end
|
|
||||||
|
|
||||||
relation.unscoped.joins(t.join(t2).on(t[:id].eq(t2[:id])).join_sources.first)
|
relation.unscoped.joins(t.join(t2).on(t[:id].eq(t2[:id])).join_sources.first)
|
||||||
end
|
end
|
||||||
|
|
|
@ -73,13 +73,7 @@ module Gitlab
|
||||||
if MUTEX.locked? && MUTEX.owned?
|
if MUTEX.locked? && MUTEX.owned?
|
||||||
optimistic_using_tmp_keychain(&block)
|
optimistic_using_tmp_keychain(&block)
|
||||||
else
|
else
|
||||||
if Gitlab.rails5?
|
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
|
||||||
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
|
|
||||||
MUTEX.synchronize do
|
|
||||||
optimistic_using_tmp_keychain(&block)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
MUTEX.synchronize do
|
MUTEX.synchronize do
|
||||||
optimistic_using_tmp_keychain(&block)
|
optimistic_using_tmp_keychain(&block)
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,11 +20,7 @@ module Gitlab
|
||||||
private
|
private
|
||||||
|
|
||||||
def correlation_id(env)
|
def correlation_id(env)
|
||||||
if Gitlab.rails5?
|
request(env).request_id
|
||||||
request(env).request_id
|
|
||||||
else
|
|
||||||
request(env).uuid
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def request(env)
|
def request(env)
|
||||||
|
|
|
@ -17,4 +17,4 @@ module MysqlZeroDate
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend(MysqlZeroDate) if Gitlab.rails5?
|
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend(MysqlZeroDate)
|
||||||
|
|
|
@ -551,14 +551,7 @@ describe ApplicationController do
|
||||||
subject { get :index, text: "hi \255" }
|
subject { get :index, text: "hi \255" }
|
||||||
|
|
||||||
it 'renders 412' do
|
it 'renders 412' do
|
||||||
if Gitlab.rails5?
|
expect { subject }.to raise_error(ActionController::BadRequest)
|
||||||
expect { subject }.to raise_error(ActionController::BadRequest)
|
|
||||||
else
|
|
||||||
subject
|
|
||||||
|
|
||||||
expect(response).to have_gitlab_http_status(412)
|
|
||||||
expect(response).to render_template :precondition_failed
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -566,16 +559,7 @@ describe ApplicationController do
|
||||||
subject { get :index, text: "hi \255", format: :js }
|
subject { get :index, text: "hi \255", format: :js }
|
||||||
|
|
||||||
it 'renders 412' do
|
it 'renders 412' do
|
||||||
if Gitlab.rails5?
|
expect { subject }.to raise_error(ActionController::BadRequest)
|
||||||
expect { subject }.to raise_error(ActionController::BadRequest)
|
|
||||||
else
|
|
||||||
subject
|
|
||||||
|
|
||||||
json_response = JSON.parse(response.body)
|
|
||||||
|
|
||||||
expect(response).to have_gitlab_http_status(412)
|
|
||||||
expect(json_response['error']).to eq('Invalid UTF-8')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -163,11 +163,7 @@ describe Boards::ListsController do
|
||||||
list: { position: position },
|
list: { position: position },
|
||||||
format: :json }
|
format: :json }
|
||||||
|
|
||||||
if Gitlab.rails5?
|
patch :update, params: params, as: :json
|
||||||
patch :update, params: params, as: :json
|
|
||||||
else
|
|
||||||
patch :update, params
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -357,11 +357,7 @@ describe Projects::MergeRequestsController do
|
||||||
context 'when the sha parameter matches the source SHA' do
|
context 'when the sha parameter matches the source SHA' do
|
||||||
def merge_with_sha(params = {})
|
def merge_with_sha(params = {})
|
||||||
post_params = base_params.merge(sha: merge_request.diff_head_sha).merge(params)
|
post_params = base_params.merge(sha: merge_request.diff_head_sha).merge(params)
|
||||||
if Gitlab.rails5?
|
post :merge, params: post_params, as: :json
|
||||||
post :merge, params: post_params, as: :json
|
|
||||||
else
|
|
||||||
post :merge, post_params
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns :success' do
|
it 'returns :success' do
|
||||||
|
|
|
@ -310,19 +310,11 @@ describe Projects::PipelineSchedulesController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def go
|
def go
|
||||||
if Gitlab.rails5?
|
put :update, params: { namespace_id: project.namespace.to_param,
|
||||||
put :update, params: { namespace_id: project.namespace.to_param,
|
project_id: project,
|
||||||
project_id: project,
|
id: pipeline_schedule,
|
||||||
id: pipeline_schedule,
|
schedule: schedule },
|
||||||
schedule: schedule },
|
as: :html
|
||||||
as: :html
|
|
||||||
|
|
||||||
else
|
|
||||||
put :update, namespace_id: project.namespace.to_param,
|
|
||||||
project_id: project,
|
|
||||||
id: pipeline_schedule,
|
|
||||||
schedule: schedule
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,7 @@ end
|
||||||
shared_examples 'content not cached without revalidation and no-store' do
|
shared_examples 'content not cached without revalidation and no-store' do
|
||||||
it 'ensures content will not be cached without revalidation' do
|
it 'ensures content will not be cached without revalidation' do
|
||||||
# Fixed in newer versions of ActivePack, it will only output a single `private`.
|
# Fixed in newer versions of ActivePack, it will only output a single `private`.
|
||||||
if Gitlab.rails5?
|
expect(subject['Cache-Control']).to eq('max-age=0, private, must-revalidate, no-store')
|
||||||
expect(subject['Cache-Control']).to eq('max-age=0, private, must-revalidate, no-store')
|
|
||||||
else
|
|
||||||
expect(subject['Cache-Control']).to eq('max-age=0, private, must-revalidate, private, no-store')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,7 @@ describe StorageHelper do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "uses commas as thousands separator" do
|
it "uses commas as thousands separator" do
|
||||||
if Gitlab.rails5?
|
expect(helper.storage_counter(100_000_000_000_000_000_000_000)).to eq("86,736.2 EB")
|
||||||
expect(helper.storage_counter(100_000_000_000_000_000_000_000)).to eq("86,736.2 EB")
|
|
||||||
else
|
|
||||||
expect(helper.storage_counter(100_000_000_000_000_000)).to eq("90,949.5 TB")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -400,13 +400,8 @@ describe Gitlab::Database do
|
||||||
|
|
||||||
describe '.cached_table_exists?' do
|
describe '.cached_table_exists?' do
|
||||||
it 'only retrieves data once per table' do
|
it 'only retrieves data once per table' do
|
||||||
if Gitlab.rails5?
|
expect(ActiveRecord::Base.connection).to receive(:data_source_exists?).with(:projects).once.and_call_original
|
||||||
expect(ActiveRecord::Base.connection).to receive(:data_source_exists?).with(:projects).once.and_call_original
|
expect(ActiveRecord::Base.connection).to receive(:data_source_exists?).with(:bogus_table_name).once.and_call_original
|
||||||
expect(ActiveRecord::Base.connection).to receive(:data_source_exists?).with(:bogus_table_name).once.and_call_original
|
|
||||||
else
|
|
||||||
expect(ActiveRecord::Base.connection).to receive(:table_exists?).with(:projects).once.and_call_original
|
|
||||||
expect(ActiveRecord::Base.connection).to receive(:table_exists?).with(:bogus_table_name).once.and_call_original
|
|
||||||
end
|
|
||||||
|
|
||||||
2.times do
|
2.times do
|
||||||
expect(described_class.cached_table_exists?(:projects)).to be_truthy
|
expect(described_class.cached_table_exists?(:projects)).to be_truthy
|
||||||
|
|
|
@ -35,9 +35,8 @@ describe Gitlab::SQL::Glob do
|
||||||
value = query("SELECT #{quote(string)} LIKE #{pattern}")
|
value = query("SELECT #{quote(string)} LIKE #{pattern}")
|
||||||
.rows.flatten.first
|
.rows.flatten.first
|
||||||
|
|
||||||
check = Gitlab.rails5? ? true : 't'
|
|
||||||
case value
|
case value
|
||||||
when check, 1
|
when true, 1
|
||||||
true
|
true
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
|
|
|
@ -42,12 +42,7 @@ RSpec.describe NotificationSetting do
|
||||||
expect(notification_setting.new_issue).to eq(true)
|
expect(notification_setting.new_issue).to eq(true)
|
||||||
expect(notification_setting.close_issue).to eq(true)
|
expect(notification_setting.close_issue).to eq(true)
|
||||||
expect(notification_setting.merge_merge_request).to eq(true)
|
expect(notification_setting.merge_merge_request).to eq(true)
|
||||||
|
expect(notification_setting.close_merge_request).to eq(true)
|
||||||
# In Rails 5 assigning a value which is not explicitly `true` or `false` ("nil" in this case)
|
|
||||||
# to a boolean column transforms it to `true`.
|
|
||||||
# In Rails 4 it transforms the value to `false` with deprecation warning.
|
|
||||||
# Replace `eq(Gitlab.rails5?)` with `eq(true)` when removing rails5? code.
|
|
||||||
expect(notification_setting.close_merge_request).to eq(Gitlab.rails5?)
|
|
||||||
expect(notification_setting.reopen_merge_request).to eq(false)
|
expect(notification_setting.reopen_merge_request).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -969,17 +969,10 @@ describe API::Internal do
|
||||||
env: env
|
env: env
|
||||||
}
|
}
|
||||||
|
|
||||||
if Gitlab.rails5?
|
post(
|
||||||
post(
|
api("/internal/allowed"),
|
||||||
api("/internal/allowed"),
|
params: params
|
||||||
params: params
|
)
|
||||||
)
|
|
||||||
else
|
|
||||||
post(
|
|
||||||
api("/internal/allowed"),
|
|
||||||
params
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def archive(key, project)
|
def archive(key, project)
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
|
|
||||||
module TestRequestHelpers
|
module TestRequestHelpers
|
||||||
def test_request(remote_ip: '127.0.0.1')
|
def test_request(remote_ip: '127.0.0.1')
|
||||||
if Gitlab.rails5?
|
ActionController::TestRequest.new({ remote_ip: remote_ip }, ActionController::TestSession.new)
|
||||||
ActionController::TestRequest.new({ remote_ip: remote_ip }, ActionController::TestSession.new)
|
|
||||||
else
|
|
||||||
ActionController::TestRequest.new(remote_ip: remote_ip)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue