From 1273b3d3a985e0aeb88c632e27d0e8dbc8dd2e19 Mon Sep 17 00:00:00 2001
From: Unknwon <joe2010xtmf@163.com>
Date: Sun, 21 Sep 2014 19:39:10 -0400
Subject: [PATCH] Support custom robots.txt

---
 cmd/web.go                 | 9 +++++++++
 modules/setting/setting.go | 3 +++
 2 files changed, 12 insertions(+)

diff --git a/cmd/web.go b/cmd/web.go
index 83dfca4e67..a5ebf259ea 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -364,6 +364,15 @@ func runWeb(*cli.Context) {
 		r.Any("/:reponame/*", ignSignInAndCsrf, repo.Http)
 	})
 
+	// robots.txt
+	m.Get("/robots.txt", func(ctx *middleware.Context) {
+		if setting.HasRobotsTxt {
+			ctx.ServeFile(path.Join(setting.CustomPath, "robots.txt"))
+		} else {
+			ctx.Error(404)
+		}
+	})
+
 	// Not found handler.
 	m.NotFound(routers.NotFound)
 
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index a1ab43d022..67e48108d9 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -108,6 +108,7 @@ var (
 	ProdMode     bool
 	RunUser      string
 	IsWindows    bool
+	HasRobotsTxt bool
 )
 
 func init() {
@@ -260,6 +261,8 @@ func NewConfigContext() {
 
 	Langs = Cfg.MustValueArray("i18n", "LANGS", ",")
 	Names = Cfg.MustValueArray("i18n", "NAMES", ",")
+
+	HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt"))
 }
 
 var Service struct {