From fe8c9021266c579127cf52f6456eb0090e400e63 Mon Sep 17 00:00:00 2001 From: Timm Drevensek Date: Tue, 25 Feb 2014 22:42:45 +0100 Subject: [PATCH 1/3] Add support for relative submodules --- CHANGELOG | 1 + app/helpers/submodule_helper.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) mode change 100644 => 100755 app/helpers/submodule_helper.rb diff --git a/CHANGELOG b/CHANGELOG index 762ea557a82..601dcb9d2c0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ v 6.7.0 - Add edit file button to MergeRequest diff - Public groups (Jason Hollingsworth) - Cleaner headers in Notification Emails (Pierre de La Morinerie) + - Add support for relative submodules v 6.6.2 - Fix 500 error on branch/tag create or remove via UI diff --git a/app/helpers/submodule_helper.rb b/app/helpers/submodule_helper.rb old mode 100644 new mode 100755 index 56f6e4d9cc1..ca7b87b69ad --- a/app/helpers/submodule_helper.rb +++ b/app/helpers/submodule_helper.rb @@ -12,6 +12,8 @@ module SubmoduleHelper if self_url?(url, project) return project_path(project), project_tree_path(project, submodule_item.id) + elsif relative_self_url?(url) + relative_self_links(url, submodule_item.id) elsif github_dot_com_url?(url) standard_links('github.com', project, submodule_item.id) elsif gitlab_dot_com_url?(url) @@ -36,8 +38,23 @@ module SubmoduleHelper url == gitlab_shell.url_to_repo(project) end + def relative_self_url?(url) + # (./)? ( (../repo.git) | (../../project/repo.git) ) + url =~ /(^((\.\/)?(((\.\.)\/)|((\.\.)\/(\.\.)\/.*\/)))[^\.\/]*\.git)\Z/ + end + def standard_links(host, project, commit) base = [ 'https://', host, '/', project ].join('') return base, [ base, '/tree/', commit ].join('') end + + def relative_self_links(url, commit) + if url.scan(/(\.\.)/).size == 2 + base = [ Gitlab.config.gitlab.url, '/', url[/.*\/(.*)\/.*\.git/, 1] ].join('') + else + base = [ Gitlab.config.gitlab.url, '/', @project.group.path ].join('') + end + base = [ base, '/', url[/.*\/(.*)\.git/, 1] ].join('') + return base, [ base, '/tree/', commit ].join('') + end end From e935635620cbc4a3f2f18303f12891cc997f1cb1 Mon Sep 17 00:00:00 2001 From: Timm Drevensek Date: Wed, 26 Feb 2014 23:33:04 +0100 Subject: [PATCH 2/3] fixed regex to match url pointing to a user repo --- app/helpers/submodule_helper.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/submodule_helper.rb b/app/helpers/submodule_helper.rb index ca7b87b69ad..d7a253fac89 100755 --- a/app/helpers/submodule_helper.rb +++ b/app/helpers/submodule_helper.rb @@ -39,8 +39,8 @@ module SubmoduleHelper end def relative_self_url?(url) - # (./)? ( (../repo.git) | (../../project/repo.git) ) - url =~ /(^((\.\/)?(((\.\.)\/)|((\.\.)\/(\.\.)\/.*\/)))[^\.\/]*\.git)\Z/ + # (./)?(../repo.git) || (./)?(../../project/repo.git) ) + url =~ /^((\.\/)?(\.\.\/))(?!(\.\.)|(.*\/)).*\.git\Z/ || url =~ /^((\.\/)?(\.\.\/){2})(?!(\.\.))([^\/]*)\/(?!(\.\.)|(.*\/)).*\.git\Z/ end def standard_links(host, project, commit) @@ -49,7 +49,7 @@ module SubmoduleHelper end def relative_self_links(url, commit) - if url.scan(/(\.\.)/).size == 2 + if url.scan(/(\.\.\/)/).size == 2 base = [ Gitlab.config.gitlab.url, '/', url[/.*\/(.*)\/.*\.git/, 1] ].join('') else base = [ Gitlab.config.gitlab.url, '/', @project.group.path ].join('') From c0744e5ba07a16475b014b976664c729c59516b7 Mon Sep 17 00:00:00 2001 From: Timm Drevensek Date: Fri, 28 Feb 2014 17:22:07 +0100 Subject: [PATCH 3/3] simplify link url --- app/helpers/submodule_helper.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/helpers/submodule_helper.rb b/app/helpers/submodule_helper.rb index d7a253fac89..09e5c08e621 100755 --- a/app/helpers/submodule_helper.rb +++ b/app/helpers/submodule_helper.rb @@ -50,11 +50,10 @@ module SubmoduleHelper def relative_self_links(url, commit) if url.scan(/(\.\.\/)/).size == 2 - base = [ Gitlab.config.gitlab.url, '/', url[/.*\/(.*)\/.*\.git/, 1] ].join('') + base = url[/([^\/]*\/[^\/]*)\.git/, 1] else - base = [ Gitlab.config.gitlab.url, '/', @project.group.path ].join('') + base = [ @project.group.path, '/', url[/([^\/]*)\.git/, 1] ].join('') end - base = [ base, '/', url[/.*\/(.*)\.git/, 1] ].join('') - return base, [ base, '/tree/', commit ].join('') + return project_path(base), project_tree_path(base, commit) end end