Commit 175f7f68 authored by Douwe Maan's avatar Douwe Maan

Move files for moved namespaces.

parent 1d829ca1
...@@ -58,10 +58,6 @@ class Namespace < ActiveRecord::Base ...@@ -58,10 +58,6 @@ class Namespace < ActiveRecord::Base
where("name LIKE :query OR path LIKE :query", query: "%#{query}%") where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
end end
def global_id
'GLN'
end
def clean_path(path) def clean_path(path)
path.gsub!(/@.*\z/, "") path.gsub!(/@.*\z/, "")
path.gsub!(/\.git\z/, "") path.gsub!(/\.git\z/, "")
......
class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration
include Gitlab::ShellAdapter
class Namespace < ActiveRecord::Base class Namespace < ActiveRecord::Base
class << self class << self
def by_path(path) def by_path(path)
...@@ -6,6 +8,7 @@ class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration ...@@ -6,6 +8,7 @@ class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration
end end
def clean_path(path) def clean_path(path)
path = path.dup
path.gsub!(/@.*\z/, "") path.gsub!(/@.*\z/, "")
path.gsub!(/\.git\z/, "") path.gsub!(/\.git\z/, "")
path.gsub!(/\A-/, "") path.gsub!(/\A-/, "")
...@@ -25,15 +28,49 @@ class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration ...@@ -25,15 +28,49 @@ class RemovePeriodsAtEndsOfUsernames < ActiveRecord::Migration
end end
def up def up
changed_paths = {}
select_all("SELECT id, username FROM users WHERE username LIKE '%.'").each do |user| select_all("SELECT id, username FROM users WHERE username LIKE '%.'").each do |user|
username = quote_string(Namespace.clean_path(user["username"])) username_was = user["username"]
username = Namespace.clean_path(username_was)
changed_paths[username_was] = username
username = quote_string(username)
execute "UPDATE users SET username = '#{username}' WHERE id = #{user["id"]}" execute "UPDATE users SET username = '#{username}' WHERE id = #{user["id"]}"
execute "UPDATE namespaces SET path = '#{username}', name = '#{username}' WHERE type = NULL AND owner_id = #{user["id"]}" execute "UPDATE namespaces SET path = '#{username}', name = '#{username}' WHERE type = NULL AND owner_id = #{user["id"]}"
end end
select_all("SELECT id, path FROM namespaces WHERE type = 'Group' AND path LIKE '%.'").each do |group| select_all("SELECT id, path FROM namespaces WHERE type = 'Group' AND path LIKE '%.'").each do |group|
path = quote_string(Namespace.clean_path(group["path"])) path_was = group["path"]
path = Namespace.clean_path(path_was)
changed_paths[path_was] = path
path = quote_string(path)
execute "UPDATE namespaces SET path = '#{path}' WHERE id = #{group["id"]}" execute "UPDATE namespaces SET path = '#{path}' WHERE id = #{group["id"]}"
end end
changed_paths.each do |path_was, path|
if gitlab_shell.mv_namespace(path_was, path)
# If repositories moved successfully we need to remove old satellites
# and send update instructions to users.
# However we cannot allow rollback since we moved namespace dir
# So we basically we mute exceptions in next actions
begin
gitlab_shell.rm_satellites(path_was)
# We cannot send update instructions since models and mailers
# can't safely be used from migrations as they may be written for
# later versions of the database.
# send_update_instructions
rescue
# Returning false does not rollback after_* transaction but gives
# us information about failing some of tasks
false
end
else
# if we cannot move namespace directory we should rollback
# db changes in order to prevent out of sync between db and fs
raise Exception.new('namespace directory cannot be moved')
end
end
end end
end end
...@@ -33,8 +33,6 @@ describe Namespace do ...@@ -33,8 +33,6 @@ describe Namespace do
it { is_expected.to respond_to(:to_param) } it { is_expected.to respond_to(:to_param) }
end end
it { expect(Namespace.global_id).to eq('GLN') }
describe :to_param do describe :to_param do
it { expect(namespace.to_param).to eq(namespace.path) } it { expect(namespace.to_param).to eq(namespace.path) }
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