Commit 233eb1c6 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Rename repo feature

parent 7ef1c99d
...@@ -69,7 +69,7 @@ class ApplicationController < ActionController::Base ...@@ -69,7 +69,7 @@ class ApplicationController < ActionController::Base
@project @project
else else
@project = nil @project = nil
render_404 render_404 and return
end end
end end
......
...@@ -33,12 +33,12 @@ class ProjectsController < ProjectResourceController ...@@ -33,12 +33,12 @@ class ProjectsController < ProjectResourceController
end end
def update def update
status = ::Projects::UpdateContext.new(project, current_user, params).execute status = ::Projects::UpdateContext.new(@project, current_user, params).execute
respond_to do |format| respond_to do |format|
if status if status
flash[:notice] = 'Project was successfully updated.' flash[:notice] = 'Project was successfully updated.'
format.html { redirect_to edit_project_path(project), notice: 'Project was successfully updated.' } format.html { redirect_to edit_project_path(@project), notice: 'Project was successfully updated.' }
format.js format.js
else else
format.html { render action: "edit" } format.html { render action: "edit" }
......
...@@ -423,4 +423,28 @@ class Project < ActiveRecord::Base ...@@ -423,4 +423,28 @@ class Project < ActiveRecord::Base
def forked? def forked?
!(forked_project_link.nil? || forked_project_link.forked_from_project.nil?) !(forked_project_link.nil? || forked_project_link.forked_from_project.nil?)
end end
def rename_repo
old_path_with_namespace = File.join(namespace_dir, path_was)
new_path_with_namespace = File.join(namespace_dir, path)
if gitlab_shell.mv_repository(old_path_with_namespace, new_path_with_namespace)
# If repository moved successfully we need to remove old satellite
# and send update instructions to users.
# However we cannot allow rollback since we moved repository
# So we basically we mute exceptions in next actions
begin
gitlab_shell.rm_satellites(old_path_with_namespace)
send_move_instructions
rescue
# Returning false does not rolback 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('repository cannot be renamed')
end
end
end end
...@@ -12,6 +12,7 @@ class ProjectObserver < BaseObserver ...@@ -12,6 +12,7 @@ class ProjectObserver < BaseObserver
def after_update(project) def after_update(project)
project.send_move_instructions if project.namespace_id_changed? project.send_move_instructions if project.namespace_id_changed?
project.rename_repo if project.path_changed?
end end
def after_destroy(project) def after_destroy(project)
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
%ul.nav.nav-pills.nav-stacked %ul.nav.nav-pills.nav-stacked
%li.active %li.active
= link_to 'Settings', '#tab-settings', 'data-toggle' => 'tab' = link_to 'Settings', '#tab-settings', 'data-toggle' => 'tab'
%li
= link_to 'Rename repo', '#tab-rename', 'data-toggle' => 'tab'
%li %li
= link_to 'Transfer', '#tab-transfer', 'data-toggle' => 'tab' = link_to 'Transfer', '#tab-transfer', 'data-toggle' => 'tab'
%li %li
...@@ -137,6 +139,24 @@ ...@@ -137,6 +139,24 @@
- else - else
%p.nothing_here_message Only project owner can transfer a project %p.nothing_here_message Only project owner can transfer a project
.tab-pane#tab-rename
.ui-box.ui-box-danger
%h5.title Rename repository
.errors-holder
.form-holder
= form_for(@project) do |f|
.control-group
= f.label :path do
%span Path
.controls
.clearfix
= f.text_field :path
%ul
%li Be careful. Rename of project repo can have unintended side effects
%li You will need to update your local repositories to point to the new location.
.form-actions
= f.submit 'Rename', class: "btn btn-remove"
.tab-pane#tab-remove .tab-pane#tab-remove
- if can?(current_user, :remove_project, @project) - if can?(current_user, :remove_project, @project)
.ui-box.ui-box-danger .ui-box.ui-box-danger
......
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