From 8afd7d9ceb0d168300e3399c6e87a355a88c9a28 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Bj=C3=B8rn=20Erik=20Pedersen?=
 <bjorn.erik.pedersen@gmail.com>
Date: Fri, 24 Nov 2017 08:43:09 +0100
Subject: [PATCH] commands: Fix broken --appendPort=false

Also make sure to log the correct server URL to the console.

Fixes #4111
---
 commands/commandeer.go |  2 ++
 commands/server.go     | 22 +++++++++++-----------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/commands/commandeer.go b/commands/commandeer.go
index b0856661..f538ba61 100644
--- a/commands/commandeer.go
+++ b/commands/commandeer.go
@@ -25,6 +25,8 @@ type commandeer struct {
 	pathSpec    *helpers.PathSpec
 	visitedURLs *types.EvictingStringQueue
 
+	serverPorts []int
+
 	configured bool
 }
 
diff --git a/commands/server.go b/commands/server.go
index 666f255e..e1cc5674 100644
--- a/commands/server.go
+++ b/commands/server.go
@@ -145,6 +145,9 @@ func server(cmd *cobra.Command, args []string) error {
 	serverPorts := make([]int, 1)
 
 	if languages.IsMultihost() {
+		if !serverAppend {
+			return newSystemError("--appendPort=false not supported when in multihost mode")
+		}
 		serverPorts = make([]int, len(languages))
 	}
 
@@ -171,6 +174,8 @@ func server(cmd *cobra.Command, args []string) error {
 		currentServerPort = serverPorts[i] + 1
 	}
 
+	c.serverPorts = serverPorts
+
 	c.Set("port", serverPort)
 	if liveReloadPort != -1 {
 		c.Set("liveReloadPort", liveReloadPort)
@@ -246,16 +251,15 @@ func server(cmd *cobra.Command, args []string) error {
 }
 
 type fileServer struct {
-	ports    []int
 	baseURLs []string
 	roots    []string
 	c        *commandeer
 }
 
-func (f *fileServer) createEndpoint(i int) (*http.ServeMux, string, error) {
+func (f *fileServer) createEndpoint(i int) (*http.ServeMux, string, string, error) {
 	baseURL := f.baseURLs[i]
 	root := f.roots[i]
-	port := f.ports[i]
+	port := f.c.serverPorts[i]
 
 	publishDir := f.c.Cfg.GetString("publishDir")
 
@@ -286,7 +290,7 @@ func (f *fileServer) createEndpoint(i int) (*http.ServeMux, string, error) {
 	// We're only interested in the path
 	u, err := url.Parse(baseURL)
 	if err != nil {
-		return nil, "", fmt.Errorf("Invalid baseURL: %s", err)
+		return nil, "", "", fmt.Errorf("Invalid baseURL: %s", err)
 	}
 
 	decorate := func(h http.Handler) http.Handler {
@@ -317,7 +321,7 @@ func (f *fileServer) createEndpoint(i int) (*http.ServeMux, string, error) {
 
 	endpoint := net.JoinHostPort(serverInterface, strconv.Itoa(port))
 
-	return mu, endpoint, nil
+	return mu, u.String(), endpoint, nil
 }
 
 func (c *commandeer) serve() {
@@ -327,24 +331,20 @@ func (c *commandeer) serve() {
 	var (
 		baseURLs []string
 		roots    []string
-		ports    []int
 	)
 
 	if isMultiHost {
 		for _, s := range Hugo.Sites {
 			baseURLs = append(baseURLs, s.BaseURL.String())
 			roots = append(roots, s.Language.Lang)
-			ports = append(ports, s.Info.ServerPort())
 		}
 	} else {
 		s := Hugo.Sites[0]
 		baseURLs = []string{s.BaseURL.String()}
 		roots = []string{""}
-		ports = append(ports, s.Info.ServerPort())
 	}
 
 	srv := &fileServer{
-		ports:    ports,
 		baseURLs: baseURLs,
 		roots:    roots,
 		c:        c,
@@ -357,13 +357,13 @@ func (c *commandeer) serve() {
 	}
 
 	for i, _ := range baseURLs {
-		mu, endpoint, err := srv.createEndpoint(i)
+		mu, serverURL, endpoint, err := srv.createEndpoint(i)
 
 		if doLiveReload {
 			mu.HandleFunc("/livereload.js", livereload.ServeJS)
 			mu.HandleFunc("/livereload", livereload.Handler)
 		}
-		jww.FEEDBACK.Printf("Web Server is available at %s (bind address %s)\n", endpoint, serverInterface)
+		jww.FEEDBACK.Printf("Web Server is available at %s (bind address %s)\n", serverURL, serverInterface)
 		go func() {
 			err = http.ListenAndServe(endpoint, mu)
 			if err != nil {
-- 
2.30.2