Rename users that had their namespace renamed
This commit is contained in:
parent
e4eec19156
commit
df5c3f364a
3 changed files with 63 additions and 1 deletions
|
@ -0,0 +1,43 @@
|
||||||
|
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||||
|
# for more information on how to write migrations for GitLab.
|
||||||
|
|
||||||
|
class RenameUsersWithRenamedNamespace < ActiveRecord::Migration
|
||||||
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
|
DOWNTIME = false
|
||||||
|
DISALLOWED_ROOT_PATHS = %w[
|
||||||
|
-
|
||||||
|
abuse_reports
|
||||||
|
api
|
||||||
|
autocomplete
|
||||||
|
explore
|
||||||
|
health_check
|
||||||
|
import
|
||||||
|
invites
|
||||||
|
jwt
|
||||||
|
koding
|
||||||
|
member
|
||||||
|
notification_settings
|
||||||
|
oauth
|
||||||
|
sent_notifications
|
||||||
|
unicorn_test
|
||||||
|
uploads
|
||||||
|
users
|
||||||
|
]
|
||||||
|
|
||||||
|
def up
|
||||||
|
namespace_table = Arel::Table.new('namespaces')
|
||||||
|
users_table = Arel::Table.new('users')
|
||||||
|
matching_path = namespace_table.project(namespace_table[:path])
|
||||||
|
.join(users_table).on(users_table[:id].eq(namespace_table[:owner_id]))
|
||||||
|
.where(users_table[:username].not_eq(namespace_table[:path]))
|
||||||
|
path_name = Arel::Nodes::SqlLiteral.new("matching_path.path FROM (#{matching_path.to_sql}) as matching_path")
|
||||||
|
|
||||||
|
update_column_in_batches(:users, :username, path_name) do |table, query|
|
||||||
|
query.where(table[:username].matches_any(DISALLOWED_ROOT_PATHS))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20170516183131) do
|
ActiveRecord::Schema.define(version: 20170518200835) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
19
spec/migrations/rename_users_with_renamed_namespace_spec.rb
Normal file
19
spec/migrations/rename_users_with_renamed_namespace_spec.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require Rails.root.join('db', 'post_migrate', '20170518200835_rename_users_with_renamed_namespace.rb')
|
||||||
|
|
||||||
|
describe RenameUsersWithRenamedNamespace, truncate: true do
|
||||||
|
it 'renames a user that had his namespace renamed to the namespace path' do
|
||||||
|
other_user = create(:user, username: 'kodingu')
|
||||||
|
|
||||||
|
user = create(:user, username: "Users0")
|
||||||
|
user.update_attribute(:username, 'Users')
|
||||||
|
user1 = create(:user, username: "import0")
|
||||||
|
user1.update_attribute(:username, 'import')
|
||||||
|
|
||||||
|
described_class.new.up
|
||||||
|
|
||||||
|
expect(user.reload.username).to eq('Users0')
|
||||||
|
expect(user1.reload.username).to eq('import0')
|
||||||
|
expect(other_user.reload.username).to eq('kodingu')
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue