Commit 37606e66 authored by Andreas Brandl's avatar Andreas Brandl

Merge branch '9932-fix-deprecated-attribute_changed-ce' into 'master'

[CE] Remove deprecated usage of `attribute_changed?`

See merge request gitlab-org/gitlab-ce!27577
parents 00a5b9b0 fc22626f
...@@ -140,7 +140,7 @@ class CommitStatus < ApplicationRecord ...@@ -140,7 +140,7 @@ class CommitStatus < ApplicationRecord
end end
def locking_enabled? def locking_enabled?
status_changed? will_save_change_to_status?
end end
def before_sha def before_sha
......
...@@ -117,7 +117,7 @@ module Issuable ...@@ -117,7 +117,7 @@ module Issuable
# We want to use optimistic lock for cases when only title or description are involved # We want to use optimistic lock for cases when only title or description are involved
# http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html # http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html
def locking_enabled? def locking_enabled?
title_changed? || description_changed? will_save_change_to_title? || will_save_change_to_description?
end end
def allows_multiple_assignees? def allows_multiple_assignees?
......
...@@ -13,20 +13,20 @@ module Storage ...@@ -13,20 +13,20 @@ module Storage
raise Gitlab::UpdatePathError.new("Namespace #{name} (#{id}) cannot be moved because at least one project (e.g. #{proj_with_tags.name} (#{proj_with_tags.id})) has tags in container registry") raise Gitlab::UpdatePathError.new("Namespace #{name} (#{id}) cannot be moved because at least one project (e.g. #{proj_with_tags.name} (#{proj_with_tags.id})) has tags in container registry")
end end
parent_was = if parent_changed? && parent_id_before_last_save.present? parent_was = if saved_change_to_parent? && parent_id_before_last_save.present?
Namespace.find(parent_id_before_last_save) # raise NotFound early if needed Namespace.find(parent_id_before_last_save) # raise NotFound early if needed
end end
move_repositories move_repositories
if parent_changed? if saved_change_to_parent?
former_parent_full_path = parent_was&.full_path former_parent_full_path = parent_was&.full_path
parent_full_path = parent&.full_path parent_full_path = parent&.full_path
Gitlab::UploadsTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path) Gitlab::UploadsTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path)
Gitlab::PagesTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path) Gitlab::PagesTransfer.new.move_namespace(path, former_parent_full_path, parent_full_path)
else else
Gitlab::UploadsTransfer.new.rename_namespace(full_path_was, full_path) Gitlab::UploadsTransfer.new.rename_namespace(full_path_before_last_save, full_path)
Gitlab::PagesTransfer.new.rename_namespace(full_path_was, full_path) Gitlab::PagesTransfer.new.rename_namespace(full_path_before_last_save, full_path)
end end
# If repositories moved successfully we need to # If repositories moved successfully we need to
...@@ -38,7 +38,7 @@ module Storage ...@@ -38,7 +38,7 @@ module Storage
write_projects_repository_config write_projects_repository_config
rescue => e rescue => e
# Raise if development/test environment, else just notify Sentry # Raise if development/test environment, else just notify Sentry
Gitlab::Sentry.track_exception(e, extra: { full_path_was: full_path_was, full_path: full_path, action: 'move_dir' }) Gitlab::Sentry.track_exception(e, extra: { full_path_before_last_save: full_path_before_last_save, full_path: full_path, action: 'move_dir' })
end end
true # false would cancel later callbacks but not rollback true # false would cancel later callbacks but not rollback
...@@ -57,14 +57,14 @@ module Storage ...@@ -57,14 +57,14 @@ module Storage
# Move the namespace directory in all storages used by member projects # Move the namespace directory in all storages used by member projects
repository_storages.each do |repository_storage| repository_storages.each do |repository_storage|
# Ensure old directory exists before moving it # Ensure old directory exists before moving it
gitlab_shell.add_namespace(repository_storage, full_path_was) gitlab_shell.add_namespace(repository_storage, full_path_before_last_save)
# Ensure new directory exists before moving it (if there's a parent) # Ensure new directory exists before moving it (if there's a parent)
gitlab_shell.add_namespace(repository_storage, parent.full_path) if parent gitlab_shell.add_namespace(repository_storage, parent.full_path) if parent
unless gitlab_shell.mv_namespace(repository_storage, full_path_was, full_path) unless gitlab_shell.mv_namespace(repository_storage, full_path_before_last_save, full_path)
Rails.logger.error "Exception moving path #{repository_storage} from #{full_path_was} to #{full_path}" Rails.logger.error "Exception moving path #{repository_storage} from #{full_path_before_last_save} to #{full_path}"
# if we cannot move namespace directory we should rollback # if we cannot move namespace directory we should rollback
# db changes in order to prevent out of sync between db and fs # db changes in order to prevent out of sync between db and fs
......
...@@ -134,7 +134,7 @@ class MergeRequestDiff < ApplicationRecord ...@@ -134,7 +134,7 @@ class MergeRequestDiff < ApplicationRecord
# It allows you to override variables like head_commit_sha before getting diff. # It allows you to override variables like head_commit_sha before getting diff.
after_create :save_git_content, unless: :importing? after_create :save_git_content, unless: :importing?
after_save :update_external_diff_store, if: -> { !importing? && external_diff_changed? } after_save :update_external_diff_store, if: -> { !importing? && saved_change_to_external_diff? }
def self.find_by_diff_refs(diff_refs) def self.find_by_diff_refs(diff_refs)
find_by(start_commit_sha: diff_refs.start_sha, head_commit_sha: diff_refs.head_sha, base_commit_sha: diff_refs.base_sha) find_by(start_commit_sha: diff_refs.start_sha, head_commit_sha: diff_refs.head_sha, base_commit_sha: diff_refs.base_sha)
...@@ -154,7 +154,14 @@ class MergeRequestDiff < ApplicationRecord ...@@ -154,7 +154,14 @@ class MergeRequestDiff < ApplicationRecord
ensure_commit_shas ensure_commit_shas
save_commits save_commits
save_diffs save_diffs
# Another set of `after_save` hooks will be called here when we update the record
save save
# We need to reset so that dirty tracking is reset when running the original set
# of `after_save` hooks that come after this `after_create` hook. Otherwise, the
# hooks that run when an attribute was changed are run twice.
reset
keep_around_commits keep_around_commits
end end
...@@ -348,7 +355,7 @@ class MergeRequestDiff < ApplicationRecord ...@@ -348,7 +355,7 @@ class MergeRequestDiff < ApplicationRecord
has_attribute?(:external_diff_store) has_attribute?(:external_diff_store)
end end
def external_diff_changed? def saved_change_to_external_diff?
super if has_attribute?(:external_diff) super if has_attribute?(:external_diff)
end end
......
...@@ -63,7 +63,7 @@ class Namespace < ApplicationRecord ...@@ -63,7 +63,7 @@ class Namespace < ApplicationRecord
# Legacy Storage specific hooks # Legacy Storage specific hooks
after_update :move_dir, if: :path_or_parent_changed? after_update :move_dir, if: :saved_change_to_path_or_parent?
before_destroy(prepend: true) { prepare_for_destroy } before_destroy(prepend: true) { prepare_for_destroy }
after_destroy :rm_dir after_destroy :rm_dir
...@@ -144,7 +144,7 @@ class Namespace < ApplicationRecord ...@@ -144,7 +144,7 @@ class Namespace < ApplicationRecord
def send_update_instructions def send_update_instructions
projects.each do |project| projects.each do |project|
project.send_move_instructions("#{full_path_was}/#{project.path}") project.send_move_instructions("#{full_path_before_last_save}/#{project.path}")
end end
end end
...@@ -229,10 +229,6 @@ class Namespace < ApplicationRecord ...@@ -229,10 +229,6 @@ class Namespace < ApplicationRecord
[owner_id] [owner_id]
end end
def parent_changed?
parent_id_changed?
end
# Includes projects from this namespace and projects from all subgroups # Includes projects from this namespace and projects from all subgroups
# that belongs to this namespace # that belongs to this namespace
def all_projects def all_projects
...@@ -262,12 +258,12 @@ class Namespace < ApplicationRecord ...@@ -262,12 +258,12 @@ class Namespace < ApplicationRecord
false false
end end
def full_path_was def full_path_before_last_save
if parent_id_was.nil? if parent_id_before_last_save.nil?
path_was path_before_last_save
else else
previous_parent = Group.find_by(id: parent_id_was) previous_parent = Group.find_by(id: parent_id_before_last_save)
previous_parent.full_path + '/' + path_was previous_parent.full_path + '/' + path_before_last_save
end end
end end
...@@ -293,7 +289,15 @@ class Namespace < ApplicationRecord ...@@ -293,7 +289,15 @@ class Namespace < ApplicationRecord
private private
def path_or_parent_changed? def parent_changed?
parent_id_changed?
end
def saved_change_to_parent?
saved_change_to_parent_id?
end
def saved_change_to_path_or_parent?
saved_change_to_path? || saved_change_to_parent_id? saved_change_to_path? || saved_change_to_parent_id?
end end
......
...@@ -26,7 +26,7 @@ class PagesDomain < ApplicationRecord ...@@ -26,7 +26,7 @@ class PagesDomain < ApplicationRecord
after_initialize :set_verification_code after_initialize :set_verification_code
after_create :update_daemon after_create :update_daemon
after_update :update_daemon, if: :pages_config_changed? after_update :update_daemon, if: :saved_change_to_pages_config?
after_destroy :update_daemon after_destroy :update_daemon
scope :enabled, -> { where('enabled_until >= ?', Time.now ) } scope :enabled, -> { where('enabled_until >= ?', Time.now ) }
...@@ -148,7 +148,7 @@ class PagesDomain < ApplicationRecord ...@@ -148,7 +148,7 @@ class PagesDomain < ApplicationRecord
end end
# rubocop: enable CodeReuse/ServiceClass # rubocop: enable CodeReuse/ServiceClass
def pages_config_changed? def saved_change_to_pages_config?
saved_change_to_project_id? || saved_change_to_project_id? ||
saved_change_to_domain? || saved_change_to_domain? ||
saved_change_to_certificate? || saved_change_to_certificate? ||
......
...@@ -1912,8 +1912,8 @@ class Project < ApplicationRecord ...@@ -1912,8 +1912,8 @@ class Project < ApplicationRecord
false false
end end
def full_path_was def full_path_before_last_save
File.join(namespace.full_path, previous_changes['path'].first) File.join(namespace.full_path, path_before_last_save)
end end
alias_method :name_with_namespace, :full_name alias_method :name_with_namespace, :full_name
......
...@@ -22,8 +22,8 @@ class RemoteMirror < ApplicationRecord ...@@ -22,8 +22,8 @@ class RemoteMirror < ApplicationRecord
before_save :set_new_remote_name, if: :mirror_url_changed? before_save :set_new_remote_name, if: :mirror_url_changed?
after_save :set_override_remote_mirror_available, unless: -> { Gitlab::CurrentSettings.current_application_settings.mirror_available } after_save :set_override_remote_mirror_available, unless: -> { Gitlab::CurrentSettings.current_application_settings.mirror_available }
after_save :refresh_remote, if: :mirror_url_changed? after_save :refresh_remote, if: :saved_change_to_mirror_url?
after_update :reset_fields, if: :mirror_url_changed? after_update :reset_fields, if: :saved_change_to_mirror_url?
after_commit :remove_remote, on: :destroy after_commit :remove_remote, on: :destroy
...@@ -265,4 +265,8 @@ class RemoteMirror < ApplicationRecord ...@@ -265,4 +265,8 @@ class RemoteMirror < ApplicationRecord
def mirror_url_changed? def mirror_url_changed?
url_changed? || credentials_changed? url_changed? || credentials_changed?
end end
def saved_change_to_mirror_url?
saved_change_to_url? || saved_change_to_credentials?
end
end end
...@@ -30,7 +30,7 @@ module Storage ...@@ -30,7 +30,7 @@ module Storage
end end
def rename_repo(old_full_path: nil, new_full_path: nil) def rename_repo(old_full_path: nil, new_full_path: nil)
old_full_path ||= project.full_path_was old_full_path ||= project.full_path_before_last_save
new_full_path ||= project.build_full_path new_full_path ||= project.build_full_path
if gitlab_shell.mv_repository(repository_storage, old_full_path, new_full_path) if gitlab_shell.mv_repository(repository_storage, old_full_path, new_full_path)
......
...@@ -79,10 +79,7 @@ module Projects ...@@ -79,10 +79,7 @@ module Projects
end end
def after_rename_service(project) def after_rename_service(project)
# The path slug the project was using, before the rename took place. AfterRenameService.new(project, path_before: project.path_before_last_save, full_path_before: project.full_path_before_last_save)
path_before = project.previous_changes['path'].first
AfterRenameService.new(project, path_before: path_before, full_path_before: project.full_path_was)
end end
def changing_pages_related_config? def changing_pages_related_config?
......
...@@ -47,7 +47,7 @@ class SystemHooksService ...@@ -47,7 +47,7 @@ class SystemHooksService
case event case event
when :rename when :rename
data[:old_username] = model.username_was data[:old_username] = model.username_before_last_save
when :failed_login when :failed_login
data[:state] = model.state data[:state] = model.state
end end
...@@ -58,8 +58,8 @@ class SystemHooksService ...@@ -58,8 +58,8 @@ class SystemHooksService
if event == :rename if event == :rename
data.merge!( data.merge!(
old_path: model.path_was, old_path: model.path_before_last_save,
old_full_path: model.full_path_was old_full_path: model.full_path_before_last_save
) )
end end
when GroupMember when GroupMember
......
...@@ -117,7 +117,7 @@ module ObjectStorage ...@@ -117,7 +117,7 @@ module ObjectStorage
next unless uploader next unless uploader
next unless uploader.exists? next unless uploader.exists?
next unless send(:"#{mounted_as}_changed?") # rubocop:disable GitlabSecurity/PublicSend next unless send(:"saved_change_to_#{mounted_as}?") # rubocop:disable GitlabSecurity/PublicSend
mount mount
end.keys end.keys
......
...@@ -46,13 +46,6 @@ class TurnNestedGroupsIntoRegularGroupsForMysql < ActiveRecord::Migration[4.2] ...@@ -46,13 +46,6 @@ class TurnNestedGroupsIntoRegularGroupsForMysql < ActiveRecord::Migration[4.2]
bulk_insert_members(rows) bulk_insert_members(rows)
# This method relies on the parent to determine the proper path.
# Because we reset "parent_id" this method will not return the right path
# when moving namespaces.
full_path_was = namespace.send(:full_path_was)
namespace.define_singleton_method(:full_path_was) { full_path_was }
namespace.update!(parent_id: nil, path: new_path_for(namespace)) namespace.update!(parent_id: nil, path: new_path_for(namespace))
end end
end end
......
...@@ -449,7 +449,7 @@ describe CommitStatus do ...@@ -449,7 +449,7 @@ describe CommitStatus do
end end
it "lock" do it "lock" do
is_expected.to be true is_expected.to be_truthy
end end
it "raise exception when trying to update" do it "raise exception when trying to update" do
...@@ -463,7 +463,7 @@ describe CommitStatus do ...@@ -463,7 +463,7 @@ describe CommitStatus do
end end
it "do not lock" do it "do not lock" do
is_expected.to be false is_expected.to be_falsey
end end
it "save correctly" do it "save correctly" do
......
...@@ -743,22 +743,25 @@ describe Namespace do ...@@ -743,22 +743,25 @@ describe Namespace do
end end
end end
describe '#full_path_was' do describe '#full_path_before_last_save' do
context 'when the group has no parent' do context 'when the group has no parent' do
it 'returns the path was' do it 'returns the path before last save' do
group = create(:group, parent: nil) group = create(:group)
expect(group.full_path_was).to eq(group.path_was)
group.update(parent: nil)
expect(group.full_path_before_last_save).to eq(group.path_before_last_save)
end end
end end
context 'when a parent is assigned to a group with no previous parent' do context 'when a parent is assigned to a group with no previous parent' do
it 'returns the path was' do it 'returns the path before last save' do
group = create(:group, parent: nil) group = create(:group, parent: nil)
parent = create(:group) parent = create(:group)
group.parent = parent
expect(group.full_path_was).to eq("#{group.path_was}") group.update(parent: parent)
expect(group.full_path_before_last_save).to eq("#{group.path_before_last_save}")
end end
end end
...@@ -766,9 +769,10 @@ describe Namespace do ...@@ -766,9 +769,10 @@ describe Namespace do
it 'returns the parent full path' do it 'returns the parent full path' do
parent = create(:group) parent = create(:group)
group = create(:group, parent: parent) group = create(:group, parent: parent)
group.parent = nil
expect(group.full_path_was).to eq("#{parent.full_path}/#{group.path}") group.update(parent: nil)
expect(group.full_path_before_last_save).to eq("#{parent.full_path}/#{group.path}")
end end
end end
...@@ -777,8 +781,10 @@ describe Namespace do ...@@ -777,8 +781,10 @@ describe Namespace do
parent = create(:group) parent = create(:group)
group = create(:group, parent: parent) group = create(:group, parent: parent)
new_parent = create(:group) new_parent = create(:group)
group.parent = new_parent
expect(group.full_path_was).to eq("#{parent.full_path}/#{group.path}") group.update(parent: new_parent)
expect(group.full_path_before_last_save).to eq("#{parent.full_path}/#{group.path}")
end end
end end
end end
......
...@@ -86,20 +86,20 @@ describe SystemHooksService do ...@@ -86,20 +86,20 @@ describe SystemHooksService do
context 'group_rename' do context 'group_rename' do
it 'contains old and new path' do it 'contains old and new path' do
allow(group).to receive(:path_was).and_return('old-path') allow(group).to receive(:path_before_last_save).and_return('old-path')
data = event_data(group, :rename) data = event_data(group, :rename)
expect(data).to include(:event_name, :name, :created_at, :updated_at, :full_path, :path, :group_id, :old_path, :old_full_path) expect(data).to include(:event_name, :name, :created_at, :updated_at, :full_path, :path, :group_id, :old_path, :old_full_path)
expect(data[:path]).to eq(group.path) expect(data[:path]).to eq(group.path)
expect(data[:full_path]).to eq(group.path) expect(data[:full_path]).to eq(group.path)
expect(data[:old_path]).to eq(group.path_was) expect(data[:old_path]).to eq(group.path_before_last_save)
expect(data[:old_full_path]).to eq(group.path_was) expect(data[:old_full_path]).to eq(group.path_before_last_save)
end end
it 'contains old and new full_path for subgroup' do it 'contains old and new full_path for subgroup' do
subgroup = create(:group, parent: group) subgroup = create(:group, parent: group)
allow(subgroup).to receive(:path_was).and_return('old-path') allow(subgroup).to receive(:path_before_last_save).and_return('old-path')
data = event_data(subgroup, :rename) data = event_data(subgroup, :rename)
...@@ -110,13 +110,13 @@ describe SystemHooksService do ...@@ -110,13 +110,13 @@ describe SystemHooksService do
context 'user_rename' do context 'user_rename' do
it 'contains old and new username' do it 'contains old and new username' do
allow(user).to receive(:username_was).and_return('old-username') allow(user).to receive(:username_before_last_save).and_return('old-username')
data = event_data(user, :rename) data = event_data(user, :rename)
expect(data).to include(:event_name, :name, :created_at, :updated_at, :email, :user_id, :username, :old_username) expect(data).to include(:event_name, :name, :created_at, :updated_at, :email, :user_id, :username, :old_username)
expect(data[:username]).to eq(user.username) expect(data[:username]).to eq(user.username)
expect(data[:old_username]).to eq(user.username_was) expect(data[:old_username]).to eq(user.username_before_last_save)
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