Merge branch '49061-submodule-helper-fix' into 'master'
Resolve "NoMethodError: undefined method `namespace' for nil:NilClass" Closes #49061 See merge request gitlab-org/gitlab-ce!20615
This commit is contained in:
commit
907dccddeb
2 changed files with 12 additions and 17 deletions
|
@ -8,7 +8,7 @@ module SubmoduleHelper
|
||||||
url = repository.submodule_url_for(ref, submodule_item.path)
|
url = repository.submodule_url_for(ref, submodule_item.path)
|
||||||
|
|
||||||
if url == '.' || url == './'
|
if url == '.' || url == './'
|
||||||
url = File.join(Gitlab.config.gitlab.url, @project.full_path)
|
url = File.join(Gitlab.config.gitlab.url, repository.project.full_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
if url =~ %r{([^/:]+)/([^/]+(?:\.git)?)\Z}
|
if url =~ %r{([^/:]+)/([^/]+(?:\.git)?)\Z}
|
||||||
|
@ -31,7 +31,7 @@ module SubmoduleHelper
|
||||||
[namespace_project_path(namespace, project),
|
[namespace_project_path(namespace, project),
|
||||||
namespace_project_tree_path(namespace, project, submodule_item.id)]
|
namespace_project_tree_path(namespace, project, submodule_item.id)]
|
||||||
elsif relative_self_url?(url)
|
elsif relative_self_url?(url)
|
||||||
relative_self_links(url, submodule_item.id)
|
relative_self_links(url, submodule_item.id, repository.project)
|
||||||
elsif github_dot_com_url?(url)
|
elsif github_dot_com_url?(url)
|
||||||
standard_links('github.com', namespace, project, submodule_item.id)
|
standard_links('github.com', namespace, project, submodule_item.id)
|
||||||
elsif gitlab_dot_com_url?(url)
|
elsif gitlab_dot_com_url?(url)
|
||||||
|
@ -73,7 +73,7 @@ module SubmoduleHelper
|
||||||
[base, [base, '/tree/', commit].join('')]
|
[base, [base, '/tree/', commit].join('')]
|
||||||
end
|
end
|
||||||
|
|
||||||
def relative_self_links(url, commit)
|
def relative_self_links(url, commit, project)
|
||||||
url.rstrip!
|
url.rstrip!
|
||||||
# Map relative links to a namespace and project
|
# Map relative links to a namespace and project
|
||||||
# For example:
|
# For example:
|
||||||
|
@ -85,7 +85,7 @@ module SubmoduleHelper
|
||||||
namespace = components.pop.gsub(/^\.\.$/, '')
|
namespace = components.pop.gsub(/^\.\.$/, '')
|
||||||
|
|
||||||
if namespace.empty?
|
if namespace.empty?
|
||||||
namespace = @project.namespace.full_path
|
namespace = project.namespace.full_path
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -92,11 +92,10 @@ describe SubmoduleHelper do
|
||||||
context 'in-repository submodule' do
|
context 'in-repository submodule' do
|
||||||
let(:group) { create(:group, name: "Master Project", path: "master-project") }
|
let(:group) { create(:group, name: "Master Project", path: "master-project") }
|
||||||
let(:project) { create(:project, group: group) }
|
let(:project) { create(:project, group: group) }
|
||||||
before do
|
|
||||||
self.instance_variable_set(:@project, project)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'in-repository' do
|
it 'in-repository' do
|
||||||
|
allow(repo).to receive(:project).and_return(project)
|
||||||
|
|
||||||
stub_url('./')
|
stub_url('./')
|
||||||
expect(submodule_links(submodule_item)).to eq(["/master-project/#{project.path}", "/master-project/#{project.path}/tree/hash"])
|
expect(submodule_links(submodule_item)).to eq(["/master-project/#{project.path}", "/master-project/#{project.path}/tree/hash"])
|
||||||
end
|
end
|
||||||
|
@ -167,32 +166,28 @@ describe SubmoduleHelper do
|
||||||
let(:project) { create(:project, group: group) }
|
let(:project) { create(:project, group: group) }
|
||||||
let(:commit_id) { sample_commit[:id] }
|
let(:commit_id) { sample_commit[:id] }
|
||||||
|
|
||||||
before do
|
|
||||||
self.instance_variable_set(:@project, project)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'one level down' do
|
it 'one level down' do
|
||||||
result = relative_self_links('../test.git', commit_id)
|
result = relative_self_links('../test.git', commit_id, project)
|
||||||
expect(result).to eq(["/#{group.path}/test", "/#{group.path}/test/tree/#{commit_id}"])
|
expect(result).to eq(["/#{group.path}/test", "/#{group.path}/test/tree/#{commit_id}"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with trailing whitespace' do
|
it 'with trailing whitespace' do
|
||||||
result = relative_self_links('../test.git ', commit_id)
|
result = relative_self_links('../test.git ', commit_id, project)
|
||||||
expect(result).to eq(["/#{group.path}/test", "/#{group.path}/test/tree/#{commit_id}"])
|
expect(result).to eq(["/#{group.path}/test", "/#{group.path}/test/tree/#{commit_id}"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'two levels down' do
|
it 'two levels down' do
|
||||||
result = relative_self_links('../../test.git', commit_id)
|
result = relative_self_links('../../test.git', commit_id, project)
|
||||||
expect(result).to eq(["/#{group.path}/test", "/#{group.path}/test/tree/#{commit_id}"])
|
expect(result).to eq(["/#{group.path}/test", "/#{group.path}/test/tree/#{commit_id}"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'one level down with namespace and repo' do
|
it 'one level down with namespace and repo' do
|
||||||
result = relative_self_links('../foobar/test.git', commit_id)
|
result = relative_self_links('../foobar/test.git', commit_id, project)
|
||||||
expect(result).to eq(["/foobar/test", "/foobar/test/tree/#{commit_id}"])
|
expect(result).to eq(["/foobar/test", "/foobar/test/tree/#{commit_id}"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'two levels down with namespace and repo' do
|
it 'two levels down with namespace and repo' do
|
||||||
result = relative_self_links('../foobar/baz/test.git', commit_id)
|
result = relative_self_links('../foobar/baz/test.git', commit_id, project)
|
||||||
expect(result).to eq(["/baz/test", "/baz/test/tree/#{commit_id}"])
|
expect(result).to eq(["/baz/test", "/baz/test/tree/#{commit_id}"])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -201,7 +196,7 @@ describe SubmoduleHelper do
|
||||||
let(:project) { create(:project, namespace: user.namespace) }
|
let(:project) { create(:project, namespace: user.namespace) }
|
||||||
|
|
||||||
it 'one level down with personal project' do
|
it 'one level down with personal project' do
|
||||||
result = relative_self_links('../test.git', commit_id)
|
result = relative_self_links('../test.git', commit_id, project)
|
||||||
expect(result).to eq(["/#{user.username}/test", "/#{user.username}/test/tree/#{commit_id}"])
|
expect(result).to eq(["/#{user.username}/test", "/#{user.username}/test/tree/#{commit_id}"])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue