diff --git a/CHANGELOG.md b/CHANGELOG.md index 73964ba0f..c5d77b8ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All notable changes to Gogs are documented in this file. - _Regression:_ Submodule with a relative path is linked correctly. [#6319](https://github.com/gogs/gogs/issues/6319) - Backup can be processed when `--target` is specified on Windows. [#6339](https://github.com/gogs/gogs/issues/6339) - Commit message contains keywords look like an issue reference no longer fails the push entirely. [#6289](https://github.com/gogs/gogs/issues/6289) +- _Regression:_ When running Gogs on Windows, push commits no longer fail on a daily basis with the error "pre-receive hook declined". [#6316](https://github.com/gogs/gogs/issues/6316) ### Removed diff --git a/go.sum b/go.sum index c0b5eed98..d93015d0c 100644 --- a/go.sum +++ b/go.sum @@ -354,7 +354,6 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f h1:gWF768j/LaZugp8dyS4UwsslY golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -401,7 +400,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/ini.v1 v1.46.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.55.0 h1:E8yzL5unfpW3M6fz/eB7Cb5MQAYSZ7GKo4Qth+N2sgQ= gopkg.in/ini.v1 v1.55.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -409,10 +407,6 @@ gopkg.in/ldap.v2 v2.5.1 h1:wiu0okdNfjlBzg6UWvd1Hn8Y+Ux17/u/4nlk4CQr6tU= gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= gopkg.in/macaron.v1 v1.3.4/go.mod h1:/RoHTdC8ALpyJ3+QR36mKjwnT1F1dyYtsGM9Ate6ZFI= gopkg.in/macaron.v1 v1.3.5/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4= -gopkg.in/macaron.v1 v1.3.6 h1:mHw5qRGj2f86sCjBV/S5OOPvPbiZpu0OEs1F5l66fYI= -gopkg.in/macaron.v1 v1.3.6/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4= -gopkg.in/macaron.v1 v1.3.8 h1:45bQT4dDF+5SLd75qlj+dulQsuFQ9aFyLlvZX6YUJWE= -gopkg.in/macaron.v1 v1.3.8/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4= gopkg.in/macaron.v1 v1.3.9 h1:Dw+DDRYdXgQyEsPlfAfKz+UA5qVUrH3KPD7JhmZ9MFc= gopkg.in/macaron.v1 v1.3.9/go.mod h1:uMZCFccv9yr5TipIalVOyAyZQuOH3OkmXvgcWwhJuP4= gopkg.in/redis.v2 v2.3.2 h1:GPVIIB/JnL1wvfULefy3qXmPu1nfNu2d0yA09FHgwfs= @@ -422,7 +416,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/cmd/hook.go b/internal/cmd/hook.go index 9b4e2278e..99a5e15ba 100644 --- a/internal/cmd/hook.go +++ b/internal/cmd/hook.go @@ -66,7 +66,7 @@ func runHookPreReceive(c *cli.Context) error { if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 { return nil } - setup(c, "hooks/pre-receive.log", true) + setup(c, "pre-receive.log", true) isWiki := strings.Contains(os.Getenv(db.ENV_REPO_CUSTOM_HOOKS_PATH), ".wiki.git/") @@ -159,7 +159,7 @@ func runHookUpdate(c *cli.Context) error { if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 { return nil } - setup(c, "hooks/update.log", false) + setup(c, "update.log", false) args := c.Args() if len(args) != 3 { @@ -193,7 +193,7 @@ func runHookPostReceive(c *cli.Context) error { if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 { return nil } - setup(c, "hooks/post-receive.log", true) + setup(c, "post-receive.log", true) // Post-receive hook does more than just gather Git information, // so we need to setup additional services for email notifications. diff --git a/internal/cmd/serv.go b/internal/cmd/serv.go index 4c9bb4ca5..06d78a6db 100644 --- a/internal/cmd/serv.go +++ b/internal/cmd/serv.go @@ -38,7 +38,7 @@ var Serv = cli.Command{ // logs error message on the server side. When not in "prod" mode, // error message is also printed to the client for easier debugging. func fail(userMessage, errMessage string, args ...interface{}) { - fmt.Fprintln(os.Stderr, "Gogs:", userMessage) + _, _ = fmt.Fprintln(os.Stderr, "Gogs:", userMessage) if len(errMessage) > 0 { if !conf.IsProdMode() { @@ -47,10 +47,11 @@ func fail(userMessage, errMessage string, args ...interface{}) { log.Error(errMessage, args...) } + log.Stop() os.Exit(1) } -func setup(c *cli.Context, logPath string, connectDB bool) { +func setup(c *cli.Context, logFile string, connectDB bool) { conf.HookMode = true var customConf string @@ -73,7 +74,7 @@ func setup(c *cli.Context, logPath string, connectDB bool) { err = log.NewFile(log.FileConfig{ Level: level, - Filename: filepath.Join(conf.Log.RootPath, logPath), + Filename: filepath.Join(conf.Log.RootPath, "hooks", logFile), FileRotationConfig: log.FileRotationConfig{ Rotate: true, Daily: true, diff --git a/internal/db/db.go b/internal/db/db.go index a6e536830..0e818bff1 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -128,7 +128,7 @@ var tables = []interface{}{ new(LFSObject), new(LoginSource), } -func Init() (*gorm.DB, error) { +func Init(w io.Writer) (*gorm.DB, error) { db, err := openDB(conf.Database) if err != nil { return nil, errors.Wrap(err, "open database") @@ -138,10 +138,6 @@ func Init() (*gorm.DB, error) { db.DB().SetMaxIdleConns(conf.Database.MaxIdleConns) db.DB().SetConnMaxLifetime(time.Minute) - w, err := getLogWriter() - if err != nil { - return nil, errors.Wrap(err, "get log writer") - } db.SetLogger(&dbutil.Writer{Writer: w}) if !conf.IsProdMode() { db = db.LogMode(true) diff --git a/internal/db/models.go b/internal/db/models.go index d2868bb65..ed7fe7bcc 100644 --- a/internal/db/models.go +++ b/internal/db/models.go @@ -7,13 +7,16 @@ package db import ( "database/sql" "fmt" + "io" "net/url" "os" "path" + "path/filepath" "strings" "time" "github.com/jinzhu/gorm" + "github.com/pkg/errors" log "unknwon.dev/clog/v2" "xorm.io/core" "xorm.io/xorm" @@ -130,16 +133,21 @@ func SetEngine() (*gorm.DB, error) { x.SetMapper(core.GonicMapper{}) - // WARNING: for serv command, MUST remove the output to os.stdout, - // so use log file to instead print to stdout. + var logPath string + if conf.HookMode { + logPath = filepath.Join(conf.Log.RootPath, "hooks", "xorm.log") + } else { + logPath = filepath.Join(conf.Log.RootPath, "xorm.log") + } sec := conf.File.Section("log.xorm") - logger, err := log.NewFileWriter(path.Join(conf.Log.RootPath, "xorm.log"), + fileWriter, err := log.NewFileWriter(logPath, log.FileRotationConfig{ Rotate: sec.Key("ROTATE").MustBool(true), Daily: sec.Key("ROTATE_DAILY").MustBool(true), MaxSize: sec.Key("MAX_SIZE").MustInt64(100) * 1024 * 1024, MaxDays: sec.Key("MAX_DAYS").MustInt64(3), - }) + }, + ) if err != nil { return nil, fmt.Errorf("create 'xorm.log': %v", err) } @@ -149,12 +157,22 @@ func SetEngine() (*gorm.DB, error) { x.SetConnMaxLifetime(time.Second) if conf.IsProdMode() { - x.SetLogger(xorm.NewSimpleLogger3(logger, xorm.DEFAULT_LOG_PREFIX, xorm.DEFAULT_LOG_FLAG, core.LOG_WARNING)) + x.SetLogger(xorm.NewSimpleLogger3(fileWriter, xorm.DEFAULT_LOG_PREFIX, xorm.DEFAULT_LOG_FLAG, core.LOG_WARNING)) } else { - x.SetLogger(xorm.NewSimpleLogger(logger)) + x.SetLogger(xorm.NewSimpleLogger(fileWriter)) } x.ShowSQL(true) - return Init() + + var w io.Writer + if conf.HookMode { + w = fileWriter + } else { + w, err = getLogWriter() + if err != nil { + return nil, errors.Wrap(err, "get log writer") + } + } + return Init(w) } func NewEngine() (err error) {