summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects_controller.rb11
-rw-r--r--app/views/layouts/_head.html.haml7
-rw-r--r--app/views/projects/go_import.html.haml5
-rw-r--r--spec/controllers/projects_controller_spec.rb16
4 files changed, 32 insertions, 7 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 5486a97e51d..82b8a1cc13a 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -1,4 +1,5 @@
class ProjectsController < ApplicationController
+ prepend_before_filter :render_go_import, only: [:show]
skip_before_filter :authenticate_user!, only: [:show]
before_filter :project, except: [:new, :create]
before_filter :repository, except: [:new, :create]
@@ -184,4 +185,14 @@ class ProjectsController < ApplicationController
end
end
end
+
+ def render_go_import
+ return unless params["go-get"] == "1"
+
+ @namespace = params[:namespace_id]
+ @id = params[:project_id] || params[:id]
+ @id = @id.gsub(/\.git\Z/, "")
+
+ render "go_import", layout: false
+ end
end
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index bece8061fb9..d12145651af 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -1,12 +1,5 @@
%head
%meta{charset: "utf-8"}
-
- -# Go repository retrieval support
- -# Need to be the fist thing in the head
- -# Since Go is using an XML parser to process HTML5
- -# https://github.com/gitlabhq/gitlabhq/pull/5958#issuecomment-45397555
- - if controller_name == 'projects' && action_name == 'show'
- %meta{name: "go-import", content: "#{@project.web_url_without_protocol} git #{@project.web_url}.git"}
%meta{content: "GitLab Community Edition", name: "description"}
%title
diff --git a/app/views/projects/go_import.html.haml b/app/views/projects/go_import.html.haml
new file mode 100644
index 00000000000..87ac75a350f
--- /dev/null
+++ b/app/views/projects/go_import.html.haml
@@ -0,0 +1,5 @@
+!!! 5
+%html
+ %head
+ - web_url = [Gitlab.config.gitlab.url, @namespace, @id].join('/')
+ %meta{name: "go-import", content: "#{web_url.split('://')[1]} git #{web_url}.git"}
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index 89bb35de8fc..a1b82a32150 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -7,6 +7,22 @@ describe ProjectsController do
let(:jpg) { fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg') }
let(:txt) { fixture_file_upload(Rails.root + 'spec/fixtures/doc_sample.txt', 'text/plain') }
+ describe "GET show" do
+
+ context "when requested by `go get`" do
+ render_views
+
+ it "renders the go-import meta tag" do
+ get :show, "go-get" => "1", namespace_id: "bogus_namespace", id: "bogus_project"
+
+ expect(response.body).to include("name='go-import'")
+
+ content = "localhost/bogus_namespace/bogus_project git http://localhost/bogus_namespace/bogus_project.git"
+ expect(response.body).to include("content='#{content}'")
+ end
+ end
+ end
+
describe "POST #toggle_star" do
it "toggles star if user is signed in" do
sign_in(user)