MM-6839: searching for paths relative to executable (#8915)

* MM-6839: search relative to executable (#8853)

* MM-6839: searching for paths relative to executable

In addition to searching relative to the current working directory, also
search relative to the location of the binary. This helps locate config
and i18n files when invoking an absolute path to the mattermost binary.

* MM-6839: find mattermost/ binary using utils.FindFile

* add unit tests for utils.FindFile to exclude directories

* fix filtering out directories in FindFile

* fix platform invoking ./bin/mattermost
Этот коммит содержится в:
Jesse Hallam
2018-06-06 10:18:24 -04:00
коммит произвёл Christopher Speller
родитель 7df3498947
Коммит 0ba0af889e
3 изменённых файлов: 366 добавлений и 45 удалений

Просмотреть файл

@@ -6,19 +6,10 @@ package main
import (
"fmt"
"os"
"path/filepath"
"syscall"
)
func findMattermostBinary() string {
for _, file := range []string{"./mattermost", "../mattermost", "./bin/mattermost"} {
path, _ := filepath.Abs(file)
if stat, err := os.Stat(path); err == nil && !stat.IsDir() {
return path
}
}
return "./mattermost"
}
"github.com/mattermost/mattermost-server/utils"
)
func main() {
// Print angry message to use mattermost command directly
@@ -33,7 +24,15 @@ The platform binary will be removed in a future version.
args := os.Args
args[0] = "mattermost"
args = append(args, "--platform")
if err := syscall.Exec(findMattermostBinary(), args, nil); err != nil {
fmt.Println("Could not start Mattermost, use the mattermost command directly.")
realMattermost := utils.FindFile("mattermost")
if realMattermost == "" {
realMattermost = utils.FindFile("bin/mattermost")
}
if realMattermost == "" {
fmt.Println("Could not start Mattermost, use the mattermost command directly: failed to find mattermost")
} else if err := syscall.Exec(realMattermost, args, nil); err != nil {
fmt.Printf("Could not start Mattermost, use the mattermost command directly: %s\n", err.Error())
}
}