Skip to content
Snippets Groups Projects
Commit 4023d9f8 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

class for moving project

parent d71a68af
No related branches found
No related tags found
1 merge request!2051User/Group namespaces for projects
Loading
Loading
@@ -4,7 +4,10 @@ class ProjectObserver < ActiveRecord::Observer
 
# Move repository if namespace changed
if project.namespace_id_changed? and not project.new_record?
move_project(project)
old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || ''
new_dir = Namespace.find_by_id(project.namespace_id).try(:path) || ''
Gitlab::ProjectMover.new(project, old_dir, new_dir).execute
end
end
 
Loading
Loading
@@ -23,20 +26,4 @@ class ProjectObserver < ActiveRecord::Observer
def log_info message
Gitlab::AppLogger.info message
end
def move_project(project)
old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || ''
new_dir = Namespace.find_by_id(project.namespace_id).try(:path) || ''
# Create new dir if missing
new_dir_path = File.join(Gitlab.config.git_base_path, new_dir)
Dir.mkdir(new_dir_path) unless File.exists?(new_dir_path)
old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git")
new_path = File.join(new_dir_path, "#{project.path}.git")
`mv #{old_path} #{new_path}`
log_info "Project #{project.name} was moved from #{old_path} to #{new_path}"
end
end
Loading
Loading
@@ -5,7 +5,7 @@ require 'rspec'
require 'database_cleaner'
require 'spinach/capybara'
 
%w(gitolite_stub stubbed_repository valid_commit).each do |f|
%w(namespaces_stub gitolite_stub stubbed_repository valid_commit).each do |f|
require Rails.root.join('spec', 'support', f)
end
 
Loading
Loading
# ProjectMover class
#
# Used for moving project repositories from one subdir to another
module Gitlab
class ProjectMover
attr_reader :project, :old_dir, :new_dir
def initialize(project, old_dir, new_dir)
@project = project
@old_dir = old_dir
@new_dir = new_dir
end
def execute
# Create new dir if missing
new_dir_path = File.join(Gitlab.config.git_base_path, new_dir)
Dir.mkdir(new_dir_path) unless File.exists?(new_dir_path)
old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git")
new_path = File.join(new_dir_path, "#{project.path}.git")
if system("mv #{old_path} #{new_path}")
log_info "Project #{project.name} was moved from #{old_path} to #{new_path}"
true
else
log_info "Error! Project #{project.name} cannot be moved from #{old_path} to #{new_path}"
false
end
end
protected
def log_info message
Gitlab::AppLogger.info message
end
end
end
require 'namespace'
require 'gitlab/project_mover'
class Namespace
def ensure_dir_exist
true
end
end
class Gitlab::ProjectMover
def execute
true
end
end
Loading
Loading
@@ -28,10 +28,4 @@ module StubbedRepository
end
end
 
class Namespace
def ensure_dir_exist
true
end
end
Project.send(:include, StubbedRepository)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment