summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorHan Loong Liauw <hanloongliauw@gmail.com>2015-10-13 21:24:44 +1100
committerHan Loong Liauw <hanloongliauw@gmail.com>2015-10-13 21:42:17 +1100
commitdf99ddbba13db4a7699bf1d585675f921cf382ce (patch)
treea6597628f5c46a553725a121169755f4c0f9cef2 /app
parente12b6f30efef3f607cacc5da51f8c49c3be4643a (diff)
downloadgitlab-ce-df99ddbba13db4a7699bf1d585675f921cf382ce.tar.gz
Adds ability to remove the forked relationship
This was previously possible through the API but can now be done through the project#edit settings screen if the current user is the owner of the project. Update changelog
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects_controller.rb9
-rw-r--r--app/helpers/projects_helper.rb4
-rw-r--r--app/models/ability.rb3
-rw-r--r--app/views/projects/edit.html.haml16
-rw-r--r--app/views/projects/remove_fork.js.haml2
5 files changed, 32 insertions, 2 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 213c2a7173b..1fb83d0eb6d 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -5,7 +5,7 @@ class ProjectsController < ApplicationController
before_action :repository, except: [:new, :create]
# Authorize
- before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive]
+ before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive, :remove_fork]
before_action :event_filter, only: [:show, :activity]
layout :determine_layout
@@ -64,6 +64,13 @@ class ProjectsController < ApplicationController
end
end
+ def remove_fork
+ if @project.forked?
+ @project.forked_project_link.destroy
+ flash[:notice] = 'Fork relationship has been removed.'
+ end
+ end
+
def activity
respond_to do |format|
format.html
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index a0220af4c30..b0a3a20fa0a 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -70,6 +70,10 @@ module ProjectsHelper
"You are going to transfer #{project.name_with_namespace} to another owner. Are you ABSOLUTELY sure?"
end
+ def remove_fork_project_message(project)
+ "You are going to remove the fork relationship to the source project from #{@project.forked_from_project.namespace.try(:name)}. Are you ABSOLUTELY sure?"
+ end
+
def project_nav_tabs
@nav_tabs ||= get_project_nav_tabs(@project, current_user)
end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index a020b24a550..11ada46610b 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -185,7 +185,8 @@ class Ability
:change_visibility_level,
:rename_project,
:remove_project,
- :archive_project
+ :archive_project,
+ :remove_fork_project
]
end
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index 1882a82fba5..ce77a9242fc 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -189,6 +189,21 @@
- else
.nothing-here-block Only the project owner can transfer a project
+ - if @project.forked? && can?(current_user, :remove_fork_project, @project)
+ = form_for([@project.namespace.becomes(Namespace), @project], url: remove_fork_namespace_project_path(@project.namespace, @project), method: :put, remote: true, html: { class: 'transfer-project form-horizontal' }) do |f|
+ .panel.panel-default.panel.panel-danger
+ .panel-heading Remove forked relationship
+ .panel-body
+ %p
+ This will remove the relationship to the source project from
+ = link_to project_path(@project.forked_from_project) do
+ = @project.forked_from_project.namespace.try(:name)
+ %br
+ %strong Once removed it cannot be reversed through this interface
+ = button_to 'Remove forked relationship', '#', class: "btn btn-remove js-confirm-danger", data: { "confirm-danger-message" => remove_fork_project_message(@project) }
+ - elsif @project.forked?
+ .nothing-here-block Only the project owner can remove the fork relationship
+
- if can?(current_user, :remove_project, @project)
.panel.panel-default.panel.panel-danger
.panel-heading Remove project
@@ -203,6 +218,7 @@
- else
.nothing-here-block Only project owner can remove a project
+
.save-project-loader.hide
.center
%h2
diff --git a/app/views/projects/remove_fork.js.haml b/app/views/projects/remove_fork.js.haml
new file mode 100644
index 00000000000..17b9fecfeb1
--- /dev/null
+++ b/app/views/projects/remove_fork.js.haml
@@ -0,0 +1,2 @@
+:plain
+ location.href = "#{edit_namespace_project_path(@project.namespace, @project)}";