Redirect to an already forked project if it exists
Before the we would try to `POST` to the project path, which would result in a 404, because that `POST` is not supported. By changing this back to a normal link, not not handled in JS, we can immeadiatly redirect.
This commit is contained in:
parent
a2fea9288e
commit
299c543973
|
@ -0,0 +1,26 @@
|
||||||
|
- avatar = namespace_icon(namespace, 100)
|
||||||
|
- can_create_project = current_user.can?(:create_projects, namespace)
|
||||||
|
|
||||||
|
- if forked_project = namespace.find_fork_of(@project)
|
||||||
|
.bordered-box.fork-thumbnail.text-center.prepend-left-default.append-right-default.prepend-top-default.append-bottom-default.forked
|
||||||
|
= link_to project_path(forked_project) do
|
||||||
|
- if /no_((\w*)_)*avatar/.match(avatar)
|
||||||
|
= project_identicon(namespace, class: "avatar s100 identicon")
|
||||||
|
- else
|
||||||
|
.avatar-container.s100
|
||||||
|
= image_tag(avatar, class: "avatar s100")
|
||||||
|
%h5.prepend-top-default
|
||||||
|
= namespace.human_name
|
||||||
|
- else
|
||||||
|
.bordered-box.fork-thumbnail.text-center.prepend-left-default.append-right-default.prepend-top-default.append-bottom-default{ class: ("disabled" unless can_create_project) }
|
||||||
|
= link_to project_forks_path(@project, namespace_key: namespace.id),
|
||||||
|
method: "POST",
|
||||||
|
class: ("disabled has-tooltip" unless can_create_project),
|
||||||
|
title: (_('You have reached your project limit') unless can_create_project) do
|
||||||
|
- if /no_((\w*)_)*avatar/.match(avatar)
|
||||||
|
= project_identicon(namespace, class: "avatar s100 identicon")
|
||||||
|
- else
|
||||||
|
.avatar-container.s100
|
||||||
|
= image_tag(avatar, class: "avatar s100")
|
||||||
|
%h5.prepend-top-default
|
||||||
|
= namespace.human_name
|
|
@ -14,22 +14,7 @@
|
||||||
%h5.prepend-top-0.append-bottom-0.prepend-left-default.append-right-default
|
%h5.prepend-top-0.append-bottom-0.prepend-left-default.append-right-default
|
||||||
Click to fork the project
|
Click to fork the project
|
||||||
- @namespaces.each do |namespace|
|
- @namespaces.each do |namespace|
|
||||||
- avatar = namespace_icon(namespace, 100)
|
= render 'fork_button', namespace: namespace
|
||||||
- can_create_project = current_user.can?(:create_projects, namespace)
|
|
||||||
- forked_project = namespace.find_fork_of(@project)
|
|
||||||
- fork_path = forked_project ? project_path(forked_project) : project_forks_path(@project, namespace_key: namespace.id)
|
|
||||||
.bordered-box.fork-thumbnail.text-center.prepend-left-default.append-right-default.prepend-top-default.append-bottom-default{ class: [("disabled" unless can_create_project), ("forked" if forked_project)] }
|
|
||||||
= link_to fork_path,
|
|
||||||
method: "POST",
|
|
||||||
class: [("js-fork-thumbnail" unless forked_project), ("disabled has-tooltip" unless can_create_project)],
|
|
||||||
title: (_('You have reached your project limit') unless can_create_project) do
|
|
||||||
- if /no_((\w*)_)*avatar/.match(avatar)
|
|
||||||
= project_identicon(namespace, class: "avatar s100 identicon")
|
|
||||||
- else
|
|
||||||
.avatar-container.s100
|
|
||||||
= image_tag(avatar, class: "avatar s100")
|
|
||||||
%h5.prepend-top-default
|
|
||||||
= namespace.human_name
|
|
||||||
- else
|
- else
|
||||||
%strong
|
%strong
|
||||||
No available namespaces to fork the project.
|
No available namespaces to fork the project.
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Correctly link to a forked project from the new fork page.
|
||||||
|
merge_request: 15653
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -1,6 +1,8 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe 'Project fork' do
|
describe 'Project fork' do
|
||||||
|
include ProjectForksHelper
|
||||||
|
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:project) { create(:project, :public, :repository) }
|
let(:project) { create(:project, :public, :repository) }
|
||||||
|
|
||||||
|
@ -24,8 +26,9 @@ describe 'Project fork' do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'master in group' do
|
context 'master in group' do
|
||||||
|
let(:group) { create(:group) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
group = create(:group)
|
|
||||||
group.add_master(user)
|
group.add_master(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -53,5 +56,17 @@ describe 'Project fork' do
|
||||||
expect(page).to have_css('.fork-thumbnail', count: 2)
|
expect(page).to have_css('.fork-thumbnail', count: 2)
|
||||||
expect(page).to have_css('.fork-thumbnail.disabled')
|
expect(page).to have_css('.fork-thumbnail.disabled')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'links to the fork if the project was already forked within that namespace' do
|
||||||
|
forked_project = fork_project(project, user, namespace: group, repository: true)
|
||||||
|
|
||||||
|
visit new_project_fork_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_css('div.forked', text: group.full_name)
|
||||||
|
|
||||||
|
click_link group.full_name
|
||||||
|
|
||||||
|
expect(current_path).to eq(project_path(forked_project))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue