From dbfc5aa0165ca550cb24dc6113a124d8e730aa3c Mon Sep 17 00:00:00 2001 From: Khaled Yakdan Date: Sun, 8 Jan 2023 23:30:14 -0800 Subject: [PATCH 1/5] Move fuzz tests into tests/fuzz (#22376) This puts the fuzz tests in the same directory as other tests and eases the integration in OSS-Fuzz Co-authored-by: techknowlogick --- {tools => tests/fuzz}/fuzz_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {tools => tests/fuzz}/fuzz_test.go (98%) diff --git a/tools/fuzz_test.go b/tests/fuzz/fuzz_test.go similarity index 98% rename from tools/fuzz_test.go rename to tests/fuzz/fuzz_test.go index 106ed19a42..6a7d9d2d32 100644 --- a/tools/fuzz_test.go +++ b/tests/fuzz/fuzz_test.go @@ -1,7 +1,7 @@ // Copyright 2023 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT -package main +package fuzz import ( "bytes" From 82235fb6817a310b165275d304c84f049011e296 Mon Sep 17 00:00:00 2001 From: ahab <42076024+segler89@users.noreply.github.com> Date: Mon, 9 Jan 2023 12:25:13 +0100 Subject: [PATCH 2/5] Update index.de-de.md (#22363) Some minor changes related to the language. Co-authored-by: KN4CK3R Co-authored-by: delvh Co-authored-by: Lunny Xiao --- docs/content/page/index.de-de.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/content/page/index.de-de.md b/docs/content/page/index.de-de.md index 8f8f264ed1..3b344db144 100644 --- a/docs/content/page/index.de-de.md +++ b/docs/content/page/index.de-de.md @@ -1,5 +1,5 @@ --- -date: "2016-11-08T16:00:00+02:00" +date: "2023-01-07T22:03:00+01:00" title: "Dokumentation" slug: "documentation" url: "/de-de/" @@ -27,11 +27,11 @@ Gitea ist ein [Gogs](http://gogs.io)-Fork. * 2 CPU Kerne und 1GB RAM sind für kleine Teams/Projekte ausreichend. * Gitea sollte unter einem seperaten nicht-root Account auf UNIX-Systemen ausgeführt werden. * Achtung: Gitea verwaltet die `~/.ssh/authorized_keys` Datei. Gitea unter einem normalen Benutzer auszuführen könnte dazu führen, dass dieser sich nicht mehr anmelden kann. -* [Git](https://git-scm.com/) Version 2.0 oder später wird benötigt. - * Wenn git >= 2.1.2. und [Git large file storage](https://git-lfs.github.com/) aktiviert ist, dann wird es auch in Gitea verwendbar sein. - * Wenn git >= 2.18, dann wird das Rendern von Commit-Graphen automatisch aktiviert. +* [Git](https://git-scm.com/) Version 2.0 oder aktueller wird benötigt. + * Wenn Git >= 2.1.2 und [Git LFS](https://git-lfs.github.com/) vorhanden ist, dann wird Git LFS Support automatisch für Gitea aktiviert. + * Wenn Git >= 2.18, dann wird das Rendern von Commit-Graphen automatisch aktiviert. ## Browser Unterstützung -* Letzten 2 Versions von Chrome, Firefox, Safari und Edge +* Die neuesten zwei Versionen von Chrome, Firefox, Safari und Edge * Firefox ESR From 99a675f4a1fc32339e9b93ea33207322c3e8bef1 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 10 Jan 2023 00:09:46 +0800 Subject: [PATCH 3/5] Don't lookup mail server when using sendmail (#22300) Fix #22287 --- modules/setting/mailer.go | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/modules/setting/mailer.go b/modules/setting/mailer.go index 7324328ee3..e7cc812eef 100644 --- a/modules/setting/mailer.go +++ b/modules/setting/mailer.go @@ -178,14 +178,25 @@ func newMailService() { // we want to warn if users use SMTP on a non-local IP; // we might as well take the opportunity to check that it has an IP at all - ips := tryResolveAddr(MailService.SMTPAddr) - if MailService.Protocol == "smtp" { - for _, ip := range ips { - if !ip.IsLoopback() { - log.Warn("connecting over insecure SMTP protocol to non-local address is not recommended") - break + // This check is not needed for sendmail + switch MailService.Protocol { + case "sendmail": + var err error + MailService.SendmailArgs, err = shellquote.Split(sec.Key("SENDMAIL_ARGS").String()) + if err != nil { + log.Error("Failed to parse Sendmail args: '%s' with error %v", sec.Key("SENDMAIL_ARGS").String(), err) + } + case "smtp", "smtps", "smtp+starttls", "smtp+unix": + ips := tryResolveAddr(MailService.SMTPAddr) + if MailService.Protocol == "smtp" { + for _, ip := range ips { + if !ip.IsLoopback() { + log.Warn("connecting over insecure SMTP protocol to non-local address is not recommended") + break + } } } + case "dummy": // just mention and do nothing } if MailService.From != "" { @@ -214,14 +225,6 @@ func newMailService() { MailService.EnvelopeFrom = parsed.Address } - if MailService.Protocol == "sendmail" { - var err error - MailService.SendmailArgs, err = shellquote.Split(sec.Key("SENDMAIL_ARGS").String()) - if err != nil { - log.Error("Failed to parse Sendmail args: %s with error %v", CustomConf, err) - } - } - log.Info("Mail Service Enabled") } From a35714372d9e6be2cf92ce27ef8b05b37f8cb283 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Tue, 10 Jan 2023 01:19:19 +0800 Subject: [PATCH 4/5] Fix halfCommitter and WithTx (#22366) Related to #22362. I overlooked that there's always `committer.Close()`, like: ```go ctx, committer, err := db.TxContext(db.DefaultContext) if err != nil { return nil } defer committer.Close() // ... if err != nil { return nil } // ... return committer.Commit() ``` So the `Close` of `halfCommitter` should ignore `commit and close`, it's not a rollback. See: [Why `halfCommitter` and `WithTx` should rollback IMMEDIATELY or commit LATER](https://github.com/go-gitea/gitea/pull/22366#issuecomment-1374778612). Co-authored-by: techknowlogick --- models/db/context.go | 27 ++++++-- models/db/context_committer_test.go | 102 ++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 models/db/context_committer_test.go diff --git a/models/db/context.go b/models/db/context.go index 455f3d1c5d..911dbd1c6f 100644 --- a/models/db/context.go +++ b/models/db/context.go @@ -98,19 +98,31 @@ type Committer interface { // halfCommitter is a wrapper of Committer. // It can be closed early, but can't be committed early, it is useful for reusing a transaction. type halfCommitter struct { - Committer + committer Committer + committed bool } -func (*halfCommitter) Commit() error { - // do nothing +func (c *halfCommitter) Commit() error { + c.committed = true + // should do nothing, and the parent committer will commit later return nil } +func (c *halfCommitter) Close() error { + if c.committed { + // it's "commit and close", should do nothing, and the parent committer will commit later + return nil + } + + // it's "rollback and close", let the parent committer rollback right now + return c.committer.Close() +} + // TxContext represents a transaction Context, // it will reuse the existing transaction in the parent context or create a new one. func TxContext(parentCtx context.Context) (*Context, Committer, error) { if sess, ok := inTransaction(parentCtx); ok { - return newContext(parentCtx, sess, true), &halfCommitter{Committer: sess}, nil + return newContext(parentCtx, sess, true), &halfCommitter{committer: sess}, nil } sess := x.NewSession() @@ -126,7 +138,12 @@ func TxContext(parentCtx context.Context) (*Context, Committer, error) { // this function will reuse it otherwise will create a new one and close it when finished. func WithTx(parentCtx context.Context, f func(ctx context.Context) error) error { if sess, ok := inTransaction(parentCtx); ok { - return f(newContext(parentCtx, sess, true)) + err := f(newContext(parentCtx, sess, true)) + if err != nil { + // rollback immediately, in case the caller ignores returned error and tries to commit the transaction. + _ = sess.Close() + } + return err } return txWithNoCheck(parentCtx, f) } diff --git a/models/db/context_committer_test.go b/models/db/context_committer_test.go new file mode 100644 index 0000000000..38e91f22ed --- /dev/null +++ b/models/db/context_committer_test.go @@ -0,0 +1,102 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package db // it's not db_test, because this file is for testing the private type halfCommitter + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +type MockCommitter struct { + wants []string + gots []string +} + +func NewMockCommitter(wants ...string) *MockCommitter { + return &MockCommitter{ + wants: wants, + } +} + +func (c *MockCommitter) Commit() error { + c.gots = append(c.gots, "commit") + return nil +} + +func (c *MockCommitter) Close() error { + c.gots = append(c.gots, "close") + return nil +} + +func (c *MockCommitter) Assert(t *testing.T) { + assert.Equal(t, c.wants, c.gots, "want operations %v, but got %v", c.wants, c.gots) +} + +func Test_halfCommitter(t *testing.T) { + /* + Do something like: + + ctx, committer, err := db.TxContext(db.DefaultContext) + if err != nil { + return nil + } + defer committer.Close() + + // ... + + if err != nil { + return nil + } + + // ... + + return committer.Commit() + */ + + testWithCommitter := func(committer Committer, f func(committer Committer) error) { + if err := f(&halfCommitter{committer: committer}); err == nil { + committer.Commit() + } + committer.Close() + } + + t.Run("commit and close", func(t *testing.T) { + mockCommitter := NewMockCommitter("commit", "close") + + testWithCommitter(mockCommitter, func(committer Committer) error { + defer committer.Close() + return committer.Commit() + }) + + mockCommitter.Assert(t) + }) + + t.Run("rollback and close", func(t *testing.T) { + mockCommitter := NewMockCommitter("close", "close") + + testWithCommitter(mockCommitter, func(committer Committer) error { + defer committer.Close() + if true { + return fmt.Errorf("error") + } + return committer.Commit() + }) + + mockCommitter.Assert(t) + }) + + t.Run("close and commit", func(t *testing.T) { + mockCommitter := NewMockCommitter("close", "close") + + testWithCommitter(mockCommitter, func(committer Committer) error { + committer.Close() + committer.Commit() + return fmt.Errorf("error") + }) + + mockCommitter.Assert(t) + }) +} From 50f67d7e38581fbecc8d36605d5607239e11d305 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 10 Jan 2023 10:53:11 +0800 Subject: [PATCH 5/5] Don't display stop watch top bar icon when disabled and hidden when click other place (#22374) Fix #22286 When timetracking is disabled, the stop watch top bar icon should be hidden. When the stop watch recording popup, it should be allowed to hide with some operation. Now click any place on this page will hide the popup window. --- templates/base/head_navbar.tmpl | 2 ++ web_src/js/features/stopwatch.js | 1 + 2 files changed, 3 insertions(+) diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl index 4fc61cf369..3c4670e418 100644 --- a/templates/base/head_navbar.tmpl +++ b/templates/base/head_navbar.tmpl @@ -77,6 +77,7 @@ {{else if .IsSigned}} + {{end}} diff --git a/web_src/js/features/stopwatch.js b/web_src/js/features/stopwatch.js index b9042fae4c..33915a1d83 100644 --- a/web_src/js/features/stopwatch.js +++ b/web_src/js/features/stopwatch.js @@ -24,6 +24,7 @@ export function initStopwatch() { trigger: 'click', maxWidth: 'none', interactive: true, + hideOnClick: true, }); // global stop watch (in the head_navbar), it should always work in any case either the EventSource or the PeriodicPoller is used.