From bf85c82087adaf5e9bebdcd3c863e2e0a061c746 Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Sat, 31 Dec 2016 17:16:02 +0800
Subject: [PATCH] fix windows build broken by #416

---
 cmd/web.go          | 26 ++------------------------
 cmd/web_graceful.go | 44 ++++++++++++++++++++++++++++++++++++++++++++
 cmd/web_windows.go  | 19 +++++++++++++++++++
 3 files changed, 65 insertions(+), 24 deletions(-)
 create mode 100644 cmd/web_graceful.go
 create mode 100644 cmd/web_windows.go

diff --git a/cmd/web.go b/cmd/web.go
index ecaf74daaa..7ba7a7ded4 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -5,7 +5,6 @@
 package cmd
 
 import (
-	"crypto/tls"
 	"fmt"
 	"net"
 	"net/http"
@@ -31,7 +30,6 @@ import (
 	"code.gitea.io/gitea/routers/repo"
 	"code.gitea.io/gitea/routers/user"
 
-	"github.com/facebookgo/grace/gracehttp"
 	"github.com/go-macaron/binding"
 	"github.com/go-macaron/cache"
 	"github.com/go-macaron/captcha"
@@ -616,29 +614,9 @@ func runWeb(ctx *cli.Context) error {
 	var err error
 	switch setting.Protocol {
 	case setting.HTTP:
-		err = gracehttp.Serve(&http.Server{
-			Addr:    listenAddr,
-			Handler: m,
-		})
+		err = runHTTP(listenAddr, m)
 	case setting.HTTPS:
-		config := &tls.Config{
-			MinVersion: tls.VersionTLS10,
-		}
-		if config.NextProtos == nil {
-			config.NextProtos = []string{"http/1.1"}
-		}
-
-		config.Certificates = make([]tls.Certificate, 1)
-		config.Certificates[0], err = tls.LoadX509KeyPair(setting.CertFile, setting.KeyFile)
-		if err != nil {
-			log.Fatal(4, "Failed to load https cert file %s: %v", listenAddr, err)
-		}
-
-		err = gracehttp.Serve(&http.Server{
-			Addr:      listenAddr,
-			Handler:   m,
-			TLSConfig: config,
-		})
+		err = runHTTPS(listenAddr, setting.CertFile, setting.KeyFile, m)
 	case setting.FCGI:
 		err = fcgi.Serve(nil, m)
 	case setting.UnixSocket:
diff --git a/cmd/web_graceful.go b/cmd/web_graceful.go
new file mode 100644
index 0000000000..488cd4036a
--- /dev/null
+++ b/cmd/web_graceful.go
@@ -0,0 +1,44 @@
+// +build !windows
+
+// Copyright 2016 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package cmd
+
+import (
+	"crypto/tls"
+	"log"
+	"net/http"
+
+	"github.com/facebookgo/grace/gracehttp"
+)
+
+func runHTTP(listenAddr string, m http.Handler) error {
+	return gracehttp.Serve(&http.Server{
+		Addr:    listenAddr,
+		Handler: m,
+	})
+}
+
+func runHTTPS(listenAddr, certFile, keyFile string, m http.Handler) error {
+	config := &tls.Config{
+		MinVersion: tls.VersionTLS10,
+	}
+	if config.NextProtos == nil {
+		config.NextProtos = []string{"http/1.1"}
+	}
+
+	config.Certificates = make([]tls.Certificate, 1)
+	var err error
+	config.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile)
+	if err != nil {
+		log.Fatal(4, "Failed to load https cert file %s: %v", listenAddr, err)
+	}
+
+	return gracehttp.Serve(&http.Server{
+		Addr:      listenAddr,
+		Handler:   m,
+		TLSConfig: config,
+	})
+}
diff --git a/cmd/web_windows.go b/cmd/web_windows.go
new file mode 100644
index 0000000000..0fc6cbea0d
--- /dev/null
+++ b/cmd/web_windows.go
@@ -0,0 +1,19 @@
+// +build windows
+
+// Copyright 2016 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package cmd
+
+import (
+	"net/http"
+)
+
+func runHTTP(listenAddr string, m http.Handler) error {
+	return http.ListenAndServe(listenAddr, m)
+}
+
+func runHTTPS(listenAddr, certFile, keyFile string, m http.Handler) error {
+	return http.ListenAndServeTLS(listenAddr, certFile, keyFile, m)
+}