Skip to content

Commit eab3049

Browse files
authored
Merge branch 'main' into tense-past
2 parents fd4e20b + 1c8bc40 commit eab3049

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+412
-271
lines changed

assets/go-licenses.json

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ require (
4444
github.com/go-git/go-billy/v5 v5.4.1
4545
github.com/go-git/go-git/v5 v5.5.2
4646
github.com/go-ldap/ldap/v3 v3.4.4
47-
github.com/go-redis/redis/v8 v8.11.5
4847
github.com/go-sql-driver/mysql v1.7.0
4948
github.com/go-swagger/go-swagger v0.30.4
5049
github.com/go-testfixtures/testfixtures/v3 v3.8.1
@@ -90,6 +89,7 @@ require (
9089
github.com/pquerna/otp v1.4.0
9190
github.com/prometheus/client_golang v1.14.0
9291
github.com/quasoft/websspi v1.1.2
92+
github.com/redis/go-redis/v9 v9.0.3
9393
github.com/santhosh-tekuri/jsonschema/v5 v5.2.0
9494
github.com/sergi/go-diff v1.3.1
9595
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546
@@ -231,6 +231,8 @@ require (
231231
github.com/nwaples/rardecode v1.1.3 // indirect
232232
github.com/oklog/ulid v1.3.1 // indirect
233233
github.com/olekukonko/tablewriter v0.0.5 // indirect
234+
github.com/onsi/ginkgo v1.16.5 // indirect
235+
github.com/onsi/gomega v1.18.1 // indirect
234236
github.com/pelletier/go-toml v1.9.5 // indirect
235237
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
236238
github.com/pierrec/lz4/v4 v4.1.17 // indirect

go.sum

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl
213213
github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
214214
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0=
215215
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
216+
github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
217+
github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
216218
github.com/bufbuild/connect-go v1.3.1 h1:doJP6Q8Ypg6haUT2IAZJPWHUN9rAUp+F9MfK7yhu1zs=
217219
github.com/bufbuild/connect-go v1.3.1/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I=
218220
github.com/buildkite/terminal-to-html/v3 v3.7.0 h1:chdLUSpiOj/A4v3dzxyOqixXI6aw7IDA6Dk77FXsvNU=
@@ -436,8 +438,6 @@ github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E
436438
github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
437439
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
438440
github.com/go-redis/redis/v8 v8.4.0/go.mod h1:A1tbYoHSa1fXwN+//ljcCYYJeLmVrwL9hbQN45Jdy0M=
439-
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
440-
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
441441
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
442442
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
443443
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@@ -447,6 +447,7 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me
447447
github.com/go-swagger/go-swagger v0.30.4 h1:cPrWLSXY6ZdcgfRicOj0lANg72TkTHz6uv/OlUdzO5U=
448448
github.com/go-swagger/go-swagger v0.30.4/go.mod h1:YM5D5kR9c1ft3ynMXvDk2uo/7UZHKFEqKXcAL9f4Phc=
449449
github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013 h1:l9rI6sNaZgNC0LnF3MiE+qTmyBA/tZAg1rtyrGbUMK0=
450+
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
450451
github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
451452
github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
452453
github.com/go-testfixtures/testfixtures/v3 v3.8.1 h1:uonwvepqRvSgddcrReZQhojTlWlmOlHkYAb9ZaOMWgU=
@@ -583,6 +584,7 @@ github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hf
583584
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
584585
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
585586
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
587+
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
586588
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
587589
github.com/google/pprof v0.0.0-20230222194610-99052d3372e7 h1:pNFnpaSXfibgW7aUbk9pwLmI7LNwh/iR46x/YwN/lNg=
588590
github.com/google/pprof v0.0.0-20230222194610-99052d3372e7/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg=
@@ -939,6 +941,7 @@ github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9l
939941
github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
940942
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
941943
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
944+
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
942945
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
943946
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
944947
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
@@ -955,13 +958,18 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
955958
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
956959
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
957960
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
961+
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
958962
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
963+
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
964+
github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
959965
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
960966
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
961967
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
962968
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
963969
github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
970+
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
964971
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
972+
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
965973
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
966974
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
967975
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
@@ -1050,6 +1058,8 @@ github.com/quasoft/websspi v1.1.2 h1:/mA4w0LxWlE3novvsoEL6BBA1WnjJATbjkh1kFrTidw
10501058
github.com/quasoft/websspi v1.1.2/go.mod h1:HmVdl939dQ0WIXZhyik+ARdI03M6bQzaSEKcgpFmewk=
10511059
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
10521060
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
1061+
github.com/redis/go-redis/v9 v9.0.3 h1:+7mmR26M0IvyLxGZUHxu4GiBkJkVDid0Un+j4ScYu4k=
1062+
github.com/redis/go-redis/v9 v9.0.3/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk=
10531063
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
10541064
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
10551065
github.com/rhysd/actionlint v1.6.23 h1:041VOXgZddfvSJa9Il+WT3Iwuo/j0Nmu4bhpAScrds4=
@@ -1391,6 +1401,7 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v
13911401
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
13921402
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
13931403
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
1404+
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
13941405
golang.org/x/net v0.0.0-20210501142056-aec3718b3fa0/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
13951406
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
13961407
golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -1493,6 +1504,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
14931504
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
14941505
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
14951506
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1507+
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
14961508
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
14971509
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
14981510
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1607,6 +1619,7 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f
16071619
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
16081620
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
16091621
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
1622+
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
16101623
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
16111624
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
16121625
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=

modules/cache/cache_redis.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"code.gitea.io/gitea/modules/nosql"
1313

1414
"gitea.com/go-chi/cache"
15-
"github.com/go-redis/redis/v8"
15+
"github.com/redis/go-redis/v9"
1616
)
1717

1818
// RedisCacher represents a redis cache adapter implementation.

modules/context/context.go

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@ import (
1616
"net/http"
1717
"net/url"
1818
"path"
19-
"regexp"
2019
"strconv"
2120
"strings"
22-
texttemplate "text/template"
2321
"time"
2422

2523
"code.gitea.io/gitea/models/db"
@@ -216,7 +214,7 @@ func (ctx *Context) RedirectToFirst(location ...string) {
216214
ctx.Redirect(setting.AppSubURL + "/")
217215
}
218216

219-
var templateExecutingErr = regexp.MustCompile(`^template: (.*):([1-9][0-9]*):([1-9][0-9]*): executing (?:"(.*)" at <(.*)>: )?`)
217+
const tplStatus500 base.TplName = "status/500"
220218

221219
// HTML calls Context.HTML and renders the template to HTTP response
222220
func (ctx *Context) HTML(status int, name base.TplName) {
@@ -229,34 +227,11 @@ func (ctx *Context) HTML(status int, name base.TplName) {
229227
return strconv.FormatInt(time.Since(tmplStartTime).Nanoseconds()/1e6, 10) + "ms"
230228
}
231229
if err := ctx.Render.HTML(ctx.Resp, status, string(name), templates.BaseVars().Merge(ctx.Data)); err != nil {
232-
if status == http.StatusInternalServerError && name == base.TplName("status/500") {
230+
if status == http.StatusInternalServerError && name == tplStatus500 {
233231
ctx.PlainText(http.StatusInternalServerError, "Unable to find HTML templates, the template system is not initialized, or Gitea can't find your template files.")
234232
return
235233
}
236-
if execErr, ok := err.(texttemplate.ExecError); ok {
237-
if groups := templateExecutingErr.FindStringSubmatch(err.Error()); len(groups) > 0 {
238-
errorTemplateName, lineStr, posStr := groups[1], groups[2], groups[3]
239-
target := ""
240-
if len(groups) == 6 {
241-
target = groups[5]
242-
}
243-
line, _ := strconv.Atoi(lineStr) // Cannot error out as groups[2] is [1-9][0-9]*
244-
pos, _ := strconv.Atoi(posStr) // Cannot error out as groups[3] is [1-9][0-9]*
245-
assetLayerName := templates.AssetFS().GetFileLayerName(errorTemplateName + ".tmpl")
246-
filename := fmt.Sprintf("(%s) %s", assetLayerName, errorTemplateName)
247-
if errorTemplateName != string(name) {
248-
filename += " (subtemplate of " + string(name) + ")"
249-
}
250-
err = fmt.Errorf("failed to render %s, error: %w:\n%s", filename, err, templates.GetLineFromTemplate(errorTemplateName, line, target, pos))
251-
} else {
252-
assetLayerName := templates.AssetFS().GetFileLayerName(execErr.Name + ".tmpl")
253-
filename := fmt.Sprintf("(%s) %s", assetLayerName, execErr.Name)
254-
if execErr.Name != string(name) {
255-
filename += " (subtemplate of " + string(name) + ")"
256-
}
257-
err = fmt.Errorf("failed to render %s, error: %w", filename, err)
258-
}
259-
}
234+
err = fmt.Errorf("failed to render template: %s, error: %s", name, templates.HandleTemplateRenderingError(err))
260235
ctx.ServerError("Render failed", err)
261236
}
262237
}
@@ -324,24 +299,25 @@ func (ctx *Context) serverErrorInternal(logMsg string, logErr error) {
324299
return
325300
}
326301

327-
if !setting.IsProd {
302+
// it's safe to show internal error to admin users, and it helps
303+
if !setting.IsProd || (ctx.Doer != nil && ctx.Doer.IsAdmin) {
328304
ctx.Data["ErrorMsg"] = logErr
329305
}
330306
}
331307

332308
ctx.Data["Title"] = "Internal Server Error"
333-
ctx.HTML(http.StatusInternalServerError, base.TplName("status/500"))
309+
ctx.HTML(http.StatusInternalServerError, tplStatus500)
334310
}
335311

336312
// NotFoundOrServerError use error check function to determine if the error
337313
// is about not found. It responds with 404 status code for not found error,
338314
// or error context description for logging purpose of 500 server error.
339-
func (ctx *Context) NotFoundOrServerError(logMsg string, errCheck func(error) bool, err error) {
340-
if errCheck(err) {
341-
ctx.notFoundInternal(logMsg, err)
315+
func (ctx *Context) NotFoundOrServerError(logMsg string, errCheck func(error) bool, logErr error) {
316+
if errCheck(logErr) {
317+
ctx.notFoundInternal(logMsg, logErr)
342318
return
343319
}
344-
ctx.serverErrorInternal(logMsg, err)
320+
ctx.serverErrorInternal(logMsg, logErr)
345321
}
346322

347323
// PlainTextBytes renders bytes as plain text

modules/git/command.go

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const DefaultLocale = "C"
4040

4141
// Command represents a command with its subcommands or arguments.
4242
type Command struct {
43-
name string
43+
prog string
4444
args []string
4545
parentContext context.Context
4646
desc string
@@ -49,10 +49,28 @@ type Command struct {
4949
}
5050

5151
func (c *Command) String() string {
52-
if len(c.args) == 0 {
53-
return c.name
52+
return c.toString(false)
53+
}
54+
55+
func (c *Command) toString(sanitizing bool) string {
56+
// WARNING: this function is for debugging purposes only. It's much better than old code (which only joins args with space),
57+
// It's impossible to make a simple and 100% correct implementation of argument quoting for different platforms.
58+
debugQuote := func(s string) string {
59+
if strings.ContainsAny(s, " `'\"\t\r\n") {
60+
return fmt.Sprintf("%q", s)
61+
}
62+
return s
63+
}
64+
a := make([]string, 0, len(c.args)+1)
65+
a = append(a, debugQuote(c.prog))
66+
for _, arg := range c.args {
67+
if sanitizing && (strings.Contains(arg, "://") && strings.Contains(arg, "@")) {
68+
a = append(a, debugQuote(util.SanitizeCredentialURLs(arg)))
69+
} else {
70+
a = append(a, debugQuote(arg))
71+
}
5472
}
55-
return fmt.Sprintf("%s %s", c.name, strings.Join(c.args, " "))
73+
return strings.Join(a, " ")
5674
}
5775

5876
// NewCommand creates and returns a new Git Command based on given command and arguments.
@@ -67,7 +85,7 @@ func NewCommand(ctx context.Context, args ...internal.CmdArg) *Command {
6785
cargs = append(cargs, string(arg))
6886
}
6987
return &Command{
70-
name: GitExecutable,
88+
prog: GitExecutable,
7189
args: cargs,
7290
parentContext: ctx,
7391
globalArgsLength: len(globalCommandArgs),
@@ -82,7 +100,7 @@ func NewCommandContextNoGlobals(ctx context.Context, args ...internal.CmdArg) *C
82100
cargs = append(cargs, string(arg))
83101
}
84102
return &Command{
85-
name: GitExecutable,
103+
prog: GitExecutable,
86104
args: cargs,
87105
parentContext: ctx,
88106
}
@@ -250,28 +268,18 @@ func (c *Command) Run(opts *RunOpts) error {
250268
}
251269

252270
if len(opts.Dir) == 0 {
253-
log.Debug("%s", c)
271+
log.Debug("git.Command.Run: %s", c)
254272
} else {
255-
log.Debug("%s: %v", opts.Dir, c)
273+
log.Debug("git.Command.RunDir(%s): %s", opts.Dir, c)
256274
}
257275

258276
desc := c.desc
259277
if desc == "" {
260-
args := c.args[c.globalArgsLength:]
261-
var argSensitiveURLIndexes []int
262-
for i, arg := range c.args {
263-
if strings.Contains(arg, "://") && strings.Contains(arg, "@") {
264-
argSensitiveURLIndexes = append(argSensitiveURLIndexes, i)
265-
}
266-
}
267-
if len(argSensitiveURLIndexes) > 0 {
268-
args = make([]string, len(c.args))
269-
copy(args, c.args)
270-
for _, urlArgIndex := range argSensitiveURLIndexes {
271-
args[urlArgIndex] = util.SanitizeCredentialURLs(args[urlArgIndex])
272-
}
278+
if opts.Dir == "" {
279+
desc = fmt.Sprintf("git: %s", c.toString(true))
280+
} else {
281+
desc = fmt.Sprintf("git(dir:%s): %s", opts.Dir, c.toString(true))
273282
}
274-
desc = fmt.Sprintf("%s %s [repo_path: %s]", c.name, strings.Join(args, " "), opts.Dir)
275283
}
276284

277285
var ctx context.Context
@@ -285,7 +293,7 @@ func (c *Command) Run(opts *RunOpts) error {
285293
}
286294
defer finished()
287295

288-
cmd := exec.CommandContext(ctx, c.name, c.args...)
296+
cmd := exec.CommandContext(ctx, c.prog, c.args...)
289297
if opts.Env == nil {
290298
cmd.Env = os.Environ()
291299
} else {

modules/git/command_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,11 @@ func TestGitArgument(t *testing.T) {
5252
assert.True(t, isSafeArgumentValue("x"))
5353
assert.False(t, isSafeArgumentValue("-x"))
5454
}
55+
56+
func TestCommandString(t *testing.T) {
57+
cmd := NewCommandContextNoGlobals(context.Background(), "a", "-m msg", "it's a test", `say "hello"`)
58+
assert.EqualValues(t, cmd.prog+` a "-m msg" "it's a test" "say \"hello\""`, cmd.String())
59+
60+
cmd = NewCommandContextNoGlobals(context.Background(), "url: https://a:b@c/")
61+
assert.EqualValues(t, cmd.prog+` "url: https://sanitized-credential@c/"`, cmd.toString(true))
62+
}

modules/git/repo.go

Lines changed: 9 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -209,49 +209,22 @@ func Push(ctx context.Context, repoPath string, opts PushOptions) error {
209209
} else {
210210
cmd.SetDescription(fmt.Sprintf("push branch %s to %s (force: %t, mirror: %t)", opts.Branch, opts.Remote, opts.Force, opts.Mirror))
211211
}
212-
var outbuf, errbuf strings.Builder
213212

214-
if opts.Timeout == 0 {
215-
opts.Timeout = -1
216-
}
217-
218-
err := cmd.Run(&RunOpts{
219-
Env: opts.Env,
220-
Timeout: opts.Timeout,
221-
Dir: repoPath,
222-
Stdout: &outbuf,
223-
Stderr: &errbuf,
224-
})
213+
stdout, stderr, err := cmd.RunStdString(&RunOpts{Env: opts.Env, Timeout: opts.Timeout, Dir: repoPath})
225214
if err != nil {
226-
if strings.Contains(errbuf.String(), "non-fast-forward") {
227-
return &ErrPushOutOfDate{
228-
StdOut: outbuf.String(),
229-
StdErr: errbuf.String(),
230-
Err: err,
231-
}
232-
} else if strings.Contains(errbuf.String(), "! [remote rejected]") {
233-
err := &ErrPushRejected{
234-
StdOut: outbuf.String(),
235-
StdErr: errbuf.String(),
236-
Err: err,
237-
}
215+
if strings.Contains(stderr, "non-fast-forward") {
216+
return &ErrPushOutOfDate{StdOut: stdout, StdErr: stderr, Err: err}
217+
} else if strings.Contains(stderr, "! [remote rejected]") {
218+
err := &ErrPushRejected{StdOut: stdout, StdErr: stderr, Err: err}
238219
err.GenerateMessage()
239220
return err
240-
} else if strings.Contains(errbuf.String(), "matches more than one") {
241-
err := &ErrMoreThanOne{
242-
StdOut: outbuf.String(),
243-
StdErr: errbuf.String(),
244-
Err: err,
245-
}
246-
return err
221+
} else if strings.Contains(stderr, "matches more than one") {
222+
return &ErrMoreThanOne{StdOut: stdout, StdErr: stderr, Err: err}
247223
}
224+
return fmt.Errorf("push failed: %w - %s\n%s", err, stderr, stdout)
248225
}
249226

250-
if errbuf.Len() > 0 && err != nil {
251-
return fmt.Errorf("%w - %s", err, errbuf.String())
252-
}
253-
254-
return err
227+
return nil
255228
}
256229

257230
// GetLatestCommitTime returns time for latest commit in repository (across all branches)

modules/nosql/manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
"code.gitea.io/gitea/modules/process"
1313

14-
"github.com/go-redis/redis/v8"
14+
"github.com/redis/go-redis/v9"
1515
"github.com/syndtr/goleveldb/leveldb"
1616
)
1717

0 commit comments

Comments
 (0)