|
|
@@ -16,6 +16,7 @@ import (
|
|
|
"time"
|
|
|
|
|
|
"github.com/Unknwon/com"
|
|
|
+ raven "github.com/getsentry/raven-go"
|
|
|
_ "github.com/go-macaron/cache/memcache"
|
|
|
_ "github.com/go-macaron/cache/redis"
|
|
|
"github.com/go-macaron/session"
|
|
|
@@ -339,6 +340,7 @@ func init() {
|
|
|
|
|
|
var err error
|
|
|
if AppPath, err = execPath(); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to get app path: %v\n", err)
|
|
|
}
|
|
|
|
|
|
@@ -386,6 +388,7 @@ func getOpenSSHVersion() string {
|
|
|
// Note: somehow version is printed to stderr
|
|
|
_, stderr, err := process.Exec("getOpenSSHVersion", "ssh", "-V")
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to get OpenSSH version: %v - %s", err, stderr)
|
|
|
}
|
|
|
|
|
|
@@ -400,6 +403,7 @@ func getOpenSSHVersion() string {
|
|
|
func NewContext() {
|
|
|
workDir, err := WorkDir()
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to get work directory: %v", err)
|
|
|
}
|
|
|
|
|
|
@@ -407,6 +411,7 @@ func NewContext() {
|
|
|
IgnoreInlineComment: true,
|
|
|
}, bindata.MustAsset("conf/app.ini"))
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to parse 'conf/app.ini': %v", err)
|
|
|
}
|
|
|
|
|
|
@@ -421,6 +426,7 @@ func NewContext() {
|
|
|
|
|
|
if com.IsFile(CustomConf) {
|
|
|
if err = Cfg.Append(CustomConf); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to load custom conf '%s': %v", CustomConf, err)
|
|
|
}
|
|
|
} else {
|
|
|
@@ -430,6 +436,7 @@ func NewContext() {
|
|
|
|
|
|
homeDir, err := com.HomeDir()
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to get home directory: %v", err)
|
|
|
}
|
|
|
homeDir = strings.Replace(homeDir, "\\", "/", -1)
|
|
|
@@ -446,6 +453,7 @@ func NewContext() {
|
|
|
// Check if has app suburl.
|
|
|
url, err := url.Parse(AppURL)
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Invalid ROOT_URL '%s': %s", AppURL, err)
|
|
|
}
|
|
|
// Suburl should start with '/' and end without '/', such as '/{subpath}'.
|
|
|
@@ -466,6 +474,7 @@ func NewContext() {
|
|
|
UnixSocketPermissionRaw := sec.Key("UNIX_SOCKET_PERMISSION").MustString("666")
|
|
|
UnixSocketPermissionParsed, err := strconv.ParseUint(UnixSocketPermissionRaw, 8, 32)
|
|
|
if err != nil || UnixSocketPermissionParsed > 0777 {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to parse unixSocketPermission: %s", UnixSocketPermissionRaw)
|
|
|
}
|
|
|
UnixSocketPermission = uint32(UnixSocketPermissionParsed)
|
|
|
@@ -492,6 +501,7 @@ func NewContext() {
|
|
|
SSH.ServerCiphers = sec.Key("SSH_SERVER_CIPHERS").Strings(",")
|
|
|
SSH.KeyTestPath = os.TempDir()
|
|
|
if err = Cfg.Section("server").MapTo(&SSH); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to map SSH settings: %v", err)
|
|
|
}
|
|
|
if SSH.Disabled {
|
|
|
@@ -501,8 +511,10 @@ func NewContext() {
|
|
|
|
|
|
if !SSH.Disabled && !SSH.StartBuiltinServer {
|
|
|
if err := os.MkdirAll(SSH.RootPath, 0700); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to create '%s': %v", SSH.RootPath, err)
|
|
|
} else if err = os.MkdirAll(SSH.KeyTestPath, 0644); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to create '%s': %v", SSH.KeyTestPath, err)
|
|
|
}
|
|
|
}
|
|
|
@@ -575,6 +587,7 @@ func NewContext() {
|
|
|
if InstallLock {
|
|
|
currentUser, match := IsRunUserMatchCurrentUser(RunUser)
|
|
|
if !match {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Expect user '%s' but current user is: %s", RunUser, currentUser)
|
|
|
}
|
|
|
}
|
|
|
@@ -592,10 +605,13 @@ func NewContext() {
|
|
|
}
|
|
|
ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash")
|
|
|
if err = Cfg.Section("repository").MapTo(&Repository); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to map Repository settings: %v", err)
|
|
|
} else if err = Cfg.Section("repository.editor").MapTo(&Repository.Editor); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to map Repository.Editor settings: %v", err)
|
|
|
} else if err = Cfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to map Repository.Upload settings: %v", err)
|
|
|
}
|
|
|
|
|
|
@@ -649,28 +665,40 @@ func NewContext() {
|
|
|
}
|
|
|
|
|
|
if err = Cfg.Section("http").MapTo(&HTTP); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map HTTP settings: %v", err)
|
|
|
} else if err = Cfg.Section("webhook").MapTo(&Webhook); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Webhook settings: %v", err)
|
|
|
} else if err = Cfg.Section("release.attachment").MapTo(&Release.Attachment); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Release.Attachment settings: %v", err)
|
|
|
} else if err = Cfg.Section("markdown").MapTo(&Markdown); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Markdown settings: %v", err)
|
|
|
} else if err = Cfg.Section("smartypants").MapTo(&Smartypants); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Smartypants settings: %v", err)
|
|
|
} else if err = Cfg.Section("admin").MapTo(&Admin); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Admin settings: %v", err)
|
|
|
} else if err = Cfg.Section("cron").MapTo(&Cron); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Cron settings: %v", err)
|
|
|
} else if err = Cfg.Section("git").MapTo(&Git); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Git settings: %v", err)
|
|
|
} else if err = Cfg.Section("mirror").MapTo(&Mirror); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Mirror settings: %v", err)
|
|
|
} else if err = Cfg.Section("api").MapTo(&API); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map API settings: %v", err)
|
|
|
} else if err = Cfg.Section("ui").MapTo(&UI); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map UI settings: %v", err)
|
|
|
} else if err = Cfg.Section("prometheus").MapTo(&Prometheus); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Failed to map Prometheus settings: %v", err)
|
|
|
}
|
|
|
|
|
|
@@ -734,6 +762,7 @@ func newLogService() {
|
|
|
mode = strings.ToLower(strings.TrimSpace(mode))
|
|
|
sec, err := Cfg.GetSection("log." + mode)
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Unknown logger mode: %s", mode)
|
|
|
}
|
|
|
|
|
|
@@ -759,6 +788,7 @@ func newLogService() {
|
|
|
case log.FILE:
|
|
|
logPath := path.Join(LogRootPath, "gitote.log")
|
|
|
if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Fail to create log directory '%s': %v", path.Dir(logPath), err)
|
|
|
}
|
|
|
|
|
|
@@ -877,6 +907,7 @@ func newMailService() {
|
|
|
if len(MailService.From) > 0 {
|
|
|
parsed, err := mail.ParseAddress(MailService.From)
|
|
|
if err != nil {
|
|
|
+ raven.CaptureErrorAndWait(err, nil)
|
|
|
log.Fatal(2, "Invalid mailer.FROM (%s): %v", MailService.From, err)
|
|
|
}
|
|
|
MailService.FromEmail = parsed.Address
|