Commit 4023d9f85290faea47a2b2bcf3ce879ed0f07e9f
1 parent
d71a68af
Exists in
master
and in
4 other branches
class for moving project
Showing
5 changed files
with
56 additions
and
24 deletions
Show diff stats
app/observers/project_observer.rb
| ... | ... | @@ -4,7 +4,10 @@ class ProjectObserver < ActiveRecord::Observer |
| 4 | 4 | |
| 5 | 5 | # Move repository if namespace changed |
| 6 | 6 | if project.namespace_id_changed? and not project.new_record? |
| 7 | - move_project(project) | |
| 7 | + old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || '' | |
| 8 | + new_dir = Namespace.find_by_id(project.namespace_id).try(:path) || '' | |
| 9 | + | |
| 10 | + Gitlab::ProjectMover.new(project, old_dir, new_dir).execute | |
| 8 | 11 | end |
| 9 | 12 | end |
| 10 | 13 | |
| ... | ... | @@ -23,20 +26,4 @@ class ProjectObserver < ActiveRecord::Observer |
| 23 | 26 | def log_info message |
| 24 | 27 | Gitlab::AppLogger.info message |
| 25 | 28 | end |
| 26 | - | |
| 27 | - def move_project(project) | |
| 28 | - old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || '' | |
| 29 | - new_dir = Namespace.find_by_id(project.namespace_id).try(:path) || '' | |
| 30 | - | |
| 31 | - # Create new dir if missing | |
| 32 | - new_dir_path = File.join(Gitlab.config.git_base_path, new_dir) | |
| 33 | - Dir.mkdir(new_dir_path) unless File.exists?(new_dir_path) | |
| 34 | - | |
| 35 | - old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git") | |
| 36 | - new_path = File.join(new_dir_path, "#{project.path}.git") | |
| 37 | - | |
| 38 | - `mv #{old_path} #{new_path}` | |
| 39 | - | |
| 40 | - log_info "Project #{project.name} was moved from #{old_path} to #{new_path}" | |
| 41 | - end | |
| 42 | 29 | end | ... | ... |
features/support/env.rb
| ... | ... | @@ -5,7 +5,7 @@ require 'rspec' |
| 5 | 5 | require 'database_cleaner' |
| 6 | 6 | require 'spinach/capybara' |
| 7 | 7 | |
| 8 | -%w(gitolite_stub stubbed_repository valid_commit).each do |f| | |
| 8 | +%w(namespaces_stub gitolite_stub stubbed_repository valid_commit).each do |f| | |
| 9 | 9 | require Rails.root.join('spec', 'support', f) |
| 10 | 10 | end |
| 11 | 11 | ... | ... |
| ... | ... | @@ -0,0 +1,37 @@ |
| 1 | +# ProjectMover class | |
| 2 | +# | |
| 3 | +# Used for moving project repositories from one subdir to another | |
| 4 | +module Gitlab | |
| 5 | + class ProjectMover | |
| 6 | + attr_reader :project, :old_dir, :new_dir | |
| 7 | + | |
| 8 | + def initialize(project, old_dir, new_dir) | |
| 9 | + @project = project | |
| 10 | + @old_dir = old_dir | |
| 11 | + @new_dir = new_dir | |
| 12 | + end | |
| 13 | + | |
| 14 | + def execute | |
| 15 | + # Create new dir if missing | |
| 16 | + new_dir_path = File.join(Gitlab.config.git_base_path, new_dir) | |
| 17 | + Dir.mkdir(new_dir_path) unless File.exists?(new_dir_path) | |
| 18 | + | |
| 19 | + old_path = File.join(Gitlab.config.git_base_path, old_dir, "#{project.path}.git") | |
| 20 | + new_path = File.join(new_dir_path, "#{project.path}.git") | |
| 21 | + | |
| 22 | + if system("mv #{old_path} #{new_path}") | |
| 23 | + log_info "Project #{project.name} was moved from #{old_path} to #{new_path}" | |
| 24 | + true | |
| 25 | + else | |
| 26 | + log_info "Error! Project #{project.name} cannot be moved from #{old_path} to #{new_path}" | |
| 27 | + false | |
| 28 | + end | |
| 29 | + end | |
| 30 | + | |
| 31 | + protected | |
| 32 | + | |
| 33 | + def log_info message | |
| 34 | + Gitlab::AppLogger.info message | |
| 35 | + end | |
| 36 | + end | |
| 37 | +end | ... | ... |