From ecb174bfeadffbccc5c5cf35b6e94b65f5fbce79 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Tue, 2 Feb 2016 17:28:14 +0100 Subject: [PATCH] fixed move project method in migration --- ...remove_dot_atom_path_ending_of_projects.rb | 46 ++++++------------- db/schema.rb | 2 +- lib/gitlab/backend/shell.rb | 2 +- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/db/migrate/20160129135155_remove_dot_atom_path_ending_of_projects.rb b/db/migrate/20160129135155_remove_dot_atom_path_ending_of_projects.rb index 0bc23f5627f..9ca695d713f 100644 --- a/db/migrate/20160129135155_remove_dot_atom_path_ending_of_projects.rb +++ b/db/migrate/20160129135155_remove_dot_atom_path_ending_of_projects.rb @@ -2,11 +2,12 @@ class RemoveDotAtomPathEndingOfProjects < ActiveRecord::Migration include Gitlab::ShellAdapter class ProjectPath - attr_reader :old_path, :id + attr_reader :old_path, :id, :namespace_path - def initialize(old_path, id) + def initialize(old_path, id, namespace_path) @old_path = old_path @id = id + @namespace_path = namespace_path end def clean_path @@ -43,48 +44,27 @@ class RemoveDotAtomPathEndingOfProjects < ActiveRecord::Migration end def projects_with_dot_atom - select_all("SELECT id, path FROM projects WHERE lower(path) LIKE '%.atom'") + select_all("SELECT p.id, p.path, n.path as namespace_path FROM projects p inner join namespaces n on n.id = p.namespace_id WHERE lower(p.path) LIKE '%.atom'") end def up projects_with_dot_atom.each do |project| - binding.pry - project_path = ProjectPath.new(project['path'], project['id']) - clean_path(project_path) if move_path(project_path) + project_path = ProjectPath.new(project['path'], project['id'], project['namespace_path']) + clean_path(project_path) if rename_project_repo(project_path) end end private def clean_path(project_path) - execute "UPDATE projects SET path = '#{project_path.clean_path}' WHERE id = #{project.id}" + execute "UPDATE projects SET path = '#{project_path.clean_path}' WHERE id = #{project_path.id}" end - #TODO: Fix this - def move_path(project_path) - # Based on RemovePeriodsAtEndsOfUsernames - # Don't attempt to move if original path only contains periods. - return if project_path.clean_path =~ /\A\.+\z/ - if gitlab_shell.mv_namespace(project_path.old_path, project_path.clean_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(project_path.old_path) - # 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 avoid - # db changes in order to prevent out of sync between db and fs - false - end + def rename_project_repo(project_path) + old_path_with_namespace = File.join(project_path.namespace_path, project_path.old_path) + new_path_with_namespace = File.join(project_path.namespace_path, project_path.clean_path) + + gitlab_shell.mv_repository("#{old_path_with_namespace}.wiki", "#{new_path_with_namespace}.wiki") + gitlab_shell.mv_repository(old_path_with_namespace, new_path_with_namespace) end end diff --git a/db/schema.rb b/db/schema.rb index 2ad2c23fba5..ad9e9e8a5de 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160128233227) do +ActiveRecord::Schema.define(version: 20160129135155) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/lib/gitlab/backend/shell.rb b/lib/gitlab/backend/shell.rb index 4c15d58d680..f751458ac66 100644 --- a/lib/gitlab/backend/shell.rb +++ b/lib/gitlab/backend/shell.rb @@ -47,7 +47,7 @@ module Gitlab # new_path - new project path with namespace # # Ex. - # mv_repository("gitlab/gitlab-ci", "randx/gitlab-ci-new.git") + # mv_repository("gitlab/gitlab-ci", "randx/gitlab-ci-new") # def mv_repository(path, new_path) Gitlab::Utils.system_silent([gitlab_shell_projects_path, 'mv-project',