cmd/web: fix error when Unix socket not exists

pull/5940/head
ᴜɴᴋɴᴡᴏɴ 2020-02-24 21:13:56 +08:00
parent 63e56facbf
commit 0c064b1b79
No known key found for this signature in database
GPG Key ID: B43718D76E30A238
3 changed files with 37 additions and 4 deletions

View File

@ -35,6 +35,7 @@ import (
"gogs.io/gogs/internal/context"
"gogs.io/gogs/internal/db"
"gogs.io/gogs/internal/form"
"gogs.io/gogs/internal/osutil"
"gogs.io/gogs/internal/route"
"gogs.io/gogs/internal/route/admin"
apiv1 "gogs.io/gogs/internal/route/api/v1"
@ -690,10 +691,11 @@ func runWeb(c *cli.Context) error {
var listenAddr string
if conf.Server.Protocol == "unix" {
listenAddr = conf.Server.HTTPAddr
log.Info("Listen on %v://%s", conf.Server.Protocol, listenAddr)
} else {
listenAddr = fmt.Sprintf("%s:%s", conf.Server.HTTPAddr, conf.Server.HTTPPort)
log.Info("Listen on %v://%s%s", conf.Server.Protocol, listenAddr, conf.Server.Subpath)
}
log.Info("Listen on %v://%s%s", conf.Server.Protocol, listenAddr, conf.Server.Subpath)
switch conf.Server.Protocol {
case "http":
@ -732,9 +734,11 @@ func runWeb(c *cli.Context) error {
err = fcgi.Serve(nil, m)
case "unix":
err = os.Remove(listenAddr)
if err != nil {
log.Fatal("Failed to remove existing Unix domain socket: %v", err)
if osutil.IsExist(listenAddr) {
err = os.Remove(listenAddr)
if err != nil {
log.Fatal("Failed to remove existing Unix domain socket: %v", err)
}
}
var listener *net.UnixListener

View File

@ -17,6 +17,12 @@ func IsFile(path string) bool {
return !f.IsDir()
}
// IsExist returns true if a file or directory exists.
func IsExist(path string) bool {
_, err := os.Stat(path)
return err == nil || os.IsExist(err)
}
// CurrentUsername returns the current system user via environment variables.
func CurrentUsername() string {
curUserName := os.Getenv("USER")

View File

@ -32,3 +32,26 @@ func TestIsFile(t *testing.T) {
})
}
}
func TestIsExist(t *testing.T) {
tests := []struct {
path string
expVal bool
}{
{
path: "osutil.go",
expVal: true,
}, {
path: "../osutil",
expVal: true,
}, {
path: "not_found",
expVal: false,
},
}
for _, test := range tests {
t.Run("", func(t *testing.T) {
assert.Equal(t, test.expVal, IsExist(test.path))
})
}
}