summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Turner <novalis@novalis.org>2017-04-18 01:44:32 -0400
committerDavid Turner <novalis@novalis.org>2017-05-15 16:04:46 -0400
commit897a85a461b95ece12a1c5daaa86f55c27ddadcb (patch)
tree9f855cc73be0e1f171b18078c5a3eccab7140c5f
parentea5d43a3b8c01fb83d215a7eb15f246f26a34c64 (diff)
downloadgitlab-ce-897a85a461b95ece12a1c5daaa86f55c27ddadcb.tar.gz
submodule_links: Handle in-repository submodule urls
Sometimes it is useful to store submodules in the same repository which contains links to them. Make the UI support this. See https://github.com/twosigma/git-meta/wiki/The-Omega-Repo for information about this strategy Signed-off-by: David Turner <novalis@novalis.org>
-rw-r--r--app/helpers/submodule_helper.rb4
-rw-r--r--changelogs/unreleased/omega-submodules.yml4
-rw-r--r--spec/helpers/submodule_helper_spec.rb13
3 files changed, 21 insertions, 0 deletions
diff --git a/app/helpers/submodule_helper.rb b/app/helpers/submodule_helper.rb
index b739554a7a4..09b73eee8cf 100644
--- a/app/helpers/submodule_helper.rb
+++ b/app/helpers/submodule_helper.rb
@@ -7,6 +7,10 @@ module SubmoduleHelper
def submodule_links(submodule_item, ref = nil, repository = @repository)
url = repository.submodule_url_for(ref, submodule_item.path)
+ if url == '.' || url == './'
+ url = File.join(Gitlab.config.gitlab.url, @project.full_path)
+ end
+
if url =~ /([^\/:]+)\/([^\/]+(?:\.git)?)\Z/
namespace, project = $1, $2
project.sub!(/\.git\z/, '')
diff --git a/changelogs/unreleased/omega-submodules.yml b/changelogs/unreleased/omega-submodules.yml
new file mode 100644
index 00000000000..1488eb72174
--- /dev/null
+++ b/changelogs/unreleased/omega-submodules.yml
@@ -0,0 +1,4 @@
+---
+title: 'Repository browser: handle in-repository submodule urls'
+merge_request:
+author: David Turner
diff --git a/spec/helpers/submodule_helper_spec.rb b/spec/helpers/submodule_helper_spec.rb
index 9da33792659..18935be95c9 100644
--- a/spec/helpers/submodule_helper_spec.rb
+++ b/spec/helpers/submodule_helper_spec.rb
@@ -81,6 +81,19 @@ describe SubmoduleHelper do
end
end
+ context 'in-repository submodule' do
+ let(:group) { create(:group, name: "Master Project", path: "master-project") }
+ let(:project) { create(:empty_project, group: group) }
+ before do
+ self.instance_variable_set(:@project, project)
+ end
+
+ it 'in-repository' do
+ stub_url('./')
+ expect(submodule_links(submodule_item)).to eq(["/master-project/#{project.path}", "/master-project/#{project.path}/tree/hash"])
+ end
+ end
+
context 'submodule on gitlab.com' do
it 'detects ssh' do
stub_url('git@gitlab.com:gitlab-org/gitlab-ce.git')