diff --git a/go.mod b/go.mod index cddbf0c18..348897065 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.25.0 require ( github.com/Masterminds/semver/v3 v3.4.0 + github.com/cockroachdb/errors v1.12.0 github.com/derision-test/go-mockgen/v2 v2.1.1 github.com/editorconfig/editorconfig-core-go/v2 v2.6.3 github.com/go-ldap/ldap/v3 v3.4.11 @@ -30,7 +31,6 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/niklasfasching/go-org v1.9.1 github.com/olekukonko/tablewriter v0.0.5 - github.com/pkg/errors v0.9.1 github.com/pquerna/otp v1.5.0 github.com/prometheus/client_golang v1.23.0 github.com/russross/blackfriday v1.6.0 @@ -70,6 +70,8 @@ require ( github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denisenkom/go-mssqldb v0.12.0 // indirect @@ -78,12 +80,14 @@ require ( github.com/djherbis/nio/v3 v3.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/fatih/color v1.13.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-macaron/inject v0.0.0-20200308113650-138e5925c53b // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/google/go-querystring v1.0.0 // indirect @@ -98,6 +102,8 @@ require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/klauspost/compress v1.18.0 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.2 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -109,12 +115,14 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.65.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect diff --git a/go.sum b/go.sum index 4a5b64fb7..0138770eb 100644 --- a/go.sum +++ b/go.sum @@ -41,6 +41,12 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cockroachdb/errors v1.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1/sUo= +github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/couchbase/go-couchbase v0.0.0-20201026062457-7b3be89bbd89/go.mod h1:+/bddYDxXsf9qt0xpDUtRR47A2GjaXmGGAqQ/k3GJ8A= github.com/couchbase/gomemcached v0.0.0-20190515232915-c4b4ca0eb21d/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c= github.com/couchbase/gomemcached v0.1.1/go.mod h1:mxliKQxOv84gQ0bJWbI+w9Wxdpt9HjDvgW9MjCym5Vo= @@ -49,6 +55,7 @@ github.com/couchbase/goutils v0.0.0-20201030094643-5e82bb967e67/go.mod h1:BQwMFl github.com/couchbaselabs/go-couchbase v0.0.0-20190708161019-23e7ca2ce2b7/go.mod h1:mby/05p8HE5yHEAKiIH/555NoblMs7PtW6NrYshDruc= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -83,8 +90,12 @@ github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUork github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-ldap/ldap/v3 v3.4.11 h1:4k0Yxweg+a3OyBLjdYn5OKglv18JNvfDykSoI8bW0gU= github.com/go-ldap/ldap/v3 v3.4.11/go.mod h1:bY7t0FLK8OAVpp/vV6sSlpz3EQDGcQwc8pF0ujLgKvM= @@ -125,6 +136,8 @@ github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:9wScpmSP5A3Bk github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogs/chardet v0.0.0-20150115103509-2404f7772561 h1:aBzukfDxQlCTVS0NBUjI5YA3iVeaZ9Tb5PxNrrIP1xs= github.com/gogs/chardet v0.0.0-20150115103509-2404f7772561/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14= github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14 h1:yXtpJr/LV6PFu4nTLgfjQdcMdzjbqqXMEnHfq0Or6p8= @@ -247,6 +260,7 @@ github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVY github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= @@ -339,9 +353,12 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -370,6 +387,7 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= @@ -428,6 +446,7 @@ github.com/unknwon/paginater v0.0.0-20170405233947-45e5d631308e h1:Qf3QQl/zmEbWD github.com/unknwon/paginater v0.0.0-20170405233947-45e5d631308e/go.mod h1:TBwoao3Q4Eb/cp+dHbXDfRTrZSsj/k7kLr2j1oWRWC0= github.com/urfave/cli v1.22.17 h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ= github.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= @@ -461,6 +480,7 @@ golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAf golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= @@ -476,6 +496,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -492,6 +513,7 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= @@ -552,7 +574,9 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190802220118-1d1727260058/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/auth/auth.go b/internal/auth/auth.go index 6dfc6f808..21f99c326 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -3,7 +3,7 @@ package auth import ( "fmt" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gogs.io/gogs/internal/errutil" ) diff --git a/internal/auth/github/config.go b/internal/auth/github/config.go index c37c4768c..96ac669d5 100644 --- a/internal/auth/github/config.go +++ b/internal/auth/github/config.go @@ -6,8 +6,8 @@ import ( "net/http" "strings" + "github.com/cockroachdb/errors" "github.com/google/go-github/github" - "github.com/pkg/errors" ) // Config contains configuration for GitHub authentication. diff --git a/internal/auth/ldap/config.go b/internal/auth/ldap/config.go index edbdc1ade..3da9195a2 100644 --- a/internal/auth/ldap/config.go +++ b/internal/auth/ldap/config.go @@ -7,6 +7,7 @@ import ( "fmt" "strings" + "github.com/cockroachdb/errors" "github.com/go-ldap/ldap/v3" log "unknwon.dev/clog/v2" ) @@ -162,13 +163,13 @@ func dial(ls *Config) (*ldap.Conn, error) { conn, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port)) if err != nil { - return nil, fmt.Errorf("dial: %v", err) + return nil, errors.Newf("dial: %v", err) } if ls.SecurityProtocol == SecurityProtocolStartTLS { if err = conn.StartTLS(tlsCfg); err != nil { conn.Close() - return nil, fmt.Errorf("StartTLS: %v", err) + return nil, errors.Newf("StartTLS: %v", err) } } diff --git a/internal/auth/pam/pam.go b/internal/auth/pam/pam.go index 07b8577bf..d00b8dc9b 100644 --- a/internal/auth/pam/pam.go +++ b/internal/auth/pam/pam.go @@ -3,8 +3,8 @@ package pam import ( + "github.com/cockroachdb/errors" "github.com/msteinert/pam" - "github.com/pkg/errors" ) func (c *Config) doAuth(login, password string) error { diff --git a/internal/auth/pam/pam_stub.go b/internal/auth/pam/pam_stub.go index d1421b53e..65e6d93a0 100644 --- a/internal/auth/pam/pam_stub.go +++ b/internal/auth/pam/pam_stub.go @@ -3,7 +3,7 @@ package pam import ( - "github.com/pkg/errors" + "github.com/cockroachdb/errors" ) func (*Config) doAuth(_, _ string) error { diff --git a/internal/auth/smtp/config.go b/internal/auth/smtp/config.go index a654dc4af..3b31250c4 100644 --- a/internal/auth/smtp/config.go +++ b/internal/auth/smtp/config.go @@ -5,7 +5,7 @@ import ( "fmt" "net/smtp" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" ) // Config contains configuration for SMTP authentication. diff --git a/internal/auth/smtp/provider.go b/internal/auth/smtp/provider.go index 4bb7f90db..b9aa6bed0 100644 --- a/internal/auth/smtp/provider.go +++ b/internal/auth/smtp/provider.go @@ -5,7 +5,7 @@ import ( "net/textproto" "strings" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" log "unknwon.dev/clog/v2" "gogs.io/gogs/internal/auth" diff --git a/internal/avatar/avatar.go b/internal/avatar/avatar.go index 2904072c0..6b080ecc0 100644 --- a/internal/avatar/avatar.go +++ b/internal/avatar/avatar.go @@ -1,12 +1,12 @@ package avatar import ( - "fmt" "image" "image/color/palette" "math/rand" "time" + "github.com/cockroachdb/errors" "github.com/issue9/identicon" ) @@ -27,7 +27,7 @@ func RandomImageWithSize(size int, data []byte) (image.Image, error) { imgMaker, err := identicon.New(size, palette.WebSafe[backColorIndex], palette.WebSafe[colorIndex:colorIndex+32]...) if err != nil { - return nil, fmt.Errorf("identicon.New: %v", err) + return nil, errors.Newf("identicon.New: %v", err) } return imgMaker.Make(data), nil } diff --git a/internal/cmd/admin.go b/internal/cmd/admin.go index 452e1a48f..4542ec2af 100644 --- a/internal/cmd/admin.go +++ b/internal/cmd/admin.go @@ -6,7 +6,7 @@ import ( "reflect" "runtime" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/urfave/cli" "gogs.io/gogs/internal/conf" @@ -180,7 +180,7 @@ func adminDashboardOperation(operation func() error, successMessage string) func if err := operation(); err != nil { functionName := runtime.FuncForPC(reflect.ValueOf(operation).Pointer()).Name() - return fmt.Errorf("%s: %v", functionName, err) + return errors.Newf("%s: %v", functionName, err) } fmt.Printf("%s\n", successMessage) diff --git a/internal/cmd/backup.go b/internal/cmd/backup.go index 174194566..af45a73ab 100644 --- a/internal/cmd/backup.go +++ b/internal/cmd/backup.go @@ -9,7 +9,7 @@ import ( "strconv" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/unknwon/cae/zip" "github.com/urfave/cli" "gopkg.in/ini.v1" diff --git a/internal/cmd/import.go b/internal/cmd/import.go index e9ba2a48a..b8bbd55f7 100644 --- a/internal/cmd/import.go +++ b/internal/cmd/import.go @@ -8,7 +8,7 @@ import ( "path/filepath" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/unknwon/com" "github.com/urfave/cli" @@ -45,9 +45,9 @@ func runImportLocale(c *cli.Context) error { return errors.New("target directory is not specified") } if !com.IsDir(c.String("source")) { - return fmt.Errorf("source directory %q does not exist or is not a directory", c.String("source")) + return errors.Newf("source directory %q does not exist or is not a directory", c.String("source")) } else if !com.IsDir(c.String("target")) { - return fmt.Errorf("target directory %q does not exist or is not a directory", c.String("target")) + return errors.Newf("target directory %q does not exist or is not a directory", c.String("target")) } err := conf.Init(c.String("config")) @@ -74,12 +74,12 @@ func runImportLocale(c *cli.Context) error { // this breaks INI parser, we need to fix that. sr, err := os.Open(source) if err != nil { - return fmt.Errorf("open: %v", err) + return errors.Newf("open: %v", err) } tw, err := os.Create(target) if err != nil { - return fmt.Errorf("create: %v", err) + return errors.Newf("create: %v", err) } scanner := bufio.NewScanner(sr) diff --git a/internal/cmd/restore.go b/internal/cmd/restore.go index f4e5f17d5..04731e989 100644 --- a/internal/cmd/restore.go +++ b/internal/cmd/restore.go @@ -6,7 +6,7 @@ import ( "path" "path/filepath" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/unknwon/cae/zip" "github.com/urfave/cli" "gopkg.in/ini.v1" diff --git a/internal/conf/conf.go b/internal/conf/conf.go index b71a833fa..40fc55037 100644 --- a/internal/conf/conf.go +++ b/internal/conf/conf.go @@ -1,7 +1,6 @@ package conf import ( - "fmt" "net/mail" "net/url" "os" @@ -10,11 +9,11 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" _ "github.com/go-macaron/cache/memcache" _ "github.com/go-macaron/cache/redis" _ "github.com/go-macaron/session/redis" "github.com/gogs/go-libravatar" - "github.com/pkg/errors" "gopkg.in/ini.v1" log "unknwon.dev/clog/v2" @@ -189,7 +188,7 @@ func Init(customConf string) error { if Security.InstallLock { currentUser, match := CheckRunUser(App.RunUser) if !match { - return fmt.Errorf("user configured to run Gogs is %q, but the current user is %q", App.RunUser, currentUser) + return errors.Newf("user configured to run Gogs is %q, but the current user is %q", App.RunUser, currentUser) } } diff --git a/internal/conf/log.go b/internal/conf/log.go index 044247490..423e75137 100644 --- a/internal/conf/log.go +++ b/internal/conf/log.go @@ -5,7 +5,7 @@ import ( "path/filepath" "strings" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gopkg.in/ini.v1" log "unknwon.dev/clog/v2" ) diff --git a/internal/conf/utils.go b/internal/conf/utils.go index bf63a3c7a..7fb7eb339 100644 --- a/internal/conf/utils.go +++ b/internal/conf/utils.go @@ -4,7 +4,7 @@ import ( "path/filepath" "strings" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gogs.io/gogs/internal/osutil" "gogs.io/gogs/internal/process" diff --git a/internal/context/api.go b/internal/context/api.go index 8c8ff46ce..112fb4a29 100644 --- a/internal/context/api.go +++ b/internal/context/api.go @@ -5,7 +5,7 @@ import ( "net/http" "strings" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/unknwon/paginater" "gopkg.in/macaron.v1" log "unknwon.dev/clog/v2" diff --git a/internal/context/auth.go b/internal/context/auth.go index f0a6ad6a9..a5c459d52 100644 --- a/internal/context/auth.go +++ b/internal/context/auth.go @@ -6,9 +6,9 @@ import ( "net/url" "strings" + "github.com/cockroachdb/errors" "github.com/go-macaron/csrf" "github.com/go-macaron/session" - "github.com/pkg/errors" gouuid "github.com/satori/go.uuid" "gopkg.in/macaron.v1" log "unknwon.dev/clog/v2" diff --git a/internal/context/repo.go b/internal/context/repo.go index 38f65977e..75d07300a 100644 --- a/internal/context/repo.go +++ b/internal/context/repo.go @@ -6,8 +6,8 @@ import ( "net/url" "strings" + "github.com/cockroachdb/errors" "github.com/editorconfig/editorconfig-core-go/v2" - "github.com/pkg/errors" "gopkg.in/macaron.v1" "github.com/gogs/git-module" diff --git a/internal/cryptoutil/aes.go b/internal/cryptoutil/aes.go index bc1a7b5b4..f61d2bf02 100644 --- a/internal/cryptoutil/aes.go +++ b/internal/cryptoutil/aes.go @@ -4,7 +4,8 @@ import ( "crypto/aes" "crypto/cipher" "crypto/rand" - "errors" + + "github.com/cockroachdb/errors" ) // AESGCMEncrypt encrypts plaintext with the given key using AES in GCM mode. diff --git a/internal/database/access_tokens.go b/internal/database/access_tokens.go index 002f462fe..e73954955 100644 --- a/internal/database/access_tokens.go +++ b/internal/database/access_tokens.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" gouuid "github.com/satori/go.uuid" "gorm.io/gorm" diff --git a/internal/database/actions.go b/internal/database/actions.go index 319c3b3b9..e87a80f38 100644 --- a/internal/database/actions.go +++ b/internal/database/actions.go @@ -9,10 +9,10 @@ import ( "time" "unicode" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "gorm.io/gorm" log "unknwon.dev/clog/v2" diff --git a/internal/database/attachment.go b/internal/database/attachment.go index 432d22c2f..9f7fe07ec 100644 --- a/internal/database/attachment.go +++ b/internal/database/attachment.go @@ -8,6 +8,7 @@ import ( "path" "time" + "github.com/cockroachdb/errors" gouuid "github.com/satori/go.uuid" "xorm.io/xorm" @@ -58,19 +59,19 @@ func NewAttachment(name string, buf []byte, file multipart.File) (_ *Attachment, localPath := attach.LocalPath() if err = os.MkdirAll(path.Dir(localPath), os.ModePerm); err != nil { - return nil, fmt.Errorf("MkdirAll: %v", err) + return nil, errors.Newf("MkdirAll: %v", err) } fw, err := os.Create(localPath) if err != nil { - return nil, fmt.Errorf("Create: %v", err) + return nil, errors.Newf("Create: %v", err) } defer fw.Close() if _, err = fw.Write(buf); err != nil { - return nil, fmt.Errorf("write: %v", err) + return nil, errors.Newf("write: %v", err) } else if _, err = io.Copy(fw, file); err != nil { - return nil, fmt.Errorf("copy: %v", err) + return nil, errors.Newf("copy: %v", err) } if _, err := x.Insert(attach); err != nil { diff --git a/internal/database/backup.go b/internal/database/backup.go index 4435862a8..35e00c947 100644 --- a/internal/database/backup.go +++ b/internal/database/backup.go @@ -12,8 +12,8 @@ import ( "strings" "sync" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "gorm.io/gorm" "gorm.io/gorm/schema" log "unknwon.dev/clog/v2" @@ -125,14 +125,14 @@ func dumpLegacyTables(ctx context.Context, dirPath string, verbose bool) error { tableFile := filepath.Join(dirPath, tableName+".json") f, err := os.Create(tableFile) if err != nil { - return fmt.Errorf("create JSON file: %v", err) + return errors.Newf("create JSON file: %v", err) } if err = x.Context(ctx).Asc("id").Iterate(table, func(idx int, bean any) (err error) { return jsoniter.NewEncoder(f).Encode(bean) }); err != nil { _ = f.Close() - return fmt.Errorf("dump table '%s': %v", tableName, err) + return errors.Newf("dump table '%s': %v", tableName, err) } _ = f.Close() } @@ -256,25 +256,25 @@ func importLegacyTables(ctx context.Context, dirPath string, verbose bool) error } if err := x.DropTables(table); err != nil { - return fmt.Errorf("drop table %q: %v", tableName, err) + return errors.Newf("drop table %q: %v", tableName, err) } else if err = x.Sync2(table); err != nil { - return fmt.Errorf("sync table %q: %v", tableName, err) + return errors.Newf("sync table %q: %v", tableName, err) } f, err := os.Open(tableFile) if err != nil { - return fmt.Errorf("open JSON file: %v", err) + return errors.Newf("open JSON file: %v", err) } rawTableName := x.TableName(table) _, isInsertProcessor := table.(xorm.BeforeInsertProcessor) scanner := bufio.NewScanner(f) for scanner.Scan() { if err = jsoniter.Unmarshal(scanner.Bytes(), table); err != nil { - return fmt.Errorf("unmarshal to struct: %v", err) + return errors.Newf("unmarshal to struct: %v", err) } if _, err = x.Insert(table); err != nil { - return fmt.Errorf("insert strcut: %v", err) + return errors.Newf("insert strcut: %v", err) } var meta struct { @@ -307,7 +307,7 @@ func importLegacyTables(ctx context.Context, dirPath string, verbose bool) error rawTableName := snakeMapper.Obj2Table(tableName) seqName := rawTableName + "_id_seq" if _, err = x.Exec(fmt.Sprintf(`SELECT setval('%s', COALESCE((SELECT MAX(id)+1 FROM "%s"), 1), false);`, seqName, rawTableName)); err != nil { - return fmt.Errorf("reset table %q' sequence: %v", rawTableName, err) + return errors.Newf("reset table %q' sequence: %v", rawTableName, err) } } } diff --git a/internal/database/backup_test.go b/internal/database/backup_test.go index 1e78f2575..ff899b366 100644 --- a/internal/database/backup_test.go +++ b/internal/database/backup_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/stretchr/testify/require" "gorm.io/gorm" diff --git a/internal/database/comment.go b/internal/database/comment.go index 167148e16..f0155c849 100644 --- a/internal/database/comment.go +++ b/internal/database/comment.go @@ -6,6 +6,7 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" log "unknwon.dev/clog/v2" "xorm.io/xorm" @@ -97,7 +98,7 @@ func (c *Comment) loadAttributes(e Engine) (err error) { c.PosterID = -1 c.Poster = NewGhostUser() } else { - return fmt.Errorf("getUserByID.(Poster) [%d]: %v", c.PosterID, err) + return errors.Newf("getUserByID.(Poster) [%d]: %v", c.PosterID, err) } } } @@ -105,12 +106,12 @@ func (c *Comment) loadAttributes(e Engine) (err error) { if c.Issue == nil { c.Issue, err = getRawIssueByID(e, c.IssueID) if err != nil { - return fmt.Errorf("getIssueByID [%d]: %v", c.IssueID, err) + return errors.Newf("getIssueByID [%d]: %v", c.IssueID, err) } if c.Issue.Repo == nil { c.Issue.Repo, err = getRepositoryByID(e, c.Issue.RepoID) if err != nil { - return fmt.Errorf("getRepositoryByID [%d]: %v", c.Issue.RepoID, err) + return errors.Newf("getRepositoryByID [%d]: %v", c.Issue.RepoID, err) } } } @@ -118,7 +119,7 @@ func (c *Comment) loadAttributes(e Engine) (err error) { if c.Attachments == nil { c.Attachments, err = getAttachmentsByCommentID(e, c.ID) if err != nil { - return fmt.Errorf("getAttachmentsByCommentID [%d]: %v", c.ID, err) + return errors.Newf("getAttachmentsByCommentID [%d]: %v", c.ID, err) } } @@ -165,7 +166,7 @@ func (c *Comment) EventTag() string { func (c *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue) (err error) { mentions := markup.FindAllMentions(c.Content) if err = updateIssueMentions(e, c.IssueID, mentions); err != nil { - return fmt.Errorf("UpdateIssueMentions [%d]: %v", c.IssueID, err) + return errors.Newf("UpdateIssueMentions [%d]: %v", c.IssueID, err) } switch opType { @@ -227,7 +228,7 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err if IsErrAttachmentNotExist(err) { continue } - return nil, fmt.Errorf("getAttachmentByUUID [%s]: %v", uuid, err) + return nil, errors.Newf("getAttachmentByUUID [%s]: %v", uuid, err) } attachments = append(attachments, attach) } @@ -237,7 +238,7 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err attachments[i].CommentID = comment.ID // No assign value could be 0, so ignore AllCols(). if _, err = e.ID(attachments[i].ID).Update(attachments[i]); err != nil { - return nil, fmt.Errorf("update attachment [%d]: %v", attachments[i].ID, err) + return nil, errors.Newf("update attachment [%d]: %v", attachments[i].ID, err) } } @@ -273,7 +274,7 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err } if _, err = e.Exec("UPDATE `issue` SET updated_unix = ? WHERE id = ?", time.Now().Unix(), opts.Issue.ID); err != nil { - return nil, fmt.Errorf("update issue 'updated_unix': %v", err) + return nil, errors.Newf("update issue 'updated_unix': %v", err) } // Notify watchers for whatever action comes in, ignore if no action type. @@ -342,7 +343,7 @@ func CreateIssueComment(doer *User, repo *Repository, issue *Issue, content stri Attachments: attachments, }) if err != nil { - return nil, fmt.Errorf("CreateComment: %v", err) + return nil, errors.Newf("CreateComment: %v", err) } comment.Issue = issue @@ -362,7 +363,7 @@ func CreateIssueComment(doer *User, repo *Repository, issue *Issue, content stri // CreateRefComment creates a commit reference comment to issue. func CreateRefComment(doer *User, repo *Repository, issue *Issue, content, commitSHA string) error { if commitSHA == "" { - return fmt.Errorf("cannot create reference with empty commit SHA") + return errors.Newf("cannot create reference with empty commit SHA") } // Check if same reference from same commit has already existed. @@ -372,7 +373,7 @@ func CreateRefComment(doer *User, repo *Repository, issue *Issue, content, commi CommitSHA: commitSHA, }) if err != nil { - return fmt.Errorf("check reference comment: %v", err) + return errors.Newf("check reference comment: %v", err) } else if has { return nil } @@ -423,7 +424,7 @@ func GetCommentByID(id int64) (*Comment, error) { func loadCommentsAttributes(e Engine, comments []*Comment) (err error) { for i := range comments { if err = comments[i].loadAttributes(e); err != nil { - return fmt.Errorf("loadAttributes [%d]: %v", comments[i].ID, err) + return errors.Newf("loadAttributes [%d]: %v", comments[i].ID, err) } } @@ -527,7 +528,7 @@ func DeleteCommentByID(doer *User, id int64) error { } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } _, err = DeleteAttachmentsByComment(comment.ID, true) diff --git a/internal/database/database.go b/internal/database/database.go index 7e020fc63..b48f0ed82 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -6,7 +6,7 @@ import ( "strings" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" diff --git a/internal/database/issue.go b/internal/database/issue.go index 0e5eded8f..f55fda552 100644 --- a/internal/database/issue.go +++ b/internal/database/issue.go @@ -2,11 +2,11 @@ package database import ( "context" - "errors" "fmt" "strings" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" log "unknwon.dev/clog/v2" "xorm.io/xorm" @@ -95,7 +95,7 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { if issue.Repo == nil { issue.Repo, err = getRepositoryByID(e, issue.RepoID) if err != nil { - return fmt.Errorf("getRepositoryByID [%d]: %v", issue.RepoID, err) + return errors.Newf("getRepositoryByID [%d]: %v", issue.RepoID, err) } } @@ -106,7 +106,7 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { issue.PosterID = -1 issue.Poster = NewGhostUser() } else { - return fmt.Errorf("getUserByID.(Poster) [%d]: %v", issue.PosterID, err) + return errors.Newf("getUserByID.(Poster) [%d]: %v", issue.PosterID, err) } } } @@ -114,21 +114,21 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { if issue.Labels == nil { issue.Labels, err = getLabelsByIssueID(e, issue.ID) if err != nil { - return fmt.Errorf("getLabelsByIssueID [%d]: %v", issue.ID, err) + return errors.Newf("getLabelsByIssueID [%d]: %v", issue.ID, err) } } if issue.Milestone == nil && issue.MilestoneID > 0 { issue.Milestone, err = getMilestoneByRepoID(e, issue.RepoID, issue.MilestoneID) if err != nil { - return fmt.Errorf("getMilestoneByRepoID [repo_id: %d, milestone_id: %d]: %v", issue.RepoID, issue.MilestoneID, err) + return errors.Newf("getMilestoneByRepoID [repo_id: %d, milestone_id: %d]: %v", issue.RepoID, issue.MilestoneID, err) } } if issue.Assignee == nil && issue.AssigneeID > 0 { issue.Assignee, err = getUserByID(e, issue.AssigneeID) if err != nil { - return fmt.Errorf("getUserByID.(assignee) [%d]: %v", issue.AssigneeID, err) + return errors.Newf("getUserByID.(assignee) [%d]: %v", issue.AssigneeID, err) } } @@ -136,21 +136,21 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { // It is possible pull request is not yet created. issue.PullRequest, err = getPullRequestByIssueID(e, issue.ID) if err != nil && !IsErrPullRequestNotExist(err) { - return fmt.Errorf("getPullRequestByIssueID [%d]: %v", issue.ID, err) + return errors.Newf("getPullRequestByIssueID [%d]: %v", issue.ID, err) } } if issue.Attachments == nil { issue.Attachments, err = getAttachmentsByIssueID(e, issue.ID) if err != nil { - return fmt.Errorf("getAttachmentsByIssueID [%d]: %v", issue.ID, err) + return errors.Newf("getAttachmentsByIssueID [%d]: %v", issue.ID, err) } } if issue.Comments == nil { issue.Comments, err = getCommentsByIssueID(e, issue.ID) if err != nil { - return fmt.Errorf("getCommentsByIssueID [%d]: %v", issue.ID, err) + return errors.Newf("getCommentsByIssueID [%d]: %v", issue.ID, err) } } @@ -302,7 +302,7 @@ func (issue *Issue) getLabels(e Engine) (err error) { issue.Labels, err = getLabelsByIssueID(e, issue.ID) if err != nil { - return fmt.Errorf("getLabelsByIssueID: %v", err) + return errors.Newf("getLabelsByIssueID: %v", err) } return nil } @@ -323,7 +323,7 @@ func (issue *Issue) RemoveLabel(doer *User, label *Label) error { func (issue *Issue) clearLabels(e *xorm.Session) (err error) { if err = issue.getLabels(e); err != nil { - return fmt.Errorf("getLabels: %v", err) + return errors.Newf("getLabels: %v", err) } // NOTE: issue.removeLabel slices issue.Labels, so we need to create another slice to be unaffected. @@ -331,7 +331,7 @@ func (issue *Issue) clearLabels(e *xorm.Session) (err error) { copy(labels, issue.Labels) for i := range labels { if err = issue.removeLabel(e, labels[i]); err != nil { - return fmt.Errorf("removeLabel: %v", err) + return errors.Newf("removeLabel: %v", err) } } @@ -350,7 +350,7 @@ func (issue *Issue) ClearLabels(doer *User) (err error) { } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } if issue.IsPull { @@ -391,9 +391,9 @@ func (issue *Issue) ReplaceLabels(labels []*Label) (err error) { } if err = issue.clearLabels(sess); err != nil { - return fmt.Errorf("clearLabels: %v", err) + return errors.Newf("clearLabels: %v", err) } else if err = issue.addLabels(sess, labels); err != nil { - return fmt.Errorf("addLabels: %v", err) + return errors.Newf("addLabels: %v", err) } return sess.Commit() @@ -481,7 +481,7 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } if issue.IsPull { @@ -524,7 +524,7 @@ func (issue *Issue) ChangeTitle(doer *User, title string) (err error) { oldTitle := issue.Title issue.Title = title if err = UpdateIssueCols(issue, "name"); err != nil { - return fmt.Errorf("UpdateIssueCols: %v", err) + return errors.Newf("UpdateIssueCols: %v", err) } if issue.IsPull { @@ -566,7 +566,7 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) { oldContent := issue.Content issue.Content = content if err = UpdateIssueCols(issue, "content"); err != nil { - return fmt.Errorf("UpdateIssueCols: %v", err) + return errors.Newf("UpdateIssueCols: %v", err) } if issue.IsPull { @@ -607,7 +607,7 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) { func (issue *Issue) ChangeAssignee(doer *User, assigneeID int64) (err error) { issue.AssigneeID = assigneeID if err = UpdateIssueUserByAssignee(issue); err != nil { - return fmt.Errorf("UpdateIssueUserByAssignee: %v", err) + return errors.Newf("UpdateIssueUserByAssignee: %v", err) } issue.Assignee, err = Handle.Users().GetByID(context.TODO(), issue.AssigneeID) @@ -668,7 +668,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) { if opts.Issue.MilestoneID > 0 { milestone, err := getMilestoneByRepoID(e, opts.Issue.RepoID, opts.Issue.MilestoneID) if err != nil && !IsErrMilestoneNotExist(err) { - return fmt.Errorf("getMilestoneByID: %v", err) + return errors.Newf("getMilestoneByID: %v", err) } // Assume milestone is invalid and drop silently. @@ -685,7 +685,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) { if opts.Issue.AssigneeID > 0 { assignee, err := getUserByID(e, opts.Issue.AssigneeID) if err != nil && !IsErrUserNotExist(err) { - return fmt.Errorf("get user by ID: %v", err) + return errors.Newf("get user by ID: %v", err) } if assignee != nil { @@ -716,7 +716,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) { // So we have to get all needed labels first. labels := make([]*Label, 0, len(opts.LableIDs)) if err = e.In("id", opts.LableIDs).Find(&labels); err != nil { - return fmt.Errorf("find all labels [label_ids: %v]: %v", opts.LableIDs, err) + return errors.Newf("find all labels [label_ids: %v]: %v", opts.LableIDs, err) } for _, label := range labels { @@ -726,7 +726,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) { } if err = opts.Issue.addLabel(e, label); err != nil { - return fmt.Errorf("addLabel [id: %d]: %v", label.ID, err) + return errors.Newf("addLabel [id: %d]: %v", label.ID, err) } } } @@ -738,13 +738,13 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) { if len(opts.Attachments) > 0 { attachments, err := getAttachmentsByUUIDs(e, opts.Attachments) if err != nil { - return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %v", opts.Attachments, err) + return errors.Newf("getAttachmentsByUUIDs [uuids: %v]: %v", opts.Attachments, err) } for i := 0; i < len(attachments); i++ { attachments[i].IssueID = opts.Issue.ID if _, err = e.ID(attachments[i].ID).Update(attachments[i]); err != nil { - return fmt.Errorf("update attachment [id: %d]: %v", attachments[i].ID, err) + return errors.Newf("update attachment [id: %d]: %v", attachments[i].ID, err) } } } @@ -766,11 +766,11 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) LableIDs: labelIDs, Attachments: uuids, }); err != nil { - return fmt.Errorf("new issue: %v", err) + return errors.Newf("new issue: %v", err) } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } if err = NotifyWatchers(&Action{ @@ -997,13 +997,13 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) { issues := make([]*Issue, 0, conf.UI.IssuePagingNum) if err := sess.Find(&issues); err != nil { - return nil, fmt.Errorf("find: %v", err) + return nil, errors.Newf("find: %v", err) } // FIXME: use IssueList to improve performance. for i := range issues { if err := issues[i].LoadAttributes(); err != nil { - return nil, fmt.Errorf("LoadAttributes [%d]: %v", issues[i].ID, err) + return nil, errors.Newf("LoadAttributes [%d]: %v", issues[i].ID, err) } } @@ -1017,7 +1017,7 @@ func GetParticipantsByIssueID(issueID int64) ([]*User, error) { Where("issue_id = ?", issueID). Distinct("poster_id"). Find(&userIDs); err != nil { - return nil, fmt.Errorf("get poster IDs: %v", err) + return nil, errors.Newf("get poster IDs: %v", err) } if len(userIDs) == 0 { return nil, nil @@ -1051,7 +1051,7 @@ type IssueUser struct { func newIssueUsers(e *xorm.Session, repo *Repository, issue *Issue) error { assignees, err := repo.getAssignees(e) if err != nil { - return fmt.Errorf("getAssignees: %v", err) + return errors.Newf("getAssignees: %v", err) } // Poster can be anyone, append later if not one of assignees. @@ -1166,7 +1166,7 @@ func updateIssueMentions(e Engine, issueID int64, mentions []string) error { users := make([]*User, 0, len(mentions)) if err := e.In("lower_name", mentions).Asc("lower_name").Find(&users); err != nil { - return fmt.Errorf("find mentioned users: %v", err) + return errors.Newf("find mentioned users: %v", err) } ids := make([]int64, 0, len(mentions)) @@ -1179,7 +1179,7 @@ func updateIssueMentions(e Engine, issueID int64, mentions []string) error { memberIDs := make([]int64, 0, user.NumMembers) orgUsers, err := getOrgUsersByOrgID(e, user.ID, 0) if err != nil { - return fmt.Errorf("getOrgUsersByOrgID [%d]: %v", user.ID, err) + return errors.Newf("getOrgUsersByOrgID [%d]: %v", user.ID, err) } for _, orgUser := range orgUsers { @@ -1190,7 +1190,7 @@ func updateIssueMentions(e Engine, issueID int64, mentions []string) error { } if err := updateIssueUsersByMentions(e, issueID, ids); err != nil { - return fmt.Errorf("UpdateIssueUsersByMentions: %v", err) + return errors.Newf("UpdateIssueUsersByMentions: %v", err) } return nil diff --git a/internal/database/issue_label.go b/internal/database/issue_label.go index 5a112c93b..58d2c71bd 100644 --- a/internal/database/issue_label.go +++ b/internal/database/issue_label.go @@ -8,6 +8,7 @@ import ( "xorm.io/xorm" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" "gogs.io/gogs/internal/errutil" @@ -22,7 +23,7 @@ var labelColorPattern = lazyregexp.New("#([a-fA-F0-9]{6})") func GetLabelTemplateFile(name string) ([][2]string, error) { data, err := getRepoInitFile("label", name) if err != nil { - return nil, fmt.Errorf("getRepoInitFile: %v", err) + return nil, errors.Newf("getRepoInitFile: %v", err) } lines := strings.Split(string(data), "\n") @@ -35,11 +36,11 @@ func GetLabelTemplateFile(name string) ([][2]string, error) { fields := strings.SplitN(line, " ", 2) if len(fields) != 2 { - return nil, fmt.Errorf("line is malformed: %s", line) + return nil, errors.Newf("line is malformed: %s", line) } if !labelColorPattern.MatchString(fields[0]) { - return nil, fmt.Errorf("bad HTML color code in line: %s", line) + return nil, errors.Newf("bad HTML color code in line: %s", line) } fields[1] = strings.TrimSpace(fields[1]) @@ -192,7 +193,7 @@ func GetLabelsByRepoID(repoID int64) ([]*Label, error) { func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) { issueLabels, err := getIssueLabels(e, issueID) if err != nil { - return nil, fmt.Errorf("getIssueLabels: %v", err) + return nil, errors.Newf("getIssueLabels: %v", err) } else if len(issueLabels) == 0 { return []*Label{}, nil } @@ -284,7 +285,7 @@ func newIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { } if err = updateLabel(e, label); err != nil { - return fmt.Errorf("updateLabel: %v", err) + return errors.Newf("updateLabel: %v", err) } issue.Labels = append(issue.Labels, label) @@ -317,7 +318,7 @@ func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label) (err error) } if err = newIssueLabel(e, issue, labels[i]); err != nil { - return fmt.Errorf("newIssueLabel: %v", err) + return errors.Newf("newIssueLabel: %v", err) } } @@ -362,7 +363,7 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { label.NumClosedIssues-- } if err = updateLabel(e, label); err != nil { - return fmt.Errorf("updateLabel: %v", err) + return errors.Newf("updateLabel: %v", err) } for i := range issue.Labels { diff --git a/internal/database/issue_mail.go b/internal/database/issue_mail.go index 704f17a1a..74f3507df 100644 --- a/internal/database/issue_mail.go +++ b/internal/database/issue_mail.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/unknwon/com" log "unknwon.dev/clog/v2" @@ -104,11 +104,11 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) watchers, err := GetWatchers(issue.RepoID) if err != nil { - return fmt.Errorf("GetWatchers [repo_id: %d]: %v", issue.RepoID, err) + return errors.Newf("GetWatchers [repo_id: %d]: %v", issue.RepoID, err) } participants, err := GetParticipantsByIssueID(issue.ID) if err != nil { - return fmt.Errorf("GetParticipantsByIssueID [issue_id: %d]: %v", issue.ID, err) + return errors.Newf("GetParticipantsByIssueID [issue_id: %d]: %v", issue.ID, err) } // In case the issue poster is not watching the repository, @@ -126,7 +126,7 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) to, err := Handle.Users().GetByID(ctx, watchers[i].UserID) if err != nil { - return fmt.Errorf("GetUserByID [%d]: %v", watchers[i].UserID, err) + return errors.Newf("GetUserByID [%d]: %v", watchers[i].UserID, err) } if to.IsOrganization() || !to.IsActive { continue @@ -177,7 +177,7 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) func (issue *Issue) MailParticipants() (err error) { mentions := markup.FindAllMentions(issue.Content) if err = updateIssueMentions(x, issue.ID, mentions); err != nil { - return fmt.Errorf("UpdateIssueMentions [%d]: %v", issue.ID, err) + return errors.Newf("UpdateIssueMentions [%d]: %v", issue.ID, err) } if err = mailIssueCommentToParticipants(issue, issue.Poster, mentions); err != nil { diff --git a/internal/database/lfs.go b/internal/database/lfs.go index ef1346c97..baa43b883 100644 --- a/internal/database/lfs.go +++ b/internal/database/lfs.go @@ -2,10 +2,10 @@ package database import ( "context" - "errors" "fmt" "time" + "github.com/cockroachdb/errors" "gorm.io/gorm" "gogs.io/gogs/internal/errutil" diff --git a/internal/database/login_source_files.go b/internal/database/login_source_files.go index bc36df72c..9f1fd33d9 100644 --- a/internal/database/login_source_files.go +++ b/internal/database/login_source_files.go @@ -8,7 +8,7 @@ import ( "sync" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gopkg.in/ini.v1" "gogs.io/gogs/internal/auth" @@ -200,7 +200,7 @@ func loadLoginSourceFiles(authdPath string, clock func() time.Time) (loginSource loginSource.Provider = github.NewProvider(&cfg) default: - return fmt.Errorf("unknown type %q", authType) + return errors.Newf("unknown type %q", authType) } store.sources = append(store.sources, loginSource) diff --git a/internal/database/login_sources.go b/internal/database/login_sources.go index 272b2743e..b2edba169 100644 --- a/internal/database/login_sources.go +++ b/internal/database/login_sources.go @@ -6,8 +6,8 @@ import ( "strconv" "time" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "gorm.io/gorm" "gogs.io/gogs/internal/auth" @@ -121,7 +121,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error { s.Provider = mockProvider default: - return fmt.Errorf("unrecognized login source type: %v", s.Type) + return errors.Newf("unrecognized login source type: %v", s.Type) } return nil } diff --git a/internal/database/migrations/migrations.go b/internal/database/migrations/migrations.go index f9a7cc7d6..5276a0a81 100644 --- a/internal/database/migrations/migrations.go +++ b/internal/database/migrations/migrations.go @@ -1,7 +1,7 @@ package migrations import ( - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" log "unknwon.dev/clog/v2" ) diff --git a/internal/database/migrations/v20.go b/internal/database/migrations/v20.go index fc033f090..eb767085e 100644 --- a/internal/database/migrations/v20.go +++ b/internal/database/migrations/v20.go @@ -1,7 +1,7 @@ package migrations import ( - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" "gogs.io/gogs/internal/cryptoutil" diff --git a/internal/database/milestone.go b/internal/database/milestone.go index 5f7537116..a7d1492e5 100644 --- a/internal/database/milestone.go +++ b/internal/database/milestone.go @@ -7,6 +7,7 @@ import ( log "unknwon.dev/clog/v2" "xorm.io/xorm" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" "gogs.io/gogs/internal/conf" @@ -339,7 +340,7 @@ func ChangeMilestoneAssign(doer *User, issue *Issue, oldMilestoneID int64) (err } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } var hookAction api.HookIssueAction diff --git a/internal/database/mirror.go b/internal/database/mirror.go index 962fefce0..884de6ff3 100644 --- a/internal/database/mirror.go +++ b/internal/database/mirror.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" "gopkg.in/ini.v1" log "unknwon.dev/clog/v2" @@ -141,7 +142,7 @@ func (m *Mirror) SaveAddress(addr string) error { err := git.RemoteRemove(repoPath, "origin") if err != nil { - return fmt.Errorf("remove remote 'origin': %v", err) + return errors.Newf("remove remote 'origin': %v", err) } addrURL, err := url.Parse(addr) @@ -151,7 +152,7 @@ func (m *Mirror) SaveAddress(addr string) error { err = git.RemoteAdd(repoPath, "origin", addrURL.String(), git.RemoteAddOptions{MirrorFetch: true}) if err != nil { - return fmt.Errorf("add remote 'origin': %v", err) + return errors.Newf("add remote 'origin': %v", err) } return nil diff --git a/internal/database/models.go b/internal/database/models.go index 4eb62d584..eb3e3d7f8 100644 --- a/internal/database/models.go +++ b/internal/database/models.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" "gorm.io/gorm/logger" log "unknwon.dev/clog/v2" @@ -97,13 +97,13 @@ func getEngine() (*xorm.Engine, error) { case "sqlite3": if err := os.MkdirAll(path.Dir(conf.Database.Path), os.ModePerm); err != nil { - return nil, fmt.Errorf("create directories: %v", err) + return nil, errors.Newf("create directories: %v", err) } conf.UseSQLite3 = true connStr = "file:" + conf.Database.Path + "?cache=shared&mode=rwc" default: - return nil, fmt.Errorf("unknown database type: %s", conf.Database.Type) + return nil, errors.Newf("unknown database type: %s", conf.Database.Type) } return xorm.NewEngine(driver, connStr) } @@ -111,7 +111,7 @@ func getEngine() (*xorm.Engine, error) { func NewTestEngine() error { x, err := getEngine() if err != nil { - return fmt.Errorf("connect to database: %v", err) + return errors.Newf("connect to database: %v", err) } if conf.UsePostgreSQL { @@ -126,7 +126,7 @@ func SetEngine() (*gorm.DB, error) { var err error x, err = getEngine() if err != nil { - return nil, fmt.Errorf("connect to database: %v", err) + return nil, errors.Newf("connect to database: %v", err) } if conf.UsePostgreSQL { @@ -151,7 +151,7 @@ func SetEngine() (*gorm.DB, error) { }, ) if err != nil { - return nil, fmt.Errorf("create 'xorm.log': %v", err) + return nil, errors.Newf("create 'xorm.log': %v", err) } x.SetMaxOpenConns(conf.Database.MaxOpenConns) @@ -184,7 +184,7 @@ func NewEngine() error { } if err = migrations.Migrate(db); err != nil { - return fmt.Errorf("migrate: %v", err) + return errors.Newf("migrate: %v", err) } if err = x.StoreEngine("InnoDB").Sync2(legacyTables...); err != nil { diff --git a/internal/database/org.go b/internal/database/org.go index 2db70d825..fcbff087b 100644 --- a/internal/database/org.go +++ b/internal/database/org.go @@ -2,11 +2,10 @@ package database import ( "context" - "errors" - "fmt" "os" "strings" + "github.com/cockroachdb/errors" "xorm.io/builder" "xorm.io/xorm" @@ -129,7 +128,7 @@ func CreateOrganization(org, owner *User) (err error) { } if _, err = sess.Insert(org); err != nil { - return fmt.Errorf("insert organization: %v", err) + return errors.Newf("insert organization: %v", err) } _ = userutil.GenerateRandomAvatar(org.ID, org.Name, org.Email) @@ -140,7 +139,7 @@ func CreateOrganization(org, owner *User) (err error) { IsOwner: true, NumTeams: 1, }); err != nil { - return fmt.Errorf("insert org-user relation: %v", err) + return errors.Newf("insert org-user relation: %v", err) } // Create default owner team. @@ -152,7 +151,7 @@ func CreateOrganization(org, owner *User) (err error) { NumMembers: 1, } if _, err = sess.Insert(t); err != nil { - return fmt.Errorf("insert owner team: %v", err) + return errors.Newf("insert owner team: %v", err) } if _, err = sess.Insert(&TeamUser{ @@ -160,11 +159,11 @@ func CreateOrganization(org, owner *User) (err error) { OrgID: org.ID, TeamID: t.ID, }); err != nil { - return fmt.Errorf("insert team-user relation: %v", err) + return errors.Newf("insert team-user relation: %v", err) } if err = os.MkdirAll(repoutil.UserPath(org.Name), os.ModePerm); err != nil { - return fmt.Errorf("create directory: %v", err) + return errors.Newf("create directory: %v", err) } return sess.Commit() @@ -228,7 +227,7 @@ func DeleteOrganization(org *User) error { &OrgUser{OrgID: org.ID}, &TeamUser{OrgID: org.ID}, ); err != nil { - return fmt.Errorf("deleteBeans: %v", err) + return errors.Newf("deleteBeans: %v", err) } return sess.Commit() } @@ -364,24 +363,24 @@ func RemoveOrgUser(orgID, userID int64) error { has, err := x.Where("uid=?", userID).And("org_id=?", orgID).Get(ou) if err != nil { - return fmt.Errorf("get org-user: %v", err) + return errors.Newf("get org-user: %v", err) } else if !has { return nil } user, err := Handle.Users().GetByID(context.TODO(), userID) if err != nil { - return fmt.Errorf("GetUserByID [%d]: %v", userID, err) + return errors.Newf("GetUserByID [%d]: %v", userID, err) } org, err := Handle.Users().GetByID(context.TODO(), orgID) if err != nil { - return fmt.Errorf("GetUserByID [%d]: %v", orgID, err) + return errors.Newf("GetUserByID [%d]: %v", orgID, err) } // FIXME: only need to get IDs here, not all fields of repository. repos, _, err := org.GetUserRepositories(user.ID, 1, org.NumRepos) if err != nil { - return fmt.Errorf("GetUserRepositories [%d]: %v", user.ID, err) + return errors.Newf("GetUserRepositories [%d]: %v", user.ID, err) } // Check if the user to delete is the last member in owner team. @@ -461,7 +460,7 @@ func (org *User) getUserTeams(e Engine, userID int64, cols ...string) ([]*Team, func (org *User) GetUserTeamIDs(userID int64) ([]int64, error) { teams, err := org.getUserTeams(x, userID, "team.id") if err != nil { - return nil, fmt.Errorf("getUserTeams [%d]: %v", userID, err) + return nil, errors.Newf("getUserTeams [%d]: %v", userID, err) } teamIDs := make([]int64, len(teams)) @@ -482,7 +481,7 @@ func (org *User) GetUserTeams(userID int64) ([]*Team, error) { func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repository, int64, error) { teamIDs, err := org.GetUserTeamIDs(userID) if err != nil { - return nil, 0, fmt.Errorf("GetUserTeamIDs: %v", err) + return nil, 0, errors.Newf("GetUserTeamIDs: %v", err) } if len(teamIDs) == 0 { // user has no team but "IN ()" is invalid SQL @@ -491,7 +490,7 @@ func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repos var teamRepoIDs []int64 if err = x.Table("team_repo").In("team_id", teamIDs).Distinct("repo_id").Find(&teamRepoIDs); err != nil { - return nil, 0, fmt.Errorf("get team repository IDs: %v", err) + return nil, 0, errors.Newf("get team repository IDs: %v", err) } if len(teamRepoIDs) == 0 { // team has no repo but "IN ()" is invalid SQL @@ -509,7 +508,7 @@ func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repos Desc("updated_unix"). Limit(pageSize, (page-1)*pageSize). Find(&repos); err != nil { - return nil, 0, fmt.Errorf("get user repositories: %v", err) + return nil, 0, errors.Newf("get user repositories: %v", err) } repoCount, err := x.Where("owner_id = ?", org.ID). @@ -518,7 +517,7 @@ func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repos builder.In("id", teamRepoIDs))). Count(new(Repository)) if err != nil { - return nil, 0, fmt.Errorf("count user repositories: %v", err) + return nil, 0, errors.Newf("count user repositories: %v", err) } return repos, repoCount, nil @@ -528,7 +527,7 @@ func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repos func (org *User) GetUserMirrorRepositories(userID int64) ([]*Repository, error) { teamIDs, err := org.GetUserTeamIDs(userID) if err != nil { - return nil, fmt.Errorf("GetUserTeamIDs: %v", err) + return nil, errors.Newf("GetUserTeamIDs: %v", err) } if len(teamIDs) == 0 { teamIDs = []int64{-1} @@ -537,7 +536,7 @@ func (org *User) GetUserMirrorRepositories(userID int64) ([]*Repository, error) var teamRepoIDs []int64 err = x.Table("team_repo").In("team_id", teamIDs).Distinct("repo_id").Find(&teamRepoIDs) if err != nil { - return nil, fmt.Errorf("get team repository ids: %v", err) + return nil, errors.Newf("get team repository ids: %v", err) } if len(teamRepoIDs) == 0 { // team has no repo but "IN ()" is invalid SQL @@ -551,7 +550,7 @@ func (org *User) GetUserMirrorRepositories(userID int64) ([]*Repository, error) And("is_mirror = ?", true). // Don't move up because it's an independent condition Desc("updated_unix"). Find(&repos); err != nil { - return nil, fmt.Errorf("get user repositories: %v", err) + return nil, errors.Newf("get user repositories: %v", err) } return repos, nil } diff --git a/internal/database/org_team.go b/internal/database/org_team.go index d6b5cce2a..2056d2f74 100644 --- a/internal/database/org_team.go +++ b/internal/database/org_team.go @@ -2,10 +2,10 @@ package database import ( "context" - "errors" "fmt" "strings" + "github.com/cockroachdb/errors" "xorm.io/xorm" "gogs.io/gogs/internal/errutil" @@ -55,14 +55,14 @@ func (t *Team) IsMember(userID int64) bool { func (t *Team) getRepositories(e Engine) (err error) { teamRepos := make([]*TeamRepo, 0, t.NumRepos) if err = x.Where("team_id=?", t.ID).Find(&teamRepos); err != nil { - return fmt.Errorf("get team-repos: %v", err) + return errors.Newf("get team-repos: %v", err) } t.Repos = make([]*Repository, 0, len(teamRepos)) for i := range teamRepos { repo, err := getRepositoryByID(e, teamRepos[i].RepoID) if err != nil { - return fmt.Errorf("getRepositoryById(%d): %v", teamRepos[i].RepoID, err) + return errors.Newf("getRepositoryById(%d): %v", teamRepos[i].RepoID, err) } t.Repos = append(t.Repos, repo) } @@ -111,19 +111,19 @@ func (t *Team) addRepository(e Engine, repo *Repository) (err error) { t.NumRepos++ if _, err = e.ID(t.ID).AllCols().Update(t); err != nil { - return fmt.Errorf("update team: %v", err) + return errors.Newf("update team: %v", err) } if err = repo.recalculateTeamAccesses(e, 0); err != nil { - return fmt.Errorf("recalculateAccesses: %v", err) + return errors.Newf("recalculateAccesses: %v", err) } if err = t.getMembers(e); err != nil { - return fmt.Errorf("getMembers: %v", err) + return errors.Newf("getMembers: %v", err) } for _, u := range t.Members { if err = watchRepo(e, u.ID, repo.ID, true); err != nil { - return fmt.Errorf("watchRepo: %v", err) + return errors.Newf("watchRepo: %v", err) } } return nil @@ -168,7 +168,7 @@ func (t *Team) removeRepository(e Engine, repo *Repository, recalculate bool) (e } if err = t.getMembers(e); err != nil { - return fmt.Errorf("get team members: %v", err) + return errors.Newf("get team members: %v", err) } // TODO: Delete me when this method is migrated to use GORM. @@ -387,18 +387,18 @@ func UpdateTeam(t *Team, authChanged bool) (err error) { } if _, err = sess.ID(t.ID).AllCols().Update(t); err != nil { - return fmt.Errorf("update: %v", err) + return errors.Newf("update: %v", err) } // Update access for team members if needed. if authChanged { if err = t.getRepositories(sess); err != nil { - return fmt.Errorf("getRepositories:%v", err) + return errors.Newf("getRepositories:%v", err) } for _, repo := range t.Repos { if err = repo.recalculateTeamAccesses(sess, 0); err != nil { - return fmt.Errorf("recalculateTeamAccesses: %v", err) + return errors.Newf("recalculateTeamAccesses: %v", err) } } } @@ -478,13 +478,13 @@ func getTeamMembers(e Engine, teamID int64) (_ []*User, err error) { teamUsers := make([]*TeamUser, 0, 10) if err = e.Sql("SELECT `id`, `org_id`, `team_id`, `uid` FROM `team_user` WHERE team_id = ?", teamID). Find(&teamUsers); err != nil { - return nil, fmt.Errorf("get team-users: %v", err) + return nil, errors.Newf("get team-users: %v", err) } members := make([]*User, 0, len(teamUsers)) for i := range teamUsers { member := new(User) if _, err = e.ID(teamUsers[i].UID).Get(member); err != nil { - return nil, fmt.Errorf("get user '%d': %v", teamUsers[i].UID, err) + return nil, errors.Newf("get user '%d': %v", teamUsers[i].UID, err) } members = append(members, member) } diff --git a/internal/database/organizations.go b/internal/database/organizations.go index c8d66ac52..531a85bab 100644 --- a/internal/database/organizations.go +++ b/internal/database/organizations.go @@ -3,7 +3,7 @@ package database import ( "context" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" "gogs.io/gogs/internal/dbutil" diff --git a/internal/database/permissions.go b/internal/database/permissions.go index 6153a6178..c9068df7b 100644 --- a/internal/database/permissions.go +++ b/internal/database/permissions.go @@ -3,7 +3,7 @@ package database import ( "context" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" log "unknwon.dev/clog/v2" ) diff --git a/internal/database/public_keys.go b/internal/database/public_keys.go index 93b212a6a..c114cc231 100644 --- a/internal/database/public_keys.go +++ b/internal/database/public_keys.go @@ -4,7 +4,7 @@ import ( "os" "path/filepath" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" "gogs.io/gogs/internal/conf" diff --git a/internal/database/pull.go b/internal/database/pull.go index 1b4f7f5cf..90a32e052 100644 --- a/internal/database/pull.go +++ b/internal/database/pull.go @@ -7,6 +7,7 @@ import ( "path/filepath" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" log "unknwon.dev/clog/v2" "xorm.io/xorm" @@ -86,14 +87,14 @@ func (pr *PullRequest) loadAttributes(e Engine) (err error) { if pr.HeadRepo == nil { pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID) if err != nil && !IsErrRepoNotExist(err) { - return fmt.Errorf("get head repository by ID: %v", err) + return errors.Newf("get head repository by ID: %v", err) } } if pr.BaseRepo == nil { pr.BaseRepo, err = getRepositoryByID(e, pr.BaseRepoID) if err != nil { - return fmt.Errorf("get base repository by ID: %v", err) + return errors.Newf("get base repository by ID: %v", err) } } @@ -103,7 +104,7 @@ func (pr *PullRequest) loadAttributes(e Engine) (err error) { pr.MergerID = -1 pr.Merger = NewGhostUser() } else if err != nil { - return fmt.Errorf("get merger by ID: %v", err) + return errors.Newf("get merger by ID: %v", err) } } @@ -205,13 +206,13 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle } if err = pr.Issue.changeStatus(sess, doer, pr.Issue.Repo, true); err != nil { - return fmt.Errorf("Issue.changeStatus: %v", err) + return errors.Newf("Issue.changeStatus: %v", err) } headRepoPath := RepoPath(pr.HeadUserName, pr.HeadRepo.Name) headGitRepo, err := git.Open(headRepoPath) if err != nil { - return fmt.Errorf("open repository: %v", err) + return errors.Newf("open repository: %v", err) } // Create temporary directory to store temporary copy of the base repository, @@ -230,21 +231,21 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle if _, stderr, err = process.ExecTimeout(5*time.Minute, fmt.Sprintf("PullRequest.Merge (git clone): %s", tmpBasePath), "git", "clone", "-b", pr.BaseBranch, baseGitRepo.Path(), tmpBasePath); err != nil { - return fmt.Errorf("git clone: %s", stderr) + return errors.Newf("git clone: %s", stderr) } // Add remote which points to the head repository. if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git remote add): %s", tmpBasePath), "git", "remote", "add", "head_repo", headRepoPath); err != nil { - return fmt.Errorf("git remote add [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr) + return errors.Newf("git remote add [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr) } // Fetch information from head repository to the temporary copy. if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git fetch): %s", tmpBasePath), "git", "fetch", "head_repo"); err != nil { - return fmt.Errorf("git fetch [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr) + return errors.Newf("git fetch [%s -> %s]: %s", headRepoPath, tmpBasePath, stderr) } remoteHeadBranch := "head_repo/" + pr.HeadBranch @@ -261,7 +262,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git merge --no-ff --no-commit): %s", tmpBasePath), "git", "merge", "--no-ff", "--no-commit", remoteHeadBranch); err != nil { - return fmt.Errorf("git merge --no-ff --no-commit [%s]: %v - %s", tmpBasePath, err, stderr) + return errors.Newf("git merge --no-ff --no-commit [%s]: %v - %s", tmpBasePath, err, stderr) } // Create a merge commit for the base branch. @@ -270,7 +271,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle "git", "commit", fmt.Sprintf("--author='%s <%s>'", doer.DisplayName(), doer.Email), "-m", fmt.Sprintf("Merge branch '%s' of %s/%s into %s", pr.HeadBranch, pr.HeadUserName, pr.HeadRepo.Name, pr.BaseBranch), "-m", commitDescription); err != nil { - return fmt.Errorf("git commit [%s]: %v - %s", tmpBasePath, err, stderr) + return errors.Newf("git commit [%s]: %v - %s", tmpBasePath, err, stderr) } case MergeStyleRebase: // Rebase before merging @@ -279,7 +280,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git rebase): %s", tmpBasePath), "git", "rebase", "--quiet", pr.BaseBranch, remoteHeadBranch); err != nil { - return fmt.Errorf("git rebase [%s on %s]: %s", remoteHeadBranch, pr.BaseBranch, stderr) + return errors.Newf("git rebase [%s on %s]: %s", remoteHeadBranch, pr.BaseBranch, stderr) } // Name non-branch commit state to a new temporary branch in order to save changes. @@ -287,48 +288,48 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git checkout): %s", tmpBasePath), "git", "checkout", "-b", tmpBranch); err != nil { - return fmt.Errorf("git checkout '%s': %s", tmpBranch, stderr) + return errors.Newf("git checkout '%s': %s", tmpBranch, stderr) } // Check out the base branch to be operated on. if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git checkout): %s", tmpBasePath), "git", "checkout", pr.BaseBranch); err != nil { - return fmt.Errorf("git checkout '%s': %s", pr.BaseBranch, stderr) + return errors.Newf("git checkout '%s': %s", pr.BaseBranch, stderr) } // Merge changes from temporary branch to the base branch. if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git merge): %s", tmpBasePath), "git", "merge", tmpBranch); err != nil { - return fmt.Errorf("git merge [%s]: %v - %s", tmpBasePath, err, stderr) + return errors.Newf("git merge [%s]: %v - %s", tmpBasePath, err, stderr) } default: - return fmt.Errorf("unknown merge style: %s", mergeStyle) + return errors.Newf("unknown merge style: %s", mergeStyle) } // Push changes on base branch to upstream. if _, stderr, err = process.ExecDir(-1, tmpBasePath, fmt.Sprintf("PullRequest.Merge (git push): %s", tmpBasePath), "git", "push", baseGitRepo.Path(), pr.BaseBranch); err != nil { - return fmt.Errorf("git push: %s", stderr) + return errors.Newf("git push: %s", stderr) } pr.MergedCommitID, err = headGitRepo.BranchCommitID(pr.HeadBranch) if err != nil { - return fmt.Errorf("get head branch %q commit ID: %v", pr.HeadBranch, err) + return errors.Newf("get head branch %q commit ID: %v", pr.HeadBranch, err) } pr.HasMerged = true pr.Merged = time.Now() pr.MergerID = doer.ID if _, err = sess.ID(pr.ID).AllCols().Update(pr); err != nil { - return fmt.Errorf("update pull request: %v", err) + return errors.Newf("update pull request: %v", err) } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } if err = Handle.Actions().MergePullRequest(ctx, doer, pr.Issue.Repo.Owner, pr.Issue.Repo, pr.Issue); err != nil { @@ -398,13 +399,13 @@ func (pr *PullRequest) testPatch() (err error) { if pr.BaseRepo == nil { pr.BaseRepo, err = GetRepositoryByID(pr.BaseRepoID) if err != nil { - return fmt.Errorf("GetRepositoryByID: %v", err) + return errors.Newf("GetRepositoryByID: %v", err) } } patchPath, err := pr.BaseRepo.PatchPath(pr.Index) if err != nil { - return fmt.Errorf("BaseRepo.PatchPath: %v", err) + return errors.Newf("BaseRepo.PatchPath: %v", err) } // Fast fail if patch does not exist, this assumes data is corrupted. @@ -419,7 +420,7 @@ func (pr *PullRequest) testPatch() (err error) { log.Trace("PullRequest[%d].testPatch (patchPath): %s", pr.ID, patchPath) if err := pr.BaseRepo.UpdateLocalCopyBranch(pr.BaseBranch); err != nil { - return fmt.Errorf("UpdateLocalCopy [%d]: %v", pr.BaseRepoID, err) + return errors.Newf("UpdateLocalCopy [%d]: %v", pr.BaseRepoID, err) } args := []string{"apply", "--check"} @@ -455,17 +456,17 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str Attachments: uuids, IsPull: true, }); err != nil { - return fmt.Errorf("newIssue: %v", err) + return errors.Newf("newIssue: %v", err) } pr.Index = pull.Index if err = repo.SavePatch(pr.Index, patch); err != nil { - return fmt.Errorf("SavePatch: %v", err) + return errors.Newf("SavePatch: %v", err) } pr.BaseRepo = repo if err = pr.testPatch(); err != nil { - return fmt.Errorf("testPatch: %v", err) + return errors.Newf("testPatch: %v", err) } // No conflict appears after test means mergeable. if pr.Status == PullRequestStatusChecking { @@ -474,11 +475,11 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str pr.IssueID = pull.ID if _, err = sess.Insert(pr); err != nil { - return fmt.Errorf("insert pull repo: %v", err) + return errors.Newf("insert pull repo: %v", err) } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } if err = NotifyWatchers(&Action{ @@ -620,7 +621,7 @@ func (pr *PullRequest) UpdateCols(cols ...string) error { func (pr *PullRequest) UpdatePatch() (err error) { headGitRepo, err := git.Open(pr.HeadRepo.RepoPath()) if err != nil { - return fmt.Errorf("open repository: %v", err) + return errors.Newf("open repository: %v", err) } // Add a temporary remote. @@ -628,7 +629,7 @@ func (pr *PullRequest) UpdatePatch() (err error) { baseRepoPath := RepoPath(pr.BaseRepo.MustOwner().Name, pr.BaseRepo.Name) err = headGitRepo.RemoteAdd(tmpRemote, baseRepoPath, git.RemoteAddOptions{Fetch: true}) if err != nil { - return fmt.Errorf("add remote %q [repo_id: %d]: %v", tmpRemote, pr.HeadRepoID, err) + return errors.Newf("add remote %q [repo_id: %d]: %v", tmpRemote, pr.HeadRepoID, err) } defer func() { if err := headGitRepo.RemoteRemove(tmpRemote); err != nil { @@ -639,18 +640,18 @@ func (pr *PullRequest) UpdatePatch() (err error) { remoteBranch := "remotes/" + tmpRemote + "/" + pr.BaseBranch pr.MergeBase, err = headGitRepo.MergeBase(remoteBranch, pr.HeadBranch) if err != nil { - return fmt.Errorf("get merge base: %v", err) + return errors.Newf("get merge base: %v", err) } else if err = pr.Update(); err != nil { - return fmt.Errorf("update: %v", err) + return errors.Newf("update: %v", err) } patch, err := headGitRepo.DiffBinary(pr.MergeBase, pr.HeadBranch) if err != nil { - return fmt.Errorf("get binary patch: %v", err) + return errors.Newf("get binary patch: %v", err) } if err = pr.BaseRepo.SavePatch(pr.Index, patch); err != nil { - return fmt.Errorf("save patch: %v", err) + return errors.Newf("save patch: %v", err) } log.Trace("PullRequest[%d].UpdatePatch: patch saved", pr.ID) @@ -666,12 +667,12 @@ func (pr *PullRequest) PushToBaseRepo() (err error) { headRepoPath := pr.HeadRepo.RepoPath() headGitRepo, err := git.Open(headRepoPath) if err != nil { - return fmt.Errorf("open repository: %v", err) + return errors.Newf("open repository: %v", err) } tmpRemote := fmt.Sprintf("tmp-pull-%d", pr.ID) if err = headGitRepo.RemoteAdd(tmpRemote, pr.BaseRepo.RepoPath()); err != nil { - return fmt.Errorf("add remote %q [repo_id: %d]: %v", tmpRemote, pr.HeadRepoID, err) + return errors.Newf("add remote %q [repo_id: %d]: %v", tmpRemote, pr.HeadRepoID, err) } // Make sure to remove the remote even if the push fails @@ -686,13 +687,13 @@ func (pr *PullRequest) PushToBaseRepo() (err error) { if osutil.Exist(headFile) { err = os.Remove(headFile) if err != nil { - return fmt.Errorf("remove head file [repo_id: %d]: %v", pr.BaseRepoID, err) + return errors.Newf("remove head file [repo_id: %d]: %v", pr.BaseRepoID, err) } } err = headGitRepo.Push(tmpRemote, fmt.Sprintf("%s:%s", pr.HeadBranch, headRefspec)) if err != nil { - return fmt.Errorf("push: %v", err) + return errors.Newf("push: %v", err) } return nil @@ -726,7 +727,7 @@ func (prs PullRequestList) loadAttributes(e Engine) (err error) { } issues := make([]*Issue, 0, len(issueIDs)) if err = e.Where("id > 0").In("id", issueIDs).Find(&issues); err != nil { - return fmt.Errorf("find issues: %v", err) + return errors.Newf("find issues: %v", err) } for i := range issues { set[issues[i].ID] = issues[i] @@ -738,7 +739,7 @@ func (prs PullRequestList) loadAttributes(e Engine) (err error) { // Load attributes for i := range prs { if err = prs[i].loadAttributes(e); err != nil { - return fmt.Errorf("loadAttributes [%d]: %v", prs[i].ID, err) + return errors.Newf("loadAttributes [%d]: %v", prs[i].ID, err) } } diff --git a/internal/database/release.go b/internal/database/release.go index 13910e834..377cf6f42 100644 --- a/internal/database/release.go +++ b/internal/database/release.go @@ -9,6 +9,7 @@ import ( log "unknwon.dev/clog/v2" "xorm.io/xorm" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" @@ -57,7 +58,7 @@ func (r *Release) loadAttributes(e Engine) (err error) { if r.Repo == nil { r.Repo, err = getRepositoryByID(e, r.RepoID) if err != nil { - return fmt.Errorf("getRepositoryByID [repo_id: %d]: %v", r.RepoID, err) + return errors.Newf("getRepositoryByID [repo_id: %d]: %v", r.RepoID, err) } } @@ -68,7 +69,7 @@ func (r *Release) loadAttributes(e Engine) (err error) { r.PublisherID = -1 r.Publisher = NewGhostUser() } else { - return fmt.Errorf("getUserByID.(Publisher) [publisher_id: %d]: %v", r.PublisherID, err) + return errors.Newf("getUserByID.(Publisher) [publisher_id: %d]: %v", r.PublisherID, err) } } } @@ -76,7 +77,7 @@ func (r *Release) loadAttributes(e Engine) (err error) { if r.Attachments == nil { r.Attachments, err = getAttachmentsByReleaseID(e, r.ID) if err != nil { - return fmt.Errorf("getAttachmentsByReleaseID [%d]: %v", r.ID, err) + return errors.Newf("getAttachmentsByReleaseID [%d]: %v", r.ID, err) } } @@ -118,7 +119,7 @@ func createTag(gitRepo *git.Repository, r *Release) error { if !gitRepo.HasTag(r.TagName) { commit, err := gitRepo.BranchCommit(r.Target) if err != nil { - return fmt.Errorf("get branch commit: %v", err) + return errors.Newf("get branch commit: %v", err) } // 🚨 SECURITY: Trim any leading '-' to prevent command line argument injection. @@ -132,13 +133,13 @@ func createTag(gitRepo *git.Repository, r *Release) error { } else { commit, err := gitRepo.TagCommit(r.TagName) if err != nil { - return fmt.Errorf("get tag commit: %v", err) + return errors.Newf("get tag commit: %v", err) } r.Sha1 = commit.ID.String() r.NumCommits, err = commit.CommitsCount() if err != nil { - return fmt.Errorf("count commits: %v", err) + return errors.Newf("count commits: %v", err) } } } @@ -177,17 +178,17 @@ func NewRelease(gitRepo *git.Repository, r *Release, uuids []string) error { } if _, err = sess.Insert(r); err != nil { - return fmt.Errorf("insert: %v", err) + return errors.Newf("insert: %v", err) } if len(uuids) > 0 { if _, err = sess.In("uuid", uuids).Cols("release_id").Update(&Attachment{ReleaseID: r.ID}); err != nil { - return fmt.Errorf("link attachments: %v", err) + return errors.Newf("link attachments: %v", err) } } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } // Only send webhook when actually published, skip drafts @@ -196,7 +197,7 @@ func NewRelease(gitRepo *git.Repository, r *Release, uuids []string) error { } r, err = GetReleaseByID(r.ID) if err != nil { - return fmt.Errorf("GetReleaseByID: %v", err) + return errors.Newf("GetReleaseByID: %v", err) } r.preparePublishWebhooks() return nil @@ -232,7 +233,7 @@ func GetRelease(repoID int64, tagName string) (*Release, error) { r := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)} if _, err = x.Get(r); err != nil { - return nil, fmt.Errorf("get: %v", err) + return nil, errors.Newf("get: %v", err) } return r, r.LoadAttributes() @@ -304,7 +305,7 @@ func SortReleases(rels []*Release) { // UpdateRelease updates information of a release. func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bool, uuids []string) (err error) { if err = createTag(gitRepo, r); err != nil { - return fmt.Errorf("createTag: %v", err) + return errors.Newf("createTag: %v", err) } r.PublisherID = doer.ID @@ -315,22 +316,22 @@ func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bo return err } if _, err = sess.ID(r.ID).AllCols().Update(r); err != nil { - return fmt.Errorf("Update: %v", err) + return errors.Newf("Update: %v", err) } // Unlink all current attachments and link back later if still valid if _, err = sess.Exec("UPDATE attachment SET release_id = 0 WHERE release_id = ?", r.ID); err != nil { - return fmt.Errorf("unlink current attachments: %v", err) + return errors.Newf("unlink current attachments: %v", err) } if len(uuids) > 0 { if _, err = sess.In("uuid", uuids).Cols("release_id").Update(&Attachment{ReleaseID: r.ID}); err != nil { - return fmt.Errorf("link attachments: %v", err) + return errors.Newf("link attachments: %v", err) } } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } if !isPublish { @@ -345,7 +346,7 @@ func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bo func DeleteReleaseOfRepoByID(repoID, id int64) error { rel, err := GetReleaseByID(id) if err != nil { - return fmt.Errorf("GetReleaseByID: %v", err) + return errors.Newf("GetReleaseByID: %v", err) } // Mark sure the delete operation against same repository. @@ -355,18 +356,18 @@ func DeleteReleaseOfRepoByID(repoID, id int64) error { repo, err := GetRepositoryByID(rel.RepoID) if err != nil { - return fmt.Errorf("GetRepositoryByID: %v", err) + return errors.Newf("GetRepositoryByID: %v", err) } _, stderr, err := process.ExecDir(-1, repo.RepoPath(), fmt.Sprintf("DeleteReleaseByID (git tag -d): %d", rel.ID), "git", "tag", "-d", rel.TagName) if err != nil && !strings.Contains(stderr, "not found") { - return fmt.Errorf("git tag -d: %v - %s", err, stderr) + return errors.Newf("git tag -d: %v - %s", err, stderr) } if _, err = x.Id(rel.ID).Delete(new(Release)); err != nil { - return fmt.Errorf("delete: %v", err) + return errors.Newf("delete: %v", err) } return nil diff --git a/internal/database/repo.go b/internal/database/repo.go index 08aeb77ce..ae8d7b946 100644 --- a/internal/database/repo.go +++ b/internal/database/repo.go @@ -15,8 +15,8 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" "github.com/nfnt/resize" - "github.com/pkg/errors" "github.com/unknwon/cae/zip" "github.com/unknwon/com" "gopkg.in/ini.v1" @@ -256,7 +256,7 @@ func (r *Repository) loadAttributes(e Engine) (err error) { if r.Owner == nil { r.Owner, err = getUserByID(e, r.OwnerID) if err != nil { - return fmt.Errorf("getUserByID [%d]: %v", r.OwnerID, err) + return errors.Newf("getUserByID [%d]: %v", r.OwnerID, err) } } @@ -267,7 +267,7 @@ func (r *Repository) loadAttributes(e Engine) (err error) { r.IsFork = false r.ForkID = 0 } else { - return fmt.Errorf("get fork repository by ID: %v", err) + return errors.Newf("get fork repository by ID: %v", err) } } } @@ -337,19 +337,19 @@ func (r *Repository) AvatarLink() string { func (r *Repository) UploadAvatar(data []byte) error { img, _, err := image.Decode(bytes.NewReader(data)) if err != nil { - return fmt.Errorf("decode image: %v", err) + return errors.Newf("decode image: %v", err) } _ = os.MkdirAll(conf.Picture.RepositoryAvatarUploadPath, os.ModePerm) fw, err := os.Create(r.CustomAvatarPath()) if err != nil { - return fmt.Errorf("create custom avatar directory: %v", err) + return errors.Newf("create custom avatar directory: %v", err) } defer fw.Close() m := resize.Resize(avatar.DefaultSize, avatar.DefaultSize, img, resize.NearestNeighbor) if err = png.Encode(fw, m); err != nil { - return fmt.Errorf("encode image: %v", err) + return errors.Newf("encode image: %v", err) } return nil @@ -446,12 +446,12 @@ func (r *Repository) mustOwner(e Engine) *User { func (r *Repository) UpdateSize() error { countObject, err := git.CountObjects(r.RepoPath()) if err != nil { - return fmt.Errorf("count repository objects: %v", err) + return errors.Newf("count repository objects: %v", err) } r.Size = countObject.Size + countObject.SizePack if _, err = x.Id(r.ID).Cols("size").Update(r); err != nil { - return fmt.Errorf("update size: %v", err) + return errors.Newf("update size: %v", err) } return nil } @@ -664,24 +664,24 @@ func UpdateLocalCopyBranch(repoPath, localPath, branch string, isWiki bool) (err Branch: branch, Timeout: time.Duration(conf.Git.Timeout.Clone) * time.Second, }); err != nil { - return fmt.Errorf("git clone [branch: %s]: %v", branch, err) + return errors.Newf("git clone [branch: %s]: %v", branch, err) } return nil } gitRepo, err := git.Open(localPath) if err != nil { - return fmt.Errorf("open repository: %v", err) + return errors.Newf("open repository: %v", err) } if err = gitRepo.Fetch(git.FetchOptions{ Prune: true, }); err != nil { - return fmt.Errorf("fetch: %v", err) + return errors.Newf("fetch: %v", err) } if err = gitRepo.Checkout(branch); err != nil { - return fmt.Errorf("checkout [branch: %s]: %v", branch, err) + return errors.Newf("checkout [branch: %s]: %v", branch, err) } // Reset to align with remote in case of force push. @@ -689,7 +689,7 @@ func UpdateLocalCopyBranch(repoPath, localPath, branch string, isWiki bool) (err if err = gitRepo.Reset(rev, git.ResetOptions{ Hard: true, }); err != nil { - return fmt.Errorf("reset [revision: %s]: %v", rev, err) + return errors.Newf("reset [revision: %s]: %v", rev, err) } return nil } @@ -712,14 +712,14 @@ func (r *Repository) PatchPath(index int64) (string, error) { func (r *Repository) SavePatch(index int64, patch []byte) error { patchPath, err := r.PatchPath(index) if err != nil { - return fmt.Errorf("PatchPath: %v", err) + return errors.Newf("PatchPath: %v", err) } if err = os.MkdirAll(filepath.Dir(patchPath), os.ModePerm); err != nil { return err } if err = os.WriteFile(patchPath, patch, 0o644); err != nil { - return fmt.Errorf("WriteFile: %v", err) + return errors.Newf("WriteFile: %v", err) } return nil @@ -825,7 +825,7 @@ func MigrateRepository(doer, owner *User, opts MigrateRepoOptions) (*Repository, Quiet: true, Timeout: migrateTimeout, }); err != nil { - return repo, fmt.Errorf("clone: %v", err) + return repo, errors.Newf("clone: %v", err) } wikiRemotePath := wikiRemoteURL(opts.RemoteAddr) @@ -847,7 +847,7 @@ func MigrateRepository(doer, owner *User, opts MigrateRepoOptions) (*Repository, if strings.Contains(stderr, "fatal: bad default revision 'HEAD'") { repo.IsBare = true } else { - return repo, fmt.Errorf("check bare: %v - %s", err, stderr) + return repo, errors.Newf("check bare: %v - %s", err, stderr) } } @@ -855,11 +855,11 @@ func MigrateRepository(doer, owner *User, opts MigrateRepoOptions) (*Repository, // Try to get HEAD branch and set it as default branch. gitRepo, err := git.Open(repoPath) if err != nil { - return repo, fmt.Errorf("open repository: %v", err) + return repo, errors.Newf("open repository: %v", err) } refspec, err := gitRepo.SymbolicRef() if err != nil { - return repo, fmt.Errorf("get HEAD branch: %v", err) + return repo, errors.Newf("get HEAD branch: %v", err) } repo.DefaultBranch = git.RefShortName(refspec) @@ -875,7 +875,7 @@ func MigrateRepository(doer, owner *User, opts MigrateRepoOptions) (*Repository, EnablePrune: true, NextSync: time.Now().Add(time.Duration(conf.Mirror.DefaultInterval) * time.Hour), }); err != nil { - return repo, fmt.Errorf("InsertOne: %v", err) + return repo, errors.Newf("InsertOne: %v", err) } repo.IsMirror = true @@ -890,11 +890,11 @@ func MigrateRepository(doer, owner *User, opts MigrateRepoOptions) (*Repository, func cleanUpMigrateGitConfig(configPath string) error { cfg, err := ini.Load(configPath) if err != nil { - return fmt.Errorf("open config file: %v", err) + return errors.Newf("open config file: %v", err) } cfg.DeleteSection("remote \"origin\"") if err = cfg.SaveToIndent(configPath, "\t"); err != nil { - return fmt.Errorf("save config file: %v", err) + return errors.Newf("save config file: %v", err) } return nil } @@ -911,7 +911,7 @@ func createDelegateHooks(repoPath string) (err error) { if err = os.WriteFile(hookPath, []byte(fmt.Sprintf(hooksTpls[name], conf.Repository.ScriptType, conf.AppPath(), conf.CustomConf)), os.ModePerm); err != nil { - return fmt.Errorf("create delegate hook '%s': %v", hookPath, err) + return errors.Newf("create delegate hook '%s': %v", hookPath, err) } } return nil @@ -921,20 +921,20 @@ func createDelegateHooks(repoPath string) (err error) { func CleanUpMigrateInfo(repo *Repository) (*Repository, error) { repoPath := repo.RepoPath() if err := createDelegateHooks(repoPath); err != nil { - return repo, fmt.Errorf("createDelegateHooks: %v", err) + return repo, errors.Newf("createDelegateHooks: %v", err) } if repo.HasWiki() { if err := createDelegateHooks(repo.WikiPath()); err != nil { - return repo, fmt.Errorf("createDelegateHooks.(wiki): %v", err) + return repo, errors.Newf("createDelegateHooks.(wiki): %v", err) } } if err := cleanUpMigrateGitConfig(repo.GitConfigPath()); err != nil { - return repo, fmt.Errorf("cleanUpMigrateGitConfig: %v", err) + return repo, errors.Newf("cleanUpMigrateGitConfig: %v", err) } if repo.HasWiki() { if err := cleanUpMigrateGitConfig(path.Join(repo.WikiPath(), "config")); err != nil { - return repo, fmt.Errorf("cleanUpMigrateGitConfig.(wiki): %v", err) + return repo, errors.Newf("cleanUpMigrateGitConfig.(wiki): %v", err) } } @@ -947,20 +947,20 @@ func initRepoCommit(tmpPath string, sig *git.Signature) (err error) { if _, stderr, err = process.ExecDir(-1, tmpPath, fmt.Sprintf("initRepoCommit (git add): %s", tmpPath), "git", "add", "--all"); err != nil { - return fmt.Errorf("git add: %s", stderr) + return errors.Newf("git add: %s", stderr) } if _, stderr, err = process.ExecDir(-1, tmpPath, fmt.Sprintf("initRepoCommit (git commit): %s", tmpPath), "git", "commit", fmt.Sprintf("--author='%s <%s>'", sig.Name, sig.Email), "-m", "Initial commit"); err != nil { - return fmt.Errorf("git commit: %s", stderr) + return errors.Newf("git commit: %s", stderr) } if _, stderr, err = process.ExecDir(-1, tmpPath, fmt.Sprintf("initRepoCommit (git push): %s", tmpPath), "git", "push"); err != nil { - return fmt.Errorf("git push: %s", stderr) + return errors.Newf("git push: %s", stderr) } return nil } @@ -998,7 +998,7 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep // README data, err := getRepoInitFile("readme", opts.Readme) if err != nil { - return fmt.Errorf("getRepoInitFile[%s]: %v", opts.Readme, err) + return errors.Newf("getRepoInitFile[%s]: %v", opts.Readme, err) } cloneLink := repo.CloneLink() @@ -1010,7 +1010,7 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep } if err = os.WriteFile(filepath.Join(tmpDir, "README.md"), []byte(com.Expand(string(data), match)), 0o644); err != nil { - return fmt.Errorf("write README.md: %v", err) + return errors.Newf("write README.md: %v", err) } // .gitignore @@ -1020,7 +1020,7 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep for _, name := range names { data, err = getRepoInitFile("gitignore", name) if err != nil { - return fmt.Errorf("getRepoInitFile[%s]: %v", name, err) + return errors.Newf("getRepoInitFile[%s]: %v", name, err) } buf.WriteString("# ---> " + name + "\n") buf.Write(data) @@ -1029,7 +1029,7 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep if buf.Len() > 0 { if err = os.WriteFile(filepath.Join(tmpDir, ".gitignore"), buf.Bytes(), 0o644); err != nil { - return fmt.Errorf("write .gitignore: %v", err) + return errors.Newf("write .gitignore: %v", err) } } } @@ -1038,11 +1038,11 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep if len(opts.License) > 0 { data, err = getRepoInitFile("license", opts.License) if err != nil { - return fmt.Errorf("getRepoInitFile[%s]: %v", opts.License, err) + return errors.Newf("getRepoInitFile[%s]: %v", opts.License, err) } if err = os.WriteFile(filepath.Join(tmpDir, "LICENSE"), data, 0o644); err != nil { - return fmt.Errorf("write LICENSE: %v", err) + return errors.Newf("write LICENSE: %v", err) } } @@ -1053,9 +1053,9 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep func initRepository(e Engine, repoPath string, doer *User, repo *Repository, opts CreateRepoOptionsLegacy) (err error) { // Init bare new repository. if err = git.Init(repoPath, git.InitOptions{Bare: true}); err != nil { - return fmt.Errorf("init repository: %v", err) + return errors.Newf("init repository: %v", err) } else if err = createDelegateHooks(repoPath); err != nil { - return fmt.Errorf("createDelegateHooks: %v", err) + return errors.Newf("createDelegateHooks: %v", err) } // Set default branch @@ -1080,7 +1080,7 @@ func initRepository(e Engine, repoPath string, doer *User, repo *Repository, opt defer RemoveAllWithNotice("Delete repository for auto-initialization", tmpDir) if err = prepareRepoCommit(repo, tmpDir, repoPath, opts); err != nil { - return fmt.Errorf("prepareRepoCommit: %v", err) + return errors.Newf("prepareRepoCommit: %v", err) } // Apply changes and commit. @@ -1093,14 +1093,14 @@ func initRepository(e Engine, repoPath string, doer *User, repo *Repository, opt }, ) if err != nil { - return fmt.Errorf("initRepoCommit: %v", err) + return errors.Newf("initRepoCommit: %v", err) } } // Re-fetch the repository from database before updating it (else it would // override changes that were done earlier with sql) if repo, err = getRepositoryByID(e, repo.ID); err != nil { - return fmt.Errorf("getRepositoryByID: %v", err) + return errors.Newf("getRepositoryByID: %v", err) } if !opts.AutoInit { @@ -1109,7 +1109,7 @@ func initRepository(e Engine, repoPath string, doer *User, repo *Repository, opt repo.DefaultBranch = conf.Repository.DefaultBranch if err = updateRepository(e, repo, false); err != nil { - return fmt.Errorf("updateRepository: %v", err) + return errors.Newf("updateRepository: %v", err) } return nil @@ -1138,7 +1138,7 @@ func createRepository(e *xorm.Session, doer, owner *User, repo *Repository) (err has, err := isRepositoryExist(e, owner, repo.Name) if err != nil { - return fmt.Errorf("IsRepositoryExist: %v", err) + return errors.Newf("IsRepositoryExist: %v", err) } else if has { return ErrRepoAlreadyExist{args: errutil.Args{"ownerID": owner.ID, "name": repo.Name}} } @@ -1156,19 +1156,19 @@ func createRepository(e *xorm.Session, doer, owner *User, repo *Repository) (err if owner.IsOrganization() { t, err := owner.getOwnerTeam(e) if err != nil { - return fmt.Errorf("getOwnerTeam: %v", err) + return errors.Newf("getOwnerTeam: %v", err) } else if err = t.addRepository(e, repo); err != nil { - return fmt.Errorf("addRepository: %v", err) + return errors.Newf("addRepository: %v", err) } } else { // Organization automatically called this in addRepository method. if err = repo.recalculateAccesses(e); err != nil { - return fmt.Errorf("recalculateAccesses: %v", err) + return errors.Newf("recalculateAccesses: %v", err) } } if err = watchRepo(e, owner.ID, repo.ID, true); err != nil { - return fmt.Errorf("watchRepo: %v", err) + return errors.Newf("watchRepo: %v", err) } // FIXME: This is identical to Actions.NewRepo but we are not yet able to wrap @@ -1192,7 +1192,7 @@ func createRepository(e *xorm.Session, doer, owner *User, repo *Repository) (err }) } if err = newRepoAction(e, doer, repo); err != nil { - return fmt.Errorf("newRepoAction: %v", err) + return errors.Newf("newRepoAction: %v", err) } return repo.loadAttributes(e) @@ -1248,14 +1248,14 @@ func CreateRepository(doer, owner *User, opts CreateRepoOptionsLegacy) (_ *Repos if !opts.IsMirror { if err = initRepository(sess, repoPath, doer, repo, opts); err != nil { RemoveAllWithNotice("Delete repository for initialization failure", repoPath) - return nil, fmt.Errorf("initRepository: %v", err) + return nil, errors.Newf("initRepository: %v", err) } _, stderr, err := process.ExecDir(-1, repoPath, fmt.Sprintf("CreateRepository 'git update-server-info': %s", repoPath), "git", "update-server-info") if err != nil { - return nil, fmt.Errorf("CreateRepository 'git update-server-info': %s", stderr) + return nil, errors.Newf("CreateRepository 'git update-server-info': %s", stderr) } } if err = sess.Commit(); err != nil { @@ -1311,7 +1311,7 @@ func Repositories(page, pageSize int) (_ []*Repository, err error) { func RepositoriesWithUsers(page, pageSize int) (_ []*Repository, err error) { repos, err := Repositories(page, pageSize) if err != nil { - return nil, fmt.Errorf("Repositories: %v", err) + return nil, errors.Newf("Repositories: %v", err) } for i := range repos { @@ -1337,7 +1337,7 @@ func FilterRepositoryWithIssues(repoIDs []int64) ([]int64, error) { In("id", repoIDs). Cols("id"). Find(&repos); err != nil { - return nil, fmt.Errorf("filter valid repositories %v: %v", repoIDs, err) + return nil, errors.Newf("filter valid repositories %v: %v", repoIDs, err) } if len(repos) == 0 { @@ -1362,13 +1362,13 @@ func RepoPath(userName, repoName string) string { func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error { newOwner, err := Handle.Users().GetByUsername(context.TODO(), newOwnerName) if err != nil { - return fmt.Errorf("get new owner '%s': %v", newOwnerName, err) + return errors.Newf("get new owner '%s': %v", newOwnerName, err) } // Check if new owner has repository with same name. has, err := IsRepositoryExist(newOwner, repo.Name) if err != nil { - return fmt.Errorf("IsRepositoryExist: %v", err) + return errors.Newf("IsRepositoryExist: %v", err) } else if has { return ErrRepoAlreadyExist{args: errutil.Args{"ownerName": newOwnerName, "name": repo.Name}} } @@ -1376,7 +1376,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error sess := x.NewSession() defer sess.Close() if err = sess.Begin(); err != nil { - return fmt.Errorf("sess.Begin: %v", err) + return errors.Newf("sess.Begin: %v", err) } owner := repo.Owner @@ -1388,13 +1388,13 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error // Update repository. if _, err := sess.ID(repo.ID).Update(repo); err != nil { - return fmt.Errorf("update owner: %v", err) + return errors.Newf("update owner: %v", err) } // Remove redundant collaborators. collaborators, err := repo.getCollaborators(sess) if err != nil { - return fmt.Errorf("getCollaborators: %v", err) + return errors.Newf("getCollaborators: %v", err) } // Dummy object. @@ -1403,7 +1403,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error collaboration.UserID = c.ID if c.ID == newOwner.ID || newOwner.IsOrgMember(c.ID) { if _, err = sess.Delete(collaboration); err != nil { - return fmt.Errorf("remove collaborator '%d': %v", c.ID, err) + return errors.Newf("remove collaborator '%d': %v", c.ID, err) } } } @@ -1411,7 +1411,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error // Remove old team-repository relations. if owner.IsOrganization() { if err = owner.getTeams(sess); err != nil { - return fmt.Errorf("getTeams: %v", err) + return errors.Newf("getTeams: %v", err) } for _, t := range owner.Teams { if !t.hasRepository(sess, repo.ID) { @@ -1420,34 +1420,34 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error t.NumRepos-- if _, err := sess.ID(t.ID).AllCols().Update(t); err != nil { - return fmt.Errorf("decrease team repository count '%d': %v", t.ID, err) + return errors.Newf("decrease team repository count '%d': %v", t.ID, err) } } if err = owner.removeOrgRepo(sess, repo.ID); err != nil { - return fmt.Errorf("removeOrgRepo: %v", err) + return errors.Newf("removeOrgRepo: %v", err) } } if newOwner.IsOrganization() { t, err := newOwner.getOwnerTeam(sess) if err != nil { - return fmt.Errorf("getOwnerTeam: %v", err) + return errors.Newf("getOwnerTeam: %v", err) } else if err = t.addRepository(sess, repo); err != nil { - return fmt.Errorf("add to owner team: %v", err) + return errors.Newf("add to owner team: %v", err) } } else { // Organization called this in addRepository method. if err = repo.recalculateAccesses(sess); err != nil { - return fmt.Errorf("recalculateAccesses: %v", err) + return errors.Newf("recalculateAccesses: %v", err) } } // Update repository count. if _, err = sess.Exec("UPDATE `user` SET num_repos=num_repos+1 WHERE id=?", newOwner.ID); err != nil { - return fmt.Errorf("increase new owner repository count: %v", err) + return errors.Newf("increase new owner repository count: %v", err) } else if _, err = sess.Exec("UPDATE `user` SET num_repos=num_repos-1 WHERE id=?", owner.ID); err != nil { - return fmt.Errorf("decrease old owner repository count: %v", err) + return errors.Newf("decrease old owner repository count: %v", err) } // Remove watch for organization. @@ -1458,7 +1458,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error } if err = watchRepo(sess, newOwner.ID, repo.ID, true); err != nil { - return fmt.Errorf("watchRepo: %v", err) + return errors.Newf("watchRepo: %v", err) } // FIXME: This is identical to Actions.TransferRepo but we are not yet able to @@ -1478,7 +1478,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error }) } if err = transferRepoAction(sess, doer, owner, repo); err != nil { - return fmt.Errorf("transferRepoAction: %v", err) + return errors.Newf("transferRepoAction: %v", err) } // Rename remote repository to new path and delete local copy. @@ -1486,7 +1486,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error return err } if err = os.Rename(RepoPath(owner.Name, repo.Name), RepoPath(newOwner.Name, repo.Name)); err != nil { - return fmt.Errorf("rename repository directory: %v", err) + return errors.Newf("rename repository directory: %v", err) } deleteRepoLocalCopy(repo.ID) @@ -1496,7 +1496,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error if com.IsExist(wikiPath) { RemoveAllWithNotice("Delete repository wiki local copy", repo.LocalWikiPath()) if err = os.Rename(wikiPath, WikiPath(newOwner.Name, repo.Name)); err != nil { - return fmt.Errorf("rename repository wiki: %v", err) + return errors.Newf("rename repository wiki: %v", err) } } @@ -1519,25 +1519,25 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error) has, err := IsRepositoryExist(u, newRepoName) if err != nil { - return fmt.Errorf("IsRepositoryExist: %v", err) + return errors.Newf("IsRepositoryExist: %v", err) } else if has { return ErrRepoAlreadyExist{args: errutil.Args{"ownerID": u.ID, "name": newRepoName}} } repo, err := GetRepositoryByName(u.ID, oldRepoName) if err != nil { - return fmt.Errorf("GetRepositoryByName: %v", err) + return errors.Newf("GetRepositoryByName: %v", err) } // Change repository directory name if err = os.Rename(repo.RepoPath(), RepoPath(u.Name, newRepoName)); err != nil { - return fmt.Errorf("rename repository directory: %v", err) + return errors.Newf("rename repository directory: %v", err) } wikiPath := repo.WikiPath() if com.IsExist(wikiPath) { if err = os.Rename(wikiPath, WikiPath(u.Name, newRepoName)); err != nil { - return fmt.Errorf("rename repository wiki: %v", err) + return errors.Newf("rename repository wiki: %v", err) } RemoveAllWithNotice("Delete repository wiki local copy", repo.LocalWikiPath()) } @@ -1577,17 +1577,17 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e } if _, err = e.ID(repo.ID).AllCols().Update(repo); err != nil { - return fmt.Errorf("update: %v", err) + return errors.Newf("update: %v", err) } if visibilityChanged { if err = repo.getOwner(e); err != nil { - return fmt.Errorf("getOwner: %v", err) + return errors.Newf("getOwner: %v", err) } if repo.Owner.IsOrganization() { // Organization repository need to recalculate access table when visibility is changed if err = repo.recalculateTeamAccesses(e, 0); err != nil { - return fmt.Errorf("recalculateTeamAccesses: %v", err) + return errors.Newf("recalculateTeamAccesses: %v", err) } } @@ -1607,19 +1607,19 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e forkRepos, err := getRepositoriesByForkID(e, repo.ID) if err != nil { - return fmt.Errorf("getRepositoriesByForkID: %v", err) + return errors.Newf("getRepositoriesByForkID: %v", err) } for i := range forkRepos { forkRepos[i].IsPrivate = repo.IsPrivate forkRepos[i].IsUnlisted = repo.IsUnlisted if err = updateRepository(e, forkRepos[i], true); err != nil { - return fmt.Errorf("updateRepository[%d]: %v", forkRepos[i].ID, err) + return errors.Newf("updateRepository[%d]: %v", forkRepos[i].ID, err) } } // Change visibility of generated actions if _, err = e.Where("repo_id = ?", repo.ID).Cols("is_private").Update(&Action{IsPrivate: repo.IsPrivate || repo.IsUnlisted}); err != nil { - return fmt.Errorf("change action visibility of repository: %v", err) + return errors.Newf("change action visibility of repository: %v", err) } } @@ -1634,7 +1634,7 @@ func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) { } if err = updateRepository(x, repo, visibilityChanged); err != nil { - return fmt.Errorf("updateRepository: %v", err) + return errors.Newf("updateRepository: %v", err) } return sess.Commit() @@ -1695,7 +1695,7 @@ func DeleteRepository(ownerID, repoID int64) error { &HookTask{RepoID: repoID}, &LFSObject{RepoID: repoID}, ); err != nil { - return fmt.Errorf("deleteBeans: %v", err) + return errors.Newf("deleteBeans: %v", err) } // Delete comments and attachments. @@ -1728,7 +1728,7 @@ func DeleteRepository(ownerID, repoID int64) error { if repo.IsFork { if _, err = sess.Exec("UPDATE `repository` SET num_forks=num_forks-1 WHERE id=?", repo.ForkID); err != nil { - return fmt.Errorf("decrease fork count: %v", err) + return errors.Newf("decrease fork count: %v", err) } } @@ -1737,7 +1737,7 @@ func DeleteRepository(ownerID, repoID int64) error { } if err = sess.Commit(); err != nil { - return fmt.Errorf("commit: %v", err) + return errors.Newf("commit: %v", err) } // Remove repository files. @@ -1852,12 +1852,12 @@ func GetUserAndCollaborativeRepositories(userID int64) ([]*Repository, error) { Join("INNER", "collaboration", "collaboration.repo_id = repo.id"). Where("collaboration.user_id = ?", userID). Find(&repos); err != nil { - return nil, fmt.Errorf("select collaborative repositories: %v", err) + return nil, errors.Newf("select collaborative repositories: %v", err) } ownRepos := make([]*Repository, 0, 10) if err := x.Where("owner_id = ?", userID).Find(&ownRepos); err != nil { - return nil, fmt.Errorf("select own repositories: %v", err) + return nil, errors.Newf("select own repositories: %v", err) } return append(repos, ownRepos...), nil @@ -1903,7 +1903,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, count // We need all fields (repo.*) in final list but only ID (repo.id) is good enough for counting. count, err = sess.Clone().Distinct("repo.id").Count(new(Repository)) if err != nil { - return nil, 0, fmt.Errorf("Count: %v", err) + return nil, 0, errors.Newf("Count: %v", err) } if len(opts.OrderBy) > 0 { @@ -1998,7 +1998,7 @@ func gatherMissingRepoRecords() ([]*Repository, error) { return nil }); err != nil { if err2 := Handle.Notices().Create(context.TODO(), NoticeTypeRepository, fmt.Sprintf("gatherMissingRepoRecords: %v", err)); err2 != nil { - return nil, fmt.Errorf("CreateRepositoryNotice: %v", err) + return nil, errors.Newf("CreateRepositoryNotice: %v", err) } } return repos, nil @@ -2008,7 +2008,7 @@ func gatherMissingRepoRecords() ([]*Repository, error) { func DeleteMissingRepositories() error { repos, err := gatherMissingRepoRecords() if err != nil { - return fmt.Errorf("gatherMissingRepoRecords: %v", err) + return errors.Newf("gatherMissingRepoRecords: %v", err) } if len(repos) == 0 { @@ -2019,7 +2019,7 @@ func DeleteMissingRepositories() error { log.Trace("Deleting %d/%d...", repo.OwnerID, repo.ID) if err := DeleteRepository(repo.OwnerID, repo.ID); err != nil { if err2 := Handle.Notices().Create(context.TODO(), NoticeTypeRepository, fmt.Sprintf("DeleteRepository [%d]: %v", repo.ID, err)); err2 != nil { - return fmt.Errorf("CreateRepositoryNotice: %v", err) + return errors.Newf("CreateRepositoryNotice: %v", err) } } } @@ -2030,7 +2030,7 @@ func DeleteMissingRepositories() error { func ReinitMissingRepositories() error { repos, err := gatherMissingRepoRecords() if err != nil { - return fmt.Errorf("gatherMissingRepoRecords: %v", err) + return errors.Newf("gatherMissingRepoRecords: %v", err) } if len(repos) == 0 { @@ -2041,7 +2041,7 @@ func ReinitMissingRepositories() error { log.Trace("Initializing %d/%d...", repo.OwnerID, repo.ID) if err := git.Init(repo.RepoPath(), git.InitOptions{Bare: true}); err != nil { if err2 := Handle.Notices().Create(context.TODO(), NoticeTypeRepository, fmt.Sprintf("init repository [repo_id: %d]: %v", repo.ID, err)); err2 != nil { - return fmt.Errorf("create repository notice: %v", err) + return errors.Newf("create repository notice: %v", err) } } } @@ -2125,7 +2125,7 @@ func GitGcRepos() error { RepoPath(repo.Owner.Name, repo.Name), "Repository garbage collection", "git", args...) if err != nil { - return fmt.Errorf("%v: %v", err, stderr) + return errors.Newf("%v: %v", err, stderr) } return nil }) @@ -2264,7 +2264,7 @@ func (repos RepositoryList) loadAttributes(e Engine) error { } users := make([]*User, 0, len(userIDs)) if err := e.Where("id > 0").In("id", userIDs).Find(&users); err != nil { - return fmt.Errorf("find users: %v", err) + return errors.Newf("find users: %v", err) } for i := range users { userSet[users[i].ID] = users[i] @@ -2286,7 +2286,7 @@ func (repos RepositoryList) loadAttributes(e Engine) error { } baseRepos := make([]*Repository, 0, len(baseIDs)) if err := e.Where("id > 0").In("id", baseIDs).Find(&baseRepos); err != nil { - return fmt.Errorf("find base repositories: %v", err) + return errors.Newf("find base repositories: %v", err) } for i := range baseRepos { repoSet[baseRepos[i].ID] = baseRepos[i] @@ -2322,7 +2322,7 @@ func (repos MirrorRepositoryList) loadAttributes(e Engine) error { } mirrors := make([]*Mirror, 0, len(repoIDs)) if err := e.Where("id > 0").In("repo_id", repoIDs).Find(&mirrors); err != nil { - return fmt.Errorf("find mirrors: %v", err) + return errors.Newf("find mirrors: %v", err) } set := make(map[int64]*Mirror) @@ -2425,7 +2425,7 @@ func notifyWatchers(e Engine, act *Action) error { // Add feeds for user self and all watchers. watchers, err := getWatchers(e, act.RepoID) if err != nil { - return fmt.Errorf("getWatchers: %v", err) + return errors.Newf("getWatchers: %v", err) } // Reset ID to reuse Action object @@ -2434,7 +2434,7 @@ func notifyWatchers(e Engine, act *Action) error { // Add feed for actioner. act.UserID = act.ActUserID if _, err = e.Insert(act); err != nil { - return fmt.Errorf("insert new action: %v", err) + return errors.Newf("insert new action: %v", err) } for i := range watchers { @@ -2445,7 +2445,7 @@ func notifyWatchers(e Engine, act *Action) error { act.ID = 0 act.UserID = watchers[i].UserID if _, err = e.Insert(act); err != nil { - return fmt.Errorf("insert new action: %v", err) + return errors.Newf("insert new action: %v", err) } } return nil @@ -2574,22 +2574,22 @@ func ForkRepository(doer, owner *User, baseRepo *Repository, name, desc string) fmt.Sprintf("ForkRepository 'git clone': %s/%s", owner.Name, repo.Name), "git", "clone", "--bare", baseRepo.RepoPath(), repoPath) if err != nil { - return nil, fmt.Errorf("git clone: %v - %s", err, stderr) + return nil, errors.Newf("git clone: %v - %s", err, stderr) } _, stderr, err = process.ExecDir(-1, repoPath, fmt.Sprintf("ForkRepository 'git update-server-info': %s", repoPath), "git", "update-server-info") if err != nil { - return nil, fmt.Errorf("git update-server-info: %v - %s", err, stderr) + return nil, errors.Newf("git update-server-info: %v - %s", err, stderr) } if err = createDelegateHooks(repoPath); err != nil { - return nil, fmt.Errorf("createDelegateHooks: %v", err) + return nil, errors.Newf("createDelegateHooks: %v", err) } if err = sess.Commit(); err != nil { - return nil, fmt.Errorf("commit: %v", err) + return nil, errors.Newf("commit: %v", err) } // Remember visibility preference @@ -2638,17 +2638,17 @@ func (r *Repository) CreateNewBranch(oldBranch, newBranch string) (err error) { localPath := r.LocalCopyPath() if err = discardLocalRepoBranchChanges(localPath, oldBranch); err != nil { - return fmt.Errorf("discard changes in local copy [path: %s, branch: %s]: %v", localPath, oldBranch, err) + return errors.Newf("discard changes in local copy [path: %s, branch: %s]: %v", localPath, oldBranch, err) } else if err = r.UpdateLocalCopyBranch(oldBranch); err != nil { - return fmt.Errorf("update branch for local copy [path: %s, branch: %s]: %v", localPath, oldBranch, err) + return errors.Newf("update branch for local copy [path: %s, branch: %s]: %v", localPath, oldBranch, err) } if err = r.CheckoutNewBranch(oldBranch, newBranch); err != nil { - return fmt.Errorf("create new branch [base: %s, new: %s]: %v", oldBranch, newBranch, err) + return errors.Newf("create new branch [base: %s, new: %s]: %v", oldBranch, newBranch, err) } if err = git.Push(localPath, "origin", newBranch); err != nil { - return fmt.Errorf("push [branch: %s]: %v", newBranch, err) + return errors.Newf("push [branch: %s]: %v", newBranch, err) } return nil @@ -2667,9 +2667,9 @@ func (r *Repository) refreshAccesses(e Engine, accessMap map[int64]AccessMode) ( // Delete old accesses and insert new ones for repository. if _, err = e.Delete(&Access{RepoID: r.ID}); err != nil { - return fmt.Errorf("delete old accesses: %v", err) + return errors.Newf("delete old accesses: %v", err) } else if _, err = e.Insert(newAccesses); err != nil { - return fmt.Errorf("insert new accesses: %v", err) + return errors.Newf("insert new accesses: %v", err) } return nil } @@ -2678,7 +2678,7 @@ func (r *Repository) refreshAccesses(e Engine, accessMap map[int64]AccessMode) ( func (r *Repository) refreshCollaboratorAccesses(e Engine, accessMap map[int64]AccessMode) error { collaborations, err := r.getCollaborations(e) if err != nil { - return fmt.Errorf("getCollaborations: %v", err) + return errors.Newf("getCollaborations: %v", err) } for _, c := range collaborations { accessMap[c.UserID] = c.Mode @@ -2695,11 +2695,11 @@ func (r *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err err if err = r.getOwner(e); err != nil { return err } else if !r.Owner.IsOrganization() { - return fmt.Errorf("owner is not an organization: %d", r.OwnerID) + return errors.Newf("owner is not an organization: %d", r.OwnerID) } if err = r.refreshCollaboratorAccesses(e, accessMap); err != nil { - return fmt.Errorf("refreshCollaboratorAccesses: %v", err) + return errors.Newf("refreshCollaboratorAccesses: %v", err) } if err = r.Owner.getTeams(e); err != nil { @@ -2730,7 +2730,7 @@ func (r *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err err } if err = t.getMembers(e); err != nil { - return fmt.Errorf("getMembers '%d': %v", t.ID, err) + return errors.Newf("getMembers '%d': %v", t.ID, err) } for _, m := range t.Members { accessMap[m.ID] = maxAccessMode(accessMap[m.ID], t.Authorize) @@ -2747,7 +2747,7 @@ func (r *Repository) recalculateAccesses(e Engine) error { accessMap := make(map[int64]AccessMode, 10) if err := r.refreshCollaboratorAccesses(e, accessMap); err != nil { - return fmt.Errorf("refreshCollaboratorAccesses: %v", err) + return errors.Newf("refreshCollaboratorAccesses: %v", err) } return r.refreshAccesses(e, accessMap) } diff --git a/internal/database/repo_branch.go b/internal/database/repo_branch.go index 64f5f0166..97d9ec64a 100644 --- a/internal/database/repo_branch.go +++ b/internal/database/repo_branch.go @@ -5,6 +5,7 @@ import ( "fmt" "strings" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" "github.com/unknwon/com" @@ -23,12 +24,12 @@ type Branch struct { func GetBranchesByPath(path string) ([]*Branch, error) { gitRepo, err := git.Open(path) if err != nil { - return nil, fmt.Errorf("open repository: %v", err) + return nil, errors.Newf("open repository: %v", err) } names, err := gitRepo.Branches() if err != nil { - return nil, fmt.Errorf("list branches") + return nil, errors.Newf("list branches") } branches := make([]*Branch, len(names)) @@ -77,7 +78,7 @@ func (r *Repository) GetBranches() ([]*Branch, error) { func (br *Branch) GetCommit() (*git.Commit, error) { gitRepo, err := git.Open(br.RepoPath) if err != nil { - return nil, fmt.Errorf("open repository: %v", err) + return nil, errors.Newf("open repository: %v", err) } return gitRepo.BranchCommit(br.Name) } @@ -143,12 +144,12 @@ func UpdateProtectBranch(protectBranch *ProtectBranch) (err error) { if protectBranch.ID == 0 { if _, err = sess.Insert(protectBranch); err != nil { - return fmt.Errorf("insert: %v", err) + return errors.Newf("insert: %v", err) } } if _, err = sess.ID(protectBranch.ID).AllCols().Update(protectBranch); err != nil { - return fmt.Errorf("update: %v", err) + return errors.Newf("update: %v", err) } return sess.Commit() @@ -160,9 +161,9 @@ func UpdateProtectBranch(protectBranch *ProtectBranch) (err error) { // to avoid unnecessary whitelist delete and regenerate. func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whitelistUserIDs, whitelistTeamIDs string) (err error) { if err = repo.GetOwner(); err != nil { - return fmt.Errorf("GetOwner: %v", err) + return errors.Newf("GetOwner: %v", err) } else if !repo.Owner.IsOrganization() { - return fmt.Errorf("expect repository owner to be an organization") + return errors.Newf("expect repository owner to be an organization") } hasUsersChanged := false @@ -194,7 +195,7 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit teamIDs := tool.StringsToInt64s(strings.Split(whitelistTeamIDs, ",")) teams, err := GetTeamsHaveAccessToRepo(repo.OwnerID, repo.ID, AccessModeWrite) if err != nil { - return fmt.Errorf("GetTeamsHaveAccessToRepo [org_id: %d, repo_id: %d]: %v", repo.OwnerID, repo.ID, err) + return errors.Newf("GetTeamsHaveAccessToRepo [org_id: %d, repo_id: %d]: %v", repo.OwnerID, repo.ID, err) } validTeamIDs = make([]int64, 0, len(teams)) for i := range teams { @@ -209,7 +210,7 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit // Make sure protectBranch.ID is not 0 for whitelists if protectBranch.ID == 0 { if _, err = x.Insert(protectBranch); err != nil { - return fmt.Errorf("insert: %v", err) + return errors.Newf("insert: %v", err) } } @@ -227,7 +228,7 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit for _, teamID := range validTeamIDs { members, err := GetTeamMembers(teamID) if err != nil { - return fmt.Errorf("GetTeamMembers [team_id: %d]: %v", teamID, err) + return errors.Newf("GetTeamMembers [team_id: %d]: %v", teamID, err) } for i := range members { @@ -253,15 +254,15 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit } if _, err = sess.ID(protectBranch.ID).AllCols().Update(protectBranch); err != nil { - return fmt.Errorf("Update: %v", err) + return errors.Newf("Update: %v", err) } // Refresh whitelists if hasUsersChanged || hasTeamsChanged { if _, err = sess.Delete(&ProtectBranchWhitelist{ProtectBranchID: protectBranch.ID}); err != nil { - return fmt.Errorf("delete old protect branch whitelists: %v", err) + return errors.Newf("delete old protect branch whitelists: %v", err) } else if _, err = sess.Insert(whitelists); err != nil { - return fmt.Errorf("insert new protect branch whitelists: %v", err) + return errors.Newf("insert new protect branch whitelists: %v", err) } } diff --git a/internal/database/repo_collaboration.go b/internal/database/repo_collaboration.go index 4ab7c9cda..8c59f0742 100644 --- a/internal/database/repo_collaboration.go +++ b/internal/database/repo_collaboration.go @@ -1,10 +1,9 @@ package database import ( - "fmt" - log "unknwon.dev/clog/v2" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" ) @@ -71,7 +70,7 @@ func (r *Repository) AddCollaborator(u *User) error { if _, err = sess.Insert(collaboration); err != nil { return err } else if err = r.recalculateAccesses(sess); err != nil { - return fmt.Errorf("recalculateAccesses [repo_id: %v]: %v", r.ID, err) + return errors.Newf("recalculateAccesses [repo_id: %v]: %v", r.ID, err) } return sess.Commit() @@ -102,7 +101,7 @@ func (c *Collaborator) APIFormat() *api.Collaborator { func (r *Repository) getCollaborators(e Engine) ([]*Collaborator, error) { collaborations, err := r.getCollaborations(e) if err != nil { - return nil, fmt.Errorf("getCollaborations: %v", err) + return nil, errors.Newf("getCollaborations: %v", err) } collaborators := make([]*Collaborator, len(collaborations)) @@ -137,7 +136,7 @@ func (r *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessMode } has, err := x.Get(collaboration) if err != nil { - return fmt.Errorf("get collaboration: %v", err) + return errors.Newf("get collaboration: %v", err) } else if !has { return nil } @@ -151,7 +150,7 @@ func (r *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessMode if r.Owner.IsOrganization() { teams, err := GetUserTeams(r.OwnerID, userID) if err != nil { - return fmt.Errorf("GetUserTeams: [org_id: %d, user_id: %d]: %v", r.OwnerID, userID, err) + return errors.Newf("GetUserTeams: [org_id: %d, user_id: %d]: %v", r.OwnerID, userID, err) } for i := range teams { if mode < teams[i].Authorize { @@ -167,7 +166,7 @@ func (r *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessMode } if _, err = sess.ID(collaboration.ID).AllCols().Update(collaboration); err != nil { - return fmt.Errorf("update collaboration: %v", err) + return errors.Newf("update collaboration: %v", err) } access := &Access{ @@ -176,7 +175,7 @@ func (r *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessMode } has, err = sess.Get(access) if err != nil { - return fmt.Errorf("get access record: %v", err) + return errors.Newf("get access record: %v", err) } if has { _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, userID, r.ID) @@ -185,7 +184,7 @@ func (r *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessMode _, err = sess.Insert(access) } if err != nil { - return fmt.Errorf("update/insert access table: %v", err) + return errors.Newf("update/insert access table: %v", err) } return sess.Commit() diff --git a/internal/database/repo_editor.go b/internal/database/repo_editor.go index 7226882ca..f326eaa65 100644 --- a/internal/database/repo_editor.go +++ b/internal/database/repo_editor.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" gouuid "github.com/satori/go.uuid" "github.com/unknwon/com" @@ -97,7 +97,7 @@ func discardLocalRepoBranchChanges(localPath, branch string) error { rev := "origin/" + branch if err := git.Reset(localPath, rev, git.ResetOptions{Hard: true}); err != nil { - return fmt.Errorf("reset [revision: %s]: %v", rev, err) + return errors.Newf("reset [revision: %s]: %v", rev, err) } return nil } @@ -112,7 +112,7 @@ func (r *Repository) CheckoutNewBranch(oldBranch, newBranch string) error { BaseBranch: oldBranch, Timeout: time.Duration(conf.Git.Timeout.Pull) * time.Second, }); err != nil { - return fmt.Errorf("checkout [base: %s, new: %s]: %v", oldBranch, newBranch, err) + return errors.Newf("checkout [base: %s, new: %s]: %v", oldBranch, newBranch, err) } return nil } @@ -151,9 +151,9 @@ func (r *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) erro defer repoWorkingPool.CheckOut(com.ToStr(r.ID)) if err := r.DiscardLocalRepoBranchChanges(opts.OldBranch); err != nil { - return fmt.Errorf("discard local repo branch[%s] changes: %v", opts.OldBranch, err) + return errors.Newf("discard local repo branch[%s] changes: %v", opts.OldBranch, err) } else if err = r.UpdateLocalCopyBranch(opts.OldBranch); err != nil { - return fmt.Errorf("update local copy branch[%s]: %v", opts.OldBranch, err) + return errors.Newf("update local copy branch[%s]: %v", opts.OldBranch, err) } localPath := r.LocalCopyPath() @@ -176,12 +176,12 @@ func (r *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) erro if err := git.DeleteBranch(localPath, opts.NewBranch, git.DeleteBranchOptions{ Force: true, }); err != nil { - return fmt.Errorf("delete branch %q: %v", opts.NewBranch, err) + return errors.Newf("delete branch %q: %v", opts.NewBranch, err) } } if err := r.CheckoutNewBranch(opts.OldBranch, opts.NewBranch); err != nil { - return fmt.Errorf("checkout new branch[%s] from old branch[%s]: %v", opts.NewBranch, opts.OldBranch, err) + return errors.Newf("checkout new branch[%s] from old branch[%s]: %v", opts.NewBranch, opts.OldBranch, err) } } @@ -204,11 +204,11 @@ func (r *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) erro } if err := os.WriteFile(newFilePath, []byte(opts.Content), 0o600); err != nil { - return fmt.Errorf("write file: %v", err) + return errors.Newf("write file: %v", err) } if err := git.Add(localPath, git.AddOptions{All: true}); err != nil { - return fmt.Errorf("git add --all: %v", err) + return errors.Newf("git add --all: %v", err) } err := git.CreateCommit( localPath, @@ -220,7 +220,7 @@ func (r *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) erro opts.Message, ) if err != nil { - return fmt.Errorf("commit changes on %q: %v", localPath, err) + return errors.Newf("commit changes on %q: %v", localPath, err) } err = git.Push(localPath, "origin", opts.NewBranch, @@ -238,7 +238,7 @@ func (r *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) erro }, ) if err != nil { - return fmt.Errorf("git push origin %s: %v", opts.NewBranch, err) + return errors.Newf("git push origin %s: %v", opts.NewBranch, err) } return nil } @@ -254,9 +254,9 @@ func (r *Repository) GetDiffPreview(branch, treePath, content string) (*gitutil. defer repoWorkingPool.CheckOut(com.ToStr(r.ID)) if err := r.DiscardLocalRepoBranchChanges(branch); err != nil { - return nil, fmt.Errorf("discard local repo branch[%s] changes: %v", branch, err) + return nil, errors.Newf("discard local repo branch[%s] changes: %v", branch, err) } else if err = r.UpdateLocalCopyBranch(branch); err != nil { - return nil, fmt.Errorf("update local copy branch[%s]: %v", branch, err) + return nil, errors.Newf("update local copy branch[%s]: %v", branch, err) } localPath := r.LocalCopyPath() @@ -271,7 +271,7 @@ func (r *Repository) GetDiffPreview(branch, treePath, content string) (*gitutil. if err := os.MkdirAll(path.Dir(filePath), os.ModePerm); err != nil { return nil, errors.Wrap(err, "create parent directories") } else if err = os.WriteFile(filePath, []byte(content), 0o600); err != nil { - return nil, fmt.Errorf("write file: %v", err) + return nil, errors.Newf("write file: %v", err) } // 🚨 SECURITY: Prevent including unintended options in the path to the Git command. @@ -281,11 +281,11 @@ func (r *Repository) GetDiffPreview(branch, treePath, content string) (*gitutil. stdout, err := cmd.StdoutPipe() if err != nil { - return nil, fmt.Errorf("get stdout pipe: %v", err) + return nil, errors.Newf("get stdout pipe: %v", err) } if err = cmd.Start(); err != nil { - return nil, fmt.Errorf("start: %v", err) + return nil, errors.Newf("start: %v", err) } pid := process.Add(fmt.Sprintf("GetDiffPreview [repo_path: %s]", r.RepoPath()), cmd) @@ -293,10 +293,10 @@ func (r *Repository) GetDiffPreview(branch, treePath, content string) (*gitutil. diff, err := gitutil.ParseDiff(stdout, conf.Git.MaxDiffFiles, conf.Git.MaxDiffLines, conf.Git.MaxDiffLineChars) if err != nil { - return nil, fmt.Errorf("parse diff: %v", err) + return nil, errors.Newf("parse diff: %v", err) } if err = cmd.Wait(); err != nil { - return nil, fmt.Errorf("wait: %v", err) + return nil, errors.Newf("wait: %v", err) } return diff, nil } @@ -327,9 +327,9 @@ func (r *Repository) DeleteRepoFile(doer *User, opts DeleteRepoFileOptions) (err defer repoWorkingPool.CheckOut(com.ToStr(r.ID)) if err = r.DiscardLocalRepoBranchChanges(opts.OldBranch); err != nil { - return fmt.Errorf("discard local r branch[%s] changes: %v", opts.OldBranch, err) + return errors.Newf("discard local r branch[%s] changes: %v", opts.OldBranch, err) } else if err = r.UpdateLocalCopyBranch(opts.OldBranch); err != nil { - return fmt.Errorf("update local copy branch[%s]: %v", opts.OldBranch, err) + return errors.Newf("update local copy branch[%s]: %v", opts.OldBranch, err) } localPath := r.LocalCopyPath() @@ -342,17 +342,17 @@ func (r *Repository) DeleteRepoFile(doer *User, opts DeleteRepoFileOptions) (err if opts.OldBranch != opts.NewBranch { if err := r.CheckoutNewBranch(opts.OldBranch, opts.NewBranch); err != nil { - return fmt.Errorf("checkout new branch[%s] from old branch[%s]: %v", opts.NewBranch, opts.OldBranch, err) + return errors.Newf("checkout new branch[%s] from old branch[%s]: %v", opts.NewBranch, opts.OldBranch, err) } } filePath := path.Join(localPath, opts.TreePath) if err = os.Remove(filePath); err != nil { - return fmt.Errorf("remove file %q: %v", opts.TreePath, err) + return errors.Newf("remove file %q: %v", opts.TreePath, err) } if err = git.Add(localPath, git.AddOptions{All: true}); err != nil { - return fmt.Errorf("git add --all: %v", err) + return errors.Newf("git add --all: %v", err) } err = git.CreateCommit( @@ -365,7 +365,7 @@ func (r *Repository) DeleteRepoFile(doer *User, opts DeleteRepoFileOptions) (err opts.Message, ) if err != nil { - return fmt.Errorf("commit changes to %q: %v", localPath, err) + return errors.Newf("commit changes to %q: %v", localPath, err) } err = git.Push(localPath, "origin", opts.NewBranch, @@ -383,7 +383,7 @@ func (r *Repository) DeleteRepoFile(doer *User, opts DeleteRepoFileOptions) (err }, ) if err != nil { - return fmt.Errorf("git push origin %s: %v", opts.NewBranch, err) + return errors.Newf("git push origin %s: %v", opts.NewBranch, err) } return nil } @@ -416,7 +416,7 @@ func (upload *Upload) LocalPath() string { // NewUpload creates a new upload object. func NewUpload(name string, buf []byte, file multipart.File) (_ *Upload, err error) { if tool.IsMaliciousPath(name) { - return nil, fmt.Errorf("malicious path detected: %s", name) + return nil, errors.Newf("malicious path detected: %s", name) } upload := &Upload{ @@ -426,19 +426,19 @@ func NewUpload(name string, buf []byte, file multipart.File) (_ *Upload, err err localPath := upload.LocalPath() if err = os.MkdirAll(path.Dir(localPath), os.ModePerm); err != nil { - return nil, fmt.Errorf("mkdir all: %v", err) + return nil, errors.Newf("mkdir all: %v", err) } fw, err := os.Create(localPath) if err != nil { - return nil, fmt.Errorf("create: %v", err) + return nil, errors.Newf("create: %v", err) } defer func() { _ = fw.Close() }() if _, err = fw.Write(buf); err != nil { - return nil, fmt.Errorf("write: %v", err) + return nil, errors.Newf("write: %v", err) } else if _, err = io.Copy(fw, file); err != nil { - return nil, fmt.Errorf("copy: %v", err) + return nil, errors.Newf("copy: %v", err) } if _, err := x.Insert(upload); err != nil { @@ -485,7 +485,7 @@ func DeleteUploads(uploads ...*Upload) (err error) { ids[i] = uploads[i].ID } if _, err = sess.In("id", ids).Delete(new(Upload)); err != nil { - return fmt.Errorf("delete uploads: %v", err) + return errors.Newf("delete uploads: %v", err) } for _, upload := range uploads { @@ -495,7 +495,7 @@ func DeleteUploads(uploads ...*Upload) (err error) { } if err := os.Remove(localPath); err != nil { - return fmt.Errorf("remove upload: %v", err) + return errors.Newf("remove upload: %v", err) } } @@ -512,11 +512,11 @@ func DeleteUploadByUUID(uuid string) error { if IsErrUploadNotExist(err) { return nil } - return fmt.Errorf("get upload by UUID[%s]: %v", uuid, err) + return errors.Newf("get upload by UUID[%s]: %v", uuid, err) } if err := DeleteUpload(upload); err != nil { - return fmt.Errorf("delete upload: %v", err) + return errors.Newf("delete upload: %v", err) } return nil @@ -558,21 +558,21 @@ func (r *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) err uploads, err := GetUploadsByUUIDs(opts.Files) if err != nil { - return fmt.Errorf("get uploads by UUIDs[%v]: %v", opts.Files, err) + return errors.Newf("get uploads by UUIDs[%v]: %v", opts.Files, err) } repoWorkingPool.CheckIn(com.ToStr(r.ID)) defer repoWorkingPool.CheckOut(com.ToStr(r.ID)) if err = r.DiscardLocalRepoBranchChanges(opts.OldBranch); err != nil { - return fmt.Errorf("discard local r branch[%s] changes: %v", opts.OldBranch, err) + return errors.Newf("discard local r branch[%s] changes: %v", opts.OldBranch, err) } else if err = r.UpdateLocalCopyBranch(opts.OldBranch); err != nil { - return fmt.Errorf("update local copy branch[%s]: %v", opts.OldBranch, err) + return errors.Newf("update local copy branch[%s]: %v", opts.OldBranch, err) } if opts.OldBranch != opts.NewBranch { if err = r.CheckoutNewBranch(opts.OldBranch, opts.NewBranch); err != nil { - return fmt.Errorf("checkout new branch[%s] from old branch[%s]: %v", opts.NewBranch, opts.OldBranch, err) + return errors.Newf("checkout new branch[%s] from old branch[%s]: %v", opts.NewBranch, opts.OldBranch, err) } } @@ -602,16 +602,16 @@ func (r *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) err // 🚨 SECURITY: Prevent updating files in surprising place, check if the target // is a symlink. if osutil.IsSymlink(targetPath) { - return fmt.Errorf("cannot overwrite symbolic link: %s", upload.Name) + return errors.Newf("cannot overwrite symbolic link: %s", upload.Name) } if err = com.Copy(tmpPath, targetPath); err != nil { - return fmt.Errorf("copy: %v", err) + return errors.Newf("copy: %v", err) } } if err = git.Add(localPath, git.AddOptions{All: true}); err != nil { - return fmt.Errorf("git add --all: %v", err) + return errors.Newf("git add --all: %v", err) } err = git.CreateCommit( @@ -624,7 +624,7 @@ func (r *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) err opts.Message, ) if err != nil { - return fmt.Errorf("commit changes on %q: %v", localPath, err) + return errors.Newf("commit changes on %q: %v", localPath, err) } err = git.Push(localPath, "origin", opts.NewBranch, @@ -642,7 +642,7 @@ func (r *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) err }, ) if err != nil { - return fmt.Errorf("git push origin %s: %v", opts.NewBranch, err) + return errors.Newf("git push origin %s: %v", opts.NewBranch, err) } return DeleteUploads(uploads...) diff --git a/internal/database/repo_tag.go b/internal/database/repo_tag.go index efb9a7ff2..6c4cb385e 100644 --- a/internal/database/repo_tag.go +++ b/internal/database/repo_tag.go @@ -1,8 +1,7 @@ package database import ( - "fmt" - + "github.com/cockroachdb/errors" "github.com/gogs/git-module" ) @@ -17,7 +16,7 @@ type Tag struct { func (ta *Tag) GetCommit() (*git.Commit, error) { gitRepo, err := git.Open(ta.RepoPath) if err != nil { - return nil, fmt.Errorf("open repository: %v", err) + return nil, errors.Newf("open repository: %v", err) } return gitRepo.TagCommit(ta.Name) } @@ -25,12 +24,12 @@ func (ta *Tag) GetCommit() (*git.Commit, error) { func GetTagsByPath(path string) ([]*Tag, error) { gitRepo, err := git.Open(path) if err != nil { - return nil, fmt.Errorf("open repository: %v", err) + return nil, errors.Newf("open repository: %v", err) } names, err := gitRepo.Tags() if err != nil { - return nil, fmt.Errorf("list tags") + return nil, errors.Newf("list tags: %v", err) } tags := make([]*Tag, len(names)) diff --git a/internal/database/repositories.go b/internal/database/repositories.go index ddd97420f..3e092d2aa 100644 --- a/internal/database/repositories.go +++ b/internal/database/repositories.go @@ -6,8 +6,8 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" - "github.com/pkg/errors" "gorm.io/gorm" "gogs.io/gogs/internal/errutil" diff --git a/internal/database/schemadoc/main.go b/internal/database/schemadoc/main.go index bd2af0cf7..e98ce9329 100644 --- a/internal/database/schemadoc/main.go +++ b/internal/database/schemadoc/main.go @@ -7,8 +7,8 @@ import ( "sort" "strings" + "github.com/cockroachdb/errors" "github.com/olekukonko/tablewriter" - "github.com/pkg/errors" "gopkg.in/DATA-DOG/go-sqlmock.v2" "gorm.io/driver/mysql" "gorm.io/driver/postgres" diff --git a/internal/database/ssh_key.go b/internal/database/ssh_key.go index d71cd1792..b03a013d1 100644 --- a/internal/database/ssh_key.go +++ b/internal/database/ssh_key.go @@ -4,7 +4,6 @@ import ( "context" "encoding/base64" "encoding/binary" - "errors" "fmt" "math/big" "os" @@ -14,6 +13,7 @@ import ( "sync" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" "golang.org/x/crypto/ssh" log "unknwon.dev/clog/v2" @@ -92,12 +92,12 @@ func (k *PublicKey) IsDeployKey() bool { func extractTypeFromBase64Key(key string) (string, error) { b, err := base64.StdEncoding.DecodeString(key) if err != nil || len(b) < 4 { - return "", fmt.Errorf("invalid key format: %v", err) + return "", errors.Newf("invalid key format: %v", err) } keyLength := int(binary.BigEndian.Uint32(b)) if len(b) < 4+keyLength { - return "", fmt.Errorf("invalid key format: not enough length %d", keyLength) + return "", errors.Newf("invalid key format: not enough length %d", keyLength) } return string(b[4 : 4+keyLength]), nil @@ -141,12 +141,12 @@ func parseKeyString(content string) (string, error) { // If keyType is not given, extract it from content. If given, validate it. t, err := extractTypeFromBase64Key(keyContent) if err != nil { - return "", fmt.Errorf("extractTypeFromBase64Key: %v", err) + return "", errors.Newf("extractTypeFromBase64Key: %v", err) } if keyType == "" { keyType = t } else if keyType != t { - return "", fmt.Errorf("key type and content does not match: %s - %s", keyType, t) + return "", errors.Newf("key type and content does not match: %s - %s", keyType, t) } } else { // Parse SSH2 file format. @@ -166,7 +166,7 @@ func parseKeyString(content string) (string, error) { t, err := extractTypeFromBase64Key(keyContent) if err != nil { - return "", fmt.Errorf("extractTypeFromBase64Key: %v", err) + return "", errors.Newf("extractTypeFromBase64Key: %v", err) } keyType = t } @@ -178,12 +178,12 @@ func parseKeyString(content string) (string, error) { func writeTmpKeyFile(content string) (string, error) { tmpFile, err := os.CreateTemp(conf.SSH.KeyTestPath, "gogs_keytest") if err != nil { - return "", fmt.Errorf("TempFile: %v", err) + return "", errors.Newf("TempFile: %v", err) } defer tmpFile.Close() if _, err = tmpFile.WriteString(content); err != nil { - return "", fmt.Errorf("WriteString: %v", err) + return "", errors.Newf("WriteString: %v", err) } return tmpFile.Name(), nil } @@ -192,13 +192,13 @@ func writeTmpKeyFile(content string) (string, error) { func SSHKeyGenParsePublicKey(key string) (string, int, error) { tmpName, err := writeTmpKeyFile(key) if err != nil { - return "", 0, fmt.Errorf("writeTmpKeyFile: %v", err) + return "", 0, errors.Newf("writeTmpKeyFile: %v", err) } defer os.Remove(tmpName) stdout, stderr, err := process.Exec("SSHKeyGenParsePublicKey", conf.SSH.KeygenPath, "-lf", tmpName) if err != nil { - return "", 0, fmt.Errorf("fail to parse public key: %s - %s", err, stderr) + return "", 0, errors.Newf("fail to parse public key: %s - %s", err, stderr) } if strings.Contains(stdout, "is not a public key file") { return "", 0, ErrKeyUnableVerify{stdout} @@ -206,7 +206,7 @@ func SSHKeyGenParsePublicKey(key string) (string, int, error) { fields := strings.Split(stdout, " ") if len(fields) < 4 { - return "", 0, fmt.Errorf("invalid public key line: %s", stdout) + return "", 0, errors.Newf("invalid public key line: %s", stdout) } keyType := strings.Trim(fields[len(fields)-1], "()\r\n") @@ -217,7 +217,7 @@ func SSHKeyGenParsePublicKey(key string) (string, int, error) { func SSHNativeParsePublicKey(keyLine string) (string, int, error) { fields := strings.Fields(keyLine) if len(fields) < 2 { - return "", 0, fmt.Errorf("not enough fields in public key line: %s", keyLine) + return "", 0, errors.Newf("not enough fields in public key line: %s", keyLine) } raw, err := base64.StdEncoding.DecodeString(fields[1]) @@ -230,7 +230,7 @@ func SSHNativeParsePublicKey(keyLine string) (string, int, error) { if strings.Contains(err.Error(), "ssh: unknown key algorithm") { return "", 0, ErrKeyUnableVerify{err.Error()} } - return "", 0, fmt.Errorf("ParsePublicKey: %v", err) + return "", 0, errors.Newf("ParsePublicKey: %v", err) } // The ssh library can parse the key, so next we find out what key exactly we have. @@ -265,7 +265,7 @@ func SSHNativeParsePublicKey(keyLine string) (string, int, error) { case ssh.KeyAlgoED25519: return "ed25519", 256, nil } - return "", 0, fmt.Errorf("unsupported key length detection for type: %s", pkey.Type()) + return "", 0, errors.Newf("unsupported key length detection for type: %s", pkey.Type()) } // CheckPublicKeyString checks if the given public key string is recognized by SSH. @@ -305,16 +305,16 @@ func CheckPublicKeyString(content string) (_ string, err error) { keyType, length, err = SSHKeyGenParsePublicKey(content) } if err != nil { - return "", fmt.Errorf("%s: %v", fnName, err) + return "", errors.Newf("%s: %v", fnName, err) } log.Trace("Key info [native: %v]: %s-%d", conf.SSH.StartBuiltinServer, keyType, length) if minLen, found := conf.SSH.MinimumKeySizes[keyType]; found && length >= minLen { return content, nil } else if found && length < minLen { - return "", fmt.Errorf("key length is not enough: got %d, needs %d", length, minLen) + return "", errors.Newf("key length is not enough: got %d, needs %d", length, minLen) } - return "", fmt.Errorf("key type is not allowed: %s", keyType) + return "", errors.Newf("key type is not allowed: %s", keyType) } // appendAuthorizedKeysToFile appends new SSH keys' content to authorized_keys file. @@ -378,7 +378,7 @@ func addKey(e Engine, key *PublicKey) (err error) { stdout, stderr, err := process.Exec("AddPublicKey", conf.SSH.KeygenPath, "-lf", tmpPath) if err != nil { - return fmt.Errorf("fail to parse public key: %s - %s", err, stderr) + return errors.Newf("fail to parse public key: %s - %s", err, stderr) } else if len(stdout) < 2 { return errors.New("not enough output for calculating fingerprint: " + stdout) } @@ -425,7 +425,7 @@ func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) { Type: KeyTypeUser, } if err = addKey(sess, key); err != nil { - return nil, fmt.Errorf("addKey: %v", err) + return nil, errors.Newf("addKey: %v", err) } return key, sess.Commit() @@ -486,7 +486,7 @@ func DeletePublicKey(doer *User, id int64) (err error) { if IsErrKeyNotExist(err) { return nil } - return fmt.Errorf("GetPublicKeyByID: %v", err) + return errors.Newf("GetPublicKeyByID: %v", err) } // Check if user has access to delete this key. @@ -671,13 +671,13 @@ func AddDeployKey(repoID int64, name, content string) (*DeployKey, error) { // First time use this deploy key. if !has { if err = addKey(sess, pkey); err != nil { - return nil, fmt.Errorf("addKey: %v", err) + return nil, errors.Newf("addKey: %v", err) } } key, err := addDeployKey(sess, pkey.ID, repoID, name, pkey.Fingerprint) if err != nil { - return nil, fmt.Errorf("addDeployKey: %v", err) + return nil, errors.Newf("addDeployKey: %v", err) } return key, sess.Commit() @@ -742,14 +742,14 @@ func DeleteDeployKey(doer *User, id int64) error { if IsErrDeployKeyNotExist(err) { return nil } - return fmt.Errorf("GetDeployKeyByID: %v", err) + return errors.Newf("GetDeployKeyByID: %v", err) } // Check if user has access to delete this key. if !doer.IsAdmin { repo, err := GetRepositoryByID(key.RepoID) if err != nil { - return fmt.Errorf("GetRepositoryByID: %v", err) + return errors.Newf("GetRepositoryByID: %v", err) } if !Handle.Permissions().Authorize(context.TODO(), doer.ID, repo.ID, AccessModeAdmin, AccessModeOptions{ @@ -768,7 +768,7 @@ func DeleteDeployKey(doer *User, id int64) error { } if _, err = sess.ID(key.ID).Delete(new(DeployKey)); err != nil { - return fmt.Errorf("delete deploy key [%d]: %v", key.ID, err) + return errors.Newf("delete deploy key [%d]: %v", key.ID, err) } // Check if this is the last reference to same key content. diff --git a/internal/database/two_factor.go b/internal/database/two_factor.go index 3f345d80e..470652d29 100644 --- a/internal/database/two_factor.go +++ b/internal/database/two_factor.go @@ -5,6 +5,7 @@ import ( "fmt" "time" + "github.com/cockroachdb/errors" "github.com/pquerna/otp/totp" "github.com/unknwon/com" @@ -26,11 +27,11 @@ type TwoFactor struct { func (t *TwoFactor) ValidateTOTP(passcode string) (bool, error) { secret, err := base64.StdEncoding.DecodeString(t.Secret) if err != nil { - return false, fmt.Errorf("DecodeString: %v", err) + return false, errors.Newf("DecodeString: %v", err) } decryptSecret, err := com.AESGCMDecrypt(cryptoutil.MD5Bytes(conf.Security.SecretKey), secret) if err != nil { - return false, fmt.Errorf("AESGCMDecrypt: %v", err) + return false, errors.Newf("AESGCMDecrypt: %v", err) } return totp.Validate(passcode, string(decryptSecret)), nil } @@ -44,9 +45,9 @@ func DeleteTwoFactor(userID int64) (err error) { } if _, err = sess.Where("user_id = ?", userID).Delete(new(TwoFactor)); err != nil { - return fmt.Errorf("delete two-factor: %v", err) + return errors.Newf("delete two-factor: %v", err) } else if err = deleteRecoveryCodesByUserID(sess, userID); err != nil { - return fmt.Errorf("deleteRecoveryCodesByUserID: %v", err) + return errors.Newf("deleteRecoveryCodesByUserID: %v", err) } return sess.Commit() @@ -75,7 +76,7 @@ func deleteRecoveryCodesByUserID(e Engine, userID int64) error { func RegenerateRecoveryCodes(userID int64) error { recoveryCodes, err := generateRecoveryCodes(userID, 10) if err != nil { - return fmt.Errorf("generateRecoveryCodes: %v", err) + return errors.Newf("generateRecoveryCodes: %v", err) } sess := x.NewSession() @@ -85,9 +86,9 @@ func RegenerateRecoveryCodes(userID int64) error { } if err = deleteRecoveryCodesByUserID(sess, userID); err != nil { - return fmt.Errorf("deleteRecoveryCodesByUserID: %v", err) + return errors.Newf("deleteRecoveryCodesByUserID: %v", err) } else if _, err = sess.Insert(recoveryCodes); err != nil { - return fmt.Errorf("insert new recovery codes: %v", err) + return errors.Newf("insert new recovery codes: %v", err) } return sess.Commit() @@ -111,14 +112,14 @@ func UseRecoveryCode(_ int64, code string) error { recoveryCode := new(TwoFactorRecoveryCode) has, err := x.Where("code = ?", code).And("is_used = ?", false).Get(recoveryCode) if err != nil { - return fmt.Errorf("get unused code: %v", err) + return errors.Newf("get unused code: %v", err) } else if !has { return ErrTwoFactorRecoveryCodeNotFound{Code: code} } recoveryCode.IsUsed = true if _, err = x.Id(recoveryCode.ID).Cols("is_used").Update(recoveryCode); err != nil { - return fmt.Errorf("mark code as used: %v", err) + return errors.Newf("mark code as used: %v", err) } return nil diff --git a/internal/database/two_factors.go b/internal/database/two_factors.go index 803de7d16..f4a140bfe 100644 --- a/internal/database/two_factors.go +++ b/internal/database/two_factors.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/gorm" log "unknwon.dev/clog/v2" diff --git a/internal/database/update.go b/internal/database/update.go index 9e24e3964..a43c5fafb 100644 --- a/internal/database/update.go +++ b/internal/database/update.go @@ -2,12 +2,11 @@ package database import ( "context" - "fmt" "os/exec" "strings" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" - "github.com/pkg/errors" ) // CommitToPushCommit transforms a git.Commit to PushCommit type. @@ -53,7 +52,7 @@ func PushUpdate(opts PushUpdateOptions) (err error) { isNewRef := strings.HasPrefix(opts.OldCommitID, git.EmptyID) isDelRef := strings.HasPrefix(opts.NewCommitID, git.EmptyID) if isNewRef && isDelRef { - return fmt.Errorf("both old and new revisions are %q", git.EmptyID) + return errors.Newf("both old and new revisions are %q", git.EmptyID) } repoPath := RepoPath(opts.RepoUserName, opts.RepoName) @@ -61,26 +60,26 @@ func PushUpdate(opts PushUpdateOptions) (err error) { gitUpdate := exec.Command("git", "update-server-info") gitUpdate.Dir = repoPath if err = gitUpdate.Run(); err != nil { - return fmt.Errorf("run 'git update-server-info': %v", err) + return errors.Newf("run 'git update-server-info': %v", err) } gitRepo, err := git.Open(repoPath) if err != nil { - return fmt.Errorf("open repository: %v", err) + return errors.Newf("open repository: %v", err) } owner, err := Handle.Users().GetByUsername(ctx, opts.RepoUserName) if err != nil { - return fmt.Errorf("GetUserByName: %v", err) + return errors.Newf("GetUserByName: %v", err) } repo, err := GetRepositoryByName(owner.ID, opts.RepoName) if err != nil { - return fmt.Errorf("GetRepositoryByName: %v", err) + return errors.Newf("GetRepositoryByName: %v", err) } if err = repo.UpdateSize(); err != nil { - return fmt.Errorf("UpdateSize: %v", err) + return errors.Newf("UpdateSize: %v", err) } // Push tags @@ -106,19 +105,19 @@ func PushUpdate(opts PushUpdateOptions) (err error) { // Push new branch newCommit, err := gitRepo.CatFileCommit(opts.NewCommitID) if err != nil { - return fmt.Errorf("GetCommit [commit_id: %s]: %v", opts.NewCommitID, err) + return errors.Newf("GetCommit [commit_id: %s]: %v", opts.NewCommitID, err) } if isNewRef { commits, err = newCommit.Ancestors(git.LogOptions{MaxCount: 9}) if err != nil { - return fmt.Errorf("CommitsBeforeLimit [commit_id: %s]: %v", newCommit.ID, err) + return errors.Newf("CommitsBeforeLimit [commit_id: %s]: %v", newCommit.ID, err) } commits = append([]*git.Commit{newCommit}, commits...) } else { commits, err = newCommit.CommitsAfter(opts.OldCommitID) if err != nil { - return fmt.Errorf("CommitsBeforeUntil [commit_id: %s]: %v", opts.OldCommitID, err) + return errors.Newf("CommitsBeforeUntil [commit_id: %s]: %v", opts.OldCommitID, err) } } } diff --git a/internal/database/users.go b/internal/database/users.go index aabfc5c5e..e50d9c4e0 100644 --- a/internal/database/users.go +++ b/internal/database/users.go @@ -9,9 +9,9 @@ import ( "time" "unicode/utf8" + "github.com/cockroachdb/errors" "github.com/go-macaron/binding" api "github.com/gogs/go-gogs-client" - "github.com/pkg/errors" "gorm.io/gorm" log "unknwon.dev/clog/v2" @@ -130,7 +130,7 @@ func (s *UsersStore) Authenticate(ctx context.Context, login, password string, l // Validate username make sure it satisfies requirement. if binding.AlphaDashDotPattern.MatchString(extAccount.Name) { - return nil, fmt.Errorf("invalid pattern for attribute 'username' [%s]: must be valid alpha or numeric or dash(-_) or dot characters", extAccount.Name) + return nil, errors.Newf("invalid pattern for attribute 'username' [%s]: must be valid alpha or numeric or dash(-_) or dot characters", extAccount.Name) } return s.Create(ctx, extAccount.Name, extAccount.Email, diff --git a/internal/database/webhook.go b/internal/database/webhook.go index bd987f133..250e99b0a 100644 --- a/internal/database/webhook.go +++ b/internal/database/webhook.go @@ -11,6 +11,7 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" gouuid "github.com/satori/go.uuid" log "unknwon.dev/clog/v2" @@ -605,17 +606,17 @@ func prepareHookTasks(e Engine, repo *Repository, event HookEventType, p api.Pay case SLACK: payloader, err = GetSlackPayload(p, event, w.Meta) if err != nil { - return fmt.Errorf("GetSlackPayload: %v", err) + return errors.Newf("GetSlackPayload: %v", err) } case DISCORD: payloader, err = GetDiscordPayload(p, event, w.Meta) if err != nil { - return fmt.Errorf("GetDiscordPayload: %v", err) + return errors.Newf("GetDiscordPayload: %v", err) } case DINGTALK: payloader, err = GetDingtalkPayload(p, event) if err != nil { - return fmt.Errorf("GetDingtalkPayload: %v", err) + return errors.Newf("GetDingtalkPayload: %v", err) } default: payloader = p @@ -643,7 +644,7 @@ func prepareHookTasks(e Engine, repo *Repository, event HookEventType, p api.Pay EventType: event, IsSSL: w.IsSSL, }); err != nil { - return fmt.Errorf("createHookTask: %v", err) + return errors.Newf("createHookTask: %v", err) } } @@ -657,7 +658,7 @@ func prepareHookTasks(e Engine, repo *Repository, event HookEventType, p api.Pay func prepareWebhooks(e Engine, repo *Repository, event HookEventType, p api.Payloader) error { webhooks, err := getActiveWebhooksByRepoID(e, repo.ID) if err != nil { - return fmt.Errorf("getActiveWebhooksByRepoID [%d]: %v", repo.ID, err) + return errors.Newf("getActiveWebhooksByRepoID [%d]: %v", repo.ID, err) } // check if repo belongs to org and append additional webhooks @@ -665,7 +666,7 @@ func prepareWebhooks(e Engine, repo *Repository, event HookEventType, p api.Payl // get hooks for org orgws, err := getActiveWebhooksByOrgID(e, repo.OwnerID) if err != nil { - return fmt.Errorf("getActiveWebhooksByOrgID [%d]: %v", repo.OwnerID, err) + return errors.Newf("getActiveWebhooksByOrgID [%d]: %v", repo.OwnerID, err) } webhooks = append(webhooks, orgws...) } @@ -686,7 +687,7 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err func TestWebhook(repo *Repository, event HookEventType, p api.Payloader, webhookID int64) error { webhook, err := GetWebhookOfRepoByID(repo.ID, webhookID) if err != nil { - return fmt.Errorf("GetWebhookOfRepoByID [repo_id: %d, id: %d]: %v", repo.ID, webhookID, err) + return errors.Newf("GetWebhookOfRepoByID [repo_id: %d, id: %d]: %v", repo.ID, webhookID, err) } return prepareHookTasks(x, repo, event, p, []*Webhook{webhook}) } diff --git a/internal/database/webhook_dingtalk.go b/internal/database/webhook_dingtalk.go index 814a364bf..50e40ae2a 100644 --- a/internal/database/webhook_dingtalk.go +++ b/internal/database/webhook_dingtalk.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" diff --git a/internal/database/webhook_discord.go b/internal/database/webhook_discord.go index 0474050e4..b11550d46 100644 --- a/internal/database/webhook_discord.go +++ b/internal/database/webhook_discord.go @@ -5,8 +5,8 @@ import ( "strconv" "strings" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" @@ -370,7 +370,7 @@ func getDiscordReleasePayload(p *api.ReleasePayload) *DiscordPayload { func GetDiscordPayload(p api.Payloader, event HookEventType, meta string) (payload *DiscordPayload, err error) { slack := &SlackMeta{} if err := jsoniter.Unmarshal([]byte(meta), &slack); err != nil { - return nil, fmt.Errorf("jsoniter.Unmarshal: %v", err) + return nil, errors.Newf("jsoniter.Unmarshal: %v", err) } switch event { diff --git a/internal/database/webhook_slack.go b/internal/database/webhook_slack.go index 5f7273745..13c5a5e46 100644 --- a/internal/database/webhook_slack.go +++ b/internal/database/webhook_slack.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" @@ -287,7 +287,7 @@ func getSlackReleasePayload(p *api.ReleasePayload) *SlackPayload { func GetSlackPayload(p api.Payloader, event HookEventType, meta string) (payload *SlackPayload, err error) { slack := &SlackMeta{} if err := jsoniter.Unmarshal([]byte(meta), &slack); err != nil { - return nil, fmt.Errorf("unmarshal: %v", err) + return nil, errors.Newf("unmarshal: %v", err) } switch event { diff --git a/internal/database/wiki.go b/internal/database/wiki.go index 58fb56497..c45ef9318 100644 --- a/internal/database/wiki.go +++ b/internal/database/wiki.go @@ -1,7 +1,6 @@ package database import ( - "fmt" "net/url" "os" "path" @@ -9,6 +8,7 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" "github.com/gogs/git-module" @@ -71,9 +71,9 @@ func (r *Repository) InitWiki() error { } if err := git.Init(r.WikiPath(), git.InitOptions{Bare: true}); err != nil { - return fmt.Errorf("init repository: %v", err) + return errors.Newf("init repository: %v", err) } else if err = createDelegateHooks(r.WikiPath()); err != nil { - return fmt.Errorf("createDelegateHooks: %v", err) + return errors.Newf("createDelegateHooks: %v", err) } return nil } @@ -98,14 +98,14 @@ func (r *Repository) updateWikiPage(doer *User, oldTitle, title, content, messag defer wikiWorkingPool.CheckOut(com.ToStr(r.ID)) if err = r.InitWiki(); err != nil { - return fmt.Errorf("InitWiki: %v", err) + return errors.Newf("InitWiki: %v", err) } localPath := r.LocalWikiPath() if err = discardLocalWikiChanges(localPath); err != nil { - return fmt.Errorf("discardLocalWikiChanges: %v", err) + return errors.Newf("discardLocalWikiChanges: %v", err) } else if err = r.UpdateLocalWiki(); err != nil { - return fmt.Errorf("UpdateLocalWiki: %v", err) + return errors.Newf("UpdateLocalWiki: %v", err) } title = ToWikiPageName(title) @@ -128,14 +128,14 @@ func (r *Repository) updateWikiPage(doer *User, oldTitle, title, content, messag os.Remove(filename) if err = os.WriteFile(filename, []byte(content), 0o666); err != nil { - return fmt.Errorf("WriteFile: %v", err) + return errors.Newf("WriteFile: %v", err) } if message == "" { message = "Update page '" + title + "'" } if err = git.Add(localPath, git.AddOptions{All: true}); err != nil { - return fmt.Errorf("add all changes: %v", err) + return errors.Newf("add all changes: %v", err) } err = git.CreateCommit( @@ -148,9 +148,9 @@ func (r *Repository) updateWikiPage(doer *User, oldTitle, title, content, messag message, ) if err != nil { - return fmt.Errorf("commit changes: %v", err) + return errors.Newf("commit changes: %v", err) } else if err = git.Push(localPath, "origin", WikiBranch(localPath)); err != nil { - return fmt.Errorf("push: %v", err) + return errors.Newf("push: %v", err) } return nil @@ -170,9 +170,9 @@ func (r *Repository) DeleteWikiPage(doer *User, title string) (err error) { localPath := r.LocalWikiPath() if err = discardLocalWikiChanges(localPath); err != nil { - return fmt.Errorf("discardLocalWikiChanges: %v", err) + return errors.Newf("discardLocalWikiChanges: %v", err) } else if err = r.UpdateLocalWiki(); err != nil { - return fmt.Errorf("UpdateLocalWiki: %v", err) + return errors.Newf("UpdateLocalWiki: %v", err) } title = ToWikiPageName(title) @@ -182,7 +182,7 @@ func (r *Repository) DeleteWikiPage(doer *User, title string) (err error) { message := "Delete page '" + title + "'" if err = git.Add(localPath, git.AddOptions{All: true}); err != nil { - return fmt.Errorf("add all changes: %v", err) + return errors.Newf("add all changes: %v", err) } err = git.CreateCommit( @@ -195,9 +195,9 @@ func (r *Repository) DeleteWikiPage(doer *User, title string) (err error) { message, ) if err != nil { - return fmt.Errorf("commit changes: %v", err) + return errors.Newf("commit changes: %v", err) } else if err = git.Push(localPath, "origin", WikiBranch(localPath)); err != nil { - return fmt.Errorf("push: %v", err) + return errors.Newf("push: %v", err) } return nil diff --git a/internal/dbutil/dsn.go b/internal/dbutil/dsn.go index 61aa2aeae..a8e618fcf 100644 --- a/internal/dbutil/dsn.go +++ b/internal/dbutil/dsn.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" diff --git a/internal/email/message.go b/internal/email/message.go index 85f70a35f..8771dbb66 100644 --- a/internal/email/message.go +++ b/internal/email/message.go @@ -2,7 +2,6 @@ package email import ( "crypto/tls" - "fmt" "io" "net" "net/smtp" @@ -10,6 +9,7 @@ import ( "strings" "time" + "github.com/cockroachdb/errors" "github.com/jaytaylor/html2text" "gopkg.in/gomail.v2" log "unknwon.dev/clog/v2" @@ -85,7 +85,7 @@ func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) { case "Password:": return []byte(a.password), nil default: - return nil, fmt.Errorf("unknwon fromServer: %s", string(fromServer)) + return nil, errors.Newf("unknwon fromServer: %s", string(fromServer)) } } return nil, nil @@ -129,7 +129,7 @@ func (*Sender) Send(from string, to []string, msg io.WriterTo) error { client, err := smtp.NewClient(conn, host) if err != nil { - return fmt.Errorf("NewClient: %v", err) + return errors.Newf("NewClient: %v", err) } if !opts.DisableHELO { @@ -142,7 +142,7 @@ func (*Sender) Send(from string, to []string, msg io.WriterTo) error { } if err = client.Hello(hostname); err != nil { - return fmt.Errorf("hello: %v", err) + return errors.Newf("hello: %v", err) } } @@ -150,7 +150,7 @@ func (*Sender) Send(from string, to []string, msg io.WriterTo) error { hasStartTLS, _ := client.Extension("STARTTLS") if !isSecureConn && hasStartTLS { if err = client.StartTLS(tlsconfig); err != nil { - return fmt.Errorf("StartTLS: %v", err) + return errors.Newf("StartTLS: %v", err) } } @@ -169,28 +169,28 @@ func (*Sender) Send(from string, to []string, msg io.WriterTo) error { if auth != nil { if err = client.Auth(auth); err != nil { - return fmt.Errorf("auth: %v", err) + return errors.Newf("auth: %v", err) } } } if err = client.Mail(from); err != nil { - return fmt.Errorf("mail: %v", err) + return errors.Newf("mail: %v", err) } for _, rec := range to { if err = client.Rcpt(rec); err != nil { - return fmt.Errorf("rcpt: %v", err) + return errors.Newf("rcpt: %v", err) } } w, err := client.Data() if err != nil { - return fmt.Errorf("data: %v", err) + return errors.Newf("data: %v", err) } else if _, err = msg.WriteTo(w); err != nil { - return fmt.Errorf("write to: %v", err) + return errors.Newf("write to: %v", err) } else if err = w.Close(); err != nil { - return fmt.Errorf("close: %v", err) + return errors.Newf("close: %v", err) } return client.Quit() diff --git a/internal/errutil/errutil_test.go b/internal/errutil/errutil_test.go index 386d7b8af..34e42f19c 100644 --- a/internal/errutil/errutil_test.go +++ b/internal/errutil/errutil_test.go @@ -1,9 +1,9 @@ package errutil import ( - "errors" "testing" + "github.com/cockroachdb/errors" "github.com/stretchr/testify/assert" ) diff --git a/internal/gitutil/diff.go b/internal/gitutil/diff.go index 2b62685f3..e068f0b48 100644 --- a/internal/gitutil/diff.go +++ b/internal/gitutil/diff.go @@ -2,12 +2,12 @@ package gitutil import ( "bytes" - "fmt" "html" "html/template" "io" "sync" + "github.com/cockroachdb/errors" "github.com/sergi/go-diff/diffmatchpatch" "golang.org/x/net/html/charset" "golang.org/x/text/transform" @@ -176,7 +176,7 @@ func ParseDiff(r io.Reader, maxFiles, maxFileLines, maxLineChars int) (*Diff, er result := <-done if result.Err != nil { - return nil, fmt.Errorf("stream parse diff: %v", result.Err) + return nil, errors.Newf("stream parse diff: %v", result.Err) } return NewDiff(result.Diff), nil } @@ -185,7 +185,7 @@ func ParseDiff(r io.Reader, maxFiles, maxFileLines, maxLineChars int) (*Diff, er func RepoDiff(repo *git.Repository, rev string, maxFiles, maxFileLines, maxLineChars int, opts ...git.DiffOptions) (*Diff, error) { diff, err := repo.Diff(rev, maxFiles, maxFileLines, maxLineChars, opts...) if err != nil { - return nil, fmt.Errorf("get diff: %v", err) + return nil, errors.Newf("get diff: %v", err) } return NewDiff(diff), nil } diff --git a/internal/gitutil/error.go b/internal/gitutil/error.go index 89056ede0..566c50a65 100644 --- a/internal/gitutil/error.go +++ b/internal/gitutil/error.go @@ -1,8 +1,8 @@ package gitutil import ( + "github.com/cockroachdb/errors" "github.com/gogs/git-module" - "github.com/pkg/errors" "gogs.io/gogs/internal/errutil" ) diff --git a/internal/gitutil/pull_request.go b/internal/gitutil/pull_request.go index b69bf23e3..90d8b3d49 100644 --- a/internal/gitutil/pull_request.go +++ b/internal/gitutil/pull_request.go @@ -1,12 +1,11 @@ package gitutil import ( - "fmt" "strconv" "time" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" - "github.com/pkg/errors" log "unknwon.dev/clog/v2" ) @@ -28,7 +27,7 @@ func (module) PullRequestMeta(headPath, basePath, headBranch, baseBranch string) tmpRemote := strconv.FormatInt(time.Now().UnixNano(), 10) err := Module.RemoteAdd(headPath, tmpRemote, basePath, git.RemoteAddOptions{Fetch: true}) if err != nil { - return nil, fmt.Errorf("add remote: %v", err) + return nil, errors.Newf("add remote: %v", err) } defer func() { err := Module.RemoteRemove(headPath, tmpRemote) diff --git a/internal/gitutil/pull_request_test.go b/internal/gitutil/pull_request_test.go index b6c6a37d6..743107b3d 100644 --- a/internal/gitutil/pull_request_test.go +++ b/internal/gitutil/pull_request_test.go @@ -1,11 +1,10 @@ package gitutil import ( - "fmt" "testing" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" - "github.com/pkg/errors" "github.com/stretchr/testify/assert" ) @@ -23,64 +22,64 @@ func TestModuler_PullRequestMeta(t *testing.T) { SetMockModuleStore(t, &MockModuleStore{ remoteAdd: func(repoPath, name, url string, opts ...git.RemoteAddOptions) error { if repoPath != headPath { - return fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath) + return errors.Newf("repoPath: want %q but got %q", headPath, repoPath) } else if name == "" { return errors.New("empty name") } else if url != basePath { - return fmt.Errorf("url: want %q but got %q", basePath, url) + return errors.Newf("url: want %q but got %q", basePath, url) } if len(opts) == 0 { return errors.New("no options") } else if !opts[0].Fetch { - return fmt.Errorf("opts.Fetch: want %v but got %v", true, opts[0].Fetch) + return errors.Newf("opts.Fetch: want %v but got %v", true, opts[0].Fetch) } return nil }, mergeBase: func(repoPath, base, head string, opts ...git.MergeBaseOptions) (string, error) { if repoPath != headPath { - return "", fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath) + return "", errors.Newf("repoPath: want %q but got %q", headPath, repoPath) } else if base == "" { return "", errors.New("empty base") } else if head != headBranch { - return "", fmt.Errorf("head: want %q but got %q", headBranch, head) + return "", errors.Newf("head: want %q but got %q", headBranch, head) } return mergeBase, nil }, log: func(repoPath, rev string, opts ...git.LogOptions) ([]*git.Commit, error) { if repoPath != headPath { - return nil, fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath) + return nil, errors.Newf("repoPath: want %q but got %q", headPath, repoPath) } expRev := mergeBase + "..." + headBranch if rev != expRev { - return nil, fmt.Errorf("rev: want %q but got %q", expRev, rev) + return nil, errors.Newf("rev: want %q but got %q", expRev, rev) } return commits, nil }, diffNameOnly: func(repoPath, base, head string, opts ...git.DiffNameOnlyOptions) ([]string, error) { if repoPath != headPath { - return nil, fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath) + return nil, errors.Newf("repoPath: want %q but got %q", headPath, repoPath) } else if base == "" { return nil, errors.New("empty base") } else if head != headBranch { - return nil, fmt.Errorf("head: want %q but got %q", headBranch, head) + return nil, errors.Newf("head: want %q but got %q", headBranch, head) } if len(opts) == 0 { return nil, errors.New("no options") } else if !opts[0].NeedsMergeBase { - return nil, fmt.Errorf("opts.NeedsMergeBase: want %v but got %v", true, opts[0].NeedsMergeBase) + return nil, errors.Newf("opts.NeedsMergeBase: want %v but got %v", true, opts[0].NeedsMergeBase) } return changedFiles, nil }, remoteRemove: func(repoPath, name string, opts ...git.RemoteRemoveOptions) error { if repoPath != headPath { - return fmt.Errorf("repoPath: want %q but got %q", headPath, repoPath) + return errors.Newf("repoPath: want %q but got %q", headPath, repoPath) } else if name == "" { return errors.New("empty name") } diff --git a/internal/gitutil/tag.go b/internal/gitutil/tag.go index 72151193b..16fd8bc08 100644 --- a/internal/gitutil/tag.go +++ b/internal/gitutil/tag.go @@ -1,7 +1,7 @@ package gitutil import ( - "github.com/pkg/errors" + "github.com/cockroachdb/errors" ) // TagsPage contains a list of tags and pagination information. diff --git a/internal/lfsutil/oid.go b/internal/lfsutil/oid.go index 9fc1e1c99..cfb308783 100644 --- a/internal/lfsutil/oid.go +++ b/internal/lfsutil/oid.go @@ -1,7 +1,7 @@ package lfsutil import ( - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gogs.io/gogs/internal/lazyregexp" ) diff --git a/internal/lfsutil/storage.go b/internal/lfsutil/storage.go index 0f903fcd5..36c4d7ac6 100644 --- a/internal/lfsutil/storage.go +++ b/internal/lfsutil/storage.go @@ -5,7 +5,7 @@ import ( "os" "path/filepath" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "gogs.io/gogs/internal/osutil" ) diff --git a/internal/process/manager.go b/internal/process/manager.go index c1d2a7ac9..78b4acd93 100644 --- a/internal/process/manager.go +++ b/internal/process/manager.go @@ -2,12 +2,11 @@ package process import ( "bytes" - "errors" - "fmt" "os/exec" "sync" "time" + "github.com/cockroachdb/errors" log "unknwon.dev/clog/v2" ) @@ -125,7 +124,7 @@ func Kill(pid int64) error { if proc.Cmd != nil && proc.Cmd.Process != nil && proc.Cmd.ProcessState != nil && !proc.Cmd.ProcessState.Exited() { if err := proc.Cmd.Process.Kill(); err != nil { - return fmt.Errorf("fail to kill process [pid: %d, desc: %s]: %v", proc.PID, proc.Description, err) + return errors.Newf("fail to kill process [pid: %d, desc: %s]: %v", proc.PID, proc.Description, err) } } Remove(pid) diff --git a/internal/route/api/v1/repo/contents.go b/internal/route/api/v1/repo/contents.go index d919cb9f4..e247348a8 100644 --- a/internal/route/api/v1/repo/contents.go +++ b/internal/route/api/v1/repo/contents.go @@ -6,8 +6,8 @@ import ( "net/http" "path" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" - "github.com/pkg/errors" "gogs.io/gogs/internal/context" "gogs.io/gogs/internal/database" diff --git a/internal/route/api/v1/repo/hook.go b/internal/route/api/v1/repo/hook.go index 356212751..21069adbb 100644 --- a/internal/route/api/v1/repo/hook.go +++ b/internal/route/api/v1/repo/hook.go @@ -3,8 +3,8 @@ package repo import ( "net/http" + "github.com/cockroachdb/errors" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" "github.com/unknwon/com" api "github.com/gogs/go-gogs-client" diff --git a/internal/route/api/v1/repo/issue.go b/internal/route/api/v1/repo/issue.go index 0fc28b20a..1f8f0a89e 100644 --- a/internal/route/api/v1/repo/issue.go +++ b/internal/route/api/v1/repo/issue.go @@ -1,10 +1,10 @@ package repo import ( - "fmt" "net/http" "strings" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" "gogs.io/gogs/internal/conf" @@ -82,7 +82,7 @@ func CreateIssue(c *context.APIContext, form api.CreateIssueOption) { assignee, err := database.Handle.Users().GetByUsername(c.Req.Context(), form.Assignee) if err != nil { if database.IsErrUserNotExist(err) { - c.ErrorStatus(http.StatusUnprocessableEntity, fmt.Errorf("assignee does not exist: [name: %s]", form.Assignee)) + c.ErrorStatus(http.StatusUnprocessableEntity, errors.Newf("assignee does not exist: [name: %s]", form.Assignee)) } else { c.Error(err, "get user by name") } @@ -144,7 +144,7 @@ func EditIssue(c *context.APIContext, form api.EditIssueOption) { assignee, err := database.Handle.Users().GetByUsername(c.Req.Context(), *form.Assignee) if err != nil { if database.IsErrUserNotExist(err) { - c.ErrorStatus(http.StatusUnprocessableEntity, fmt.Errorf("assignee does not exist: [name: %s]", *form.Assignee)) + c.ErrorStatus(http.StatusUnprocessableEntity, errors.Newf("assignee does not exist: [name: %s]", *form.Assignee)) } else { c.Error(err, "get user by name") } diff --git a/internal/route/api/v1/repo/key.go b/internal/route/api/v1/repo/key.go index f8f6fc33e..0b1287ce5 100644 --- a/internal/route/api/v1/repo/key.go +++ b/internal/route/api/v1/repo/key.go @@ -3,8 +3,8 @@ package repo import ( "net/http" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" - "github.com/pkg/errors" "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/context" diff --git a/internal/route/api/v1/repo/repo.go b/internal/route/api/v1/repo/repo.go index e69673bec..349882b3b 100644 --- a/internal/route/api/v1/repo/repo.go +++ b/internal/route/api/v1/repo/repo.go @@ -4,8 +4,8 @@ import ( "net/http" "path" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" - "github.com/pkg/errors" log "unknwon.dev/clog/v2" "gogs.io/gogs/internal/conf" diff --git a/internal/route/api/v1/user/email.go b/internal/route/api/v1/user/email.go index 6d3e55b4c..61367eb97 100644 --- a/internal/route/api/v1/user/email.go +++ b/internal/route/api/v1/user/email.go @@ -3,8 +3,8 @@ package user import ( "net/http" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" - "github.com/pkg/errors" "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/context" diff --git a/internal/route/api/v1/user/key.go b/internal/route/api/v1/user/key.go index 29b6c6d79..5eea6a59e 100644 --- a/internal/route/api/v1/user/key.go +++ b/internal/route/api/v1/user/key.go @@ -3,8 +3,8 @@ package user import ( "net/http" + "github.com/cockroachdb/errors" api "github.com/gogs/go-gogs-client" - "github.com/pkg/errors" "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/context" diff --git a/internal/route/install.go b/internal/route/install.go index 522576d45..cb3b95428 100644 --- a/internal/route/install.go +++ b/internal/route/install.go @@ -7,8 +7,8 @@ import ( "path/filepath" "strings" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" - "github.com/pkg/errors" "github.com/unknwon/com" "gopkg.in/ini.v1" "gopkg.in/macaron.v1" diff --git a/internal/route/repo/download.go b/internal/route/repo/download.go index 084f0e299..bed8214bf 100644 --- a/internal/route/repo/download.go +++ b/internal/route/repo/download.go @@ -1,10 +1,10 @@ package repo import ( - "fmt" "net/http" "path" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" "gogs.io/gogs/internal/conf" @@ -16,7 +16,7 @@ import ( func serveData(c *context.Context, name string, data []byte) error { commit, err := c.Repo.Commit.CommitByPath(git.CommitByRevisionOptions{Path: c.Repo.TreePath}) if err != nil { - return fmt.Errorf("get commit by path %q: %v", c.Repo.TreePath, err) + return errors.Newf("get commit by path %q: %v", c.Repo.TreePath, err) } c.Resp.Header().Set("Last-Modified", commit.Committer.When.Format(http.TimeFormat)) @@ -30,7 +30,7 @@ func serveData(c *context.Context, name string, data []byte) error { } if _, err := c.Resp.Write(data); err != nil { - return fmt.Errorf("write buffer to response: %v", err) + return errors.Newf("write buffer to response: %v", err) } return nil } diff --git a/internal/route/repo/editor.go b/internal/route/repo/editor.go index 7b753f6d9..6582d8c87 100644 --- a/internal/route/repo/editor.go +++ b/internal/route/repo/editor.go @@ -1,12 +1,12 @@ package repo import ( - "errors" "fmt" "net/http" "path" "strings" + "github.com/cockroachdb/errors" log "unknwon.dev/clog/v2" "gogs.io/gogs/internal/conf" diff --git a/internal/route/repo/issue.go b/internal/route/repo/issue.go index a4fd5d066..724c5778c 100644 --- a/internal/route/repo/issue.go +++ b/internal/route/repo/issue.go @@ -1,13 +1,13 @@ package repo import ( - "errors" "fmt" "net/http" "net/url" "strings" "time" + "github.com/cockroachdb/errors" "github.com/unknwon/com" "github.com/unknwon/paginater" log "unknwon.dev/clog/v2" diff --git a/internal/route/repo/release.go b/internal/route/repo/release.go index 6368e4057..c37dc5a1f 100644 --- a/internal/route/repo/release.go +++ b/internal/route/repo/release.go @@ -1,9 +1,9 @@ package repo import ( - "fmt" "strings" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" log "unknwon.dev/clog/v2" @@ -27,11 +27,11 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *database.R if repoCtx.GitRepo.HasBranch(release.Target) { commit, err := repoCtx.GitRepo.BranchCommit(release.Target) if err != nil { - return fmt.Errorf("get branch commit: %v", err) + return errors.Newf("get branch commit: %v", err) } countCache[release.Target], err = commit.CommitsCount() if err != nil { - return fmt.Errorf("count commits: %v", err) + return errors.Newf("count commits: %v", err) } } else { // Use NumCommits of the newest release on that target diff --git a/internal/route/repo/setting.go b/internal/route/repo/setting.go index 1e6d2abb9..71e214a47 100644 --- a/internal/route/repo/setting.go +++ b/internal/route/repo/setting.go @@ -1,12 +1,12 @@ package repo import ( - "errors" "fmt" "io" "strings" "time" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" "github.com/unknwon/com" log "unknwon.dev/clog/v2" @@ -327,19 +327,19 @@ func UpdateAvatarSetting(c *context.Context, f form.Avatar, ctxRepo *database.Re if f.Avatar != nil { r, err := f.Avatar.Open() if err != nil { - return fmt.Errorf("open avatar reader: %v", err) + return errors.Newf("open avatar reader: %v", err) } defer r.Close() data, err := io.ReadAll(r) if err != nil { - return fmt.Errorf("read avatar content: %v", err) + return errors.Newf("read avatar content: %v", err) } if !tool.IsImageFile(data) { return errors.New(c.Tr("settings.uploaded_avatar_not_a_image")) } if err = ctxRepo.UploadAvatar(data); err != nil { - return fmt.Errorf("upload avatar: %v", err) + return errors.Newf("upload avatar: %v", err) } } else { // No avatar is uploaded and reset setting back. @@ -349,7 +349,7 @@ func UpdateAvatarSetting(c *context.Context, f form.Avatar, ctxRepo *database.Re } if err := database.UpdateRepository(ctxRepo, false); err != nil { - return fmt.Errorf("update repository: %v", err) + return errors.Newf("update repository: %v", err) } return nil diff --git a/internal/route/repo/webhook.go b/internal/route/repo/webhook.go index d64e29eee..a3f1c5328 100644 --- a/internal/route/repo/webhook.go +++ b/internal/route/repo/webhook.go @@ -1,13 +1,13 @@ package repo import ( - "errors" "fmt" "net/http" "net/url" "strings" "time" + "github.com/cockroachdb/errors" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" jsoniter "github.com/json-iterator/go" diff --git a/internal/route/user/auth.go b/internal/route/user/auth.go index 4b66fad06..117ab23c0 100644 --- a/internal/route/user/auth.go +++ b/internal/route/user/auth.go @@ -3,10 +3,10 @@ package user import ( gocontext "context" "encoding/hex" - "fmt" "net/http" "net/url" + "github.com/cockroachdb/errors" "github.com/go-macaron/captcha" "github.com/unknwon/com" log "unknwon.dev/clog/v2" @@ -55,7 +55,7 @@ func AutoLogin(c *context.Context) (bool, error) { u, err := database.Handle.Users().GetByUsername(c.Req.Context(), uname) if err != nil { if !database.IsErrUserNotExist(err) { - return false, fmt.Errorf("get user by name: %v", err) + return false, errors.Newf("get user by name: %v", err) } return false, nil } diff --git a/internal/route/user/setting.go b/internal/route/user/setting.go index a5b0971a3..972757f98 100644 --- a/internal/route/user/setting.go +++ b/internal/route/user/setting.go @@ -9,7 +9,7 @@ import ( "image/png" "io" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/pquerna/otp" "github.com/pquerna/otp/totp" "gopkg.in/macaron.v1" @@ -146,13 +146,13 @@ func UpdateAvatarSetting(c *context.Context, f form.Avatar, ctxUser *database.Us if f.Avatar != nil && f.Avatar.Filename != "" { r, err := f.Avatar.Open() if err != nil { - return fmt.Errorf("open avatar reader: %v", err) + return errors.Newf("open avatar reader: %v", err) } defer func() { _ = r.Close() }() data, err := io.ReadAll(r) if err != nil { - return fmt.Errorf("read avatar content: %v", err) + return errors.Newf("read avatar content: %v", err) } if !tool.IsImageFile(data) { return errors.New(c.Tr("settings.uploaded_avatar_not_a_image")) diff --git a/internal/ssh/ssh.go b/internal/ssh/ssh.go index 898d235be..25c57a26b 100644 --- a/internal/ssh/ssh.go +++ b/internal/ssh/ssh.go @@ -10,7 +10,7 @@ import ( "strings" "syscall" - "github.com/pkg/errors" + "github.com/cockroachdb/errors" "github.com/sourcegraph/run" "github.com/unknwon/com" "golang.org/x/crypto/ssh" diff --git a/internal/template/template.go b/internal/template/template.go index fe8f35bb3..16b1653f5 100644 --- a/internal/template/template.go +++ b/internal/template/template.go @@ -9,6 +9,7 @@ import ( "sync" "time" + "github.com/cockroachdb/errors" "github.com/editorconfig/editorconfig-core-go/v2" jsoniter "github.com/json-iterator/go" "github.com/microcosm-cc/bluemonday" @@ -160,7 +161,7 @@ func ToUTF8WithErr(content []byte) (string, error) { encoding, _ := charset.Lookup(charsetLabel) if encoding == nil { - return string(content), fmt.Errorf("unknown encoding: %s", charsetLabel) + return string(content), errors.Newf("unknown encoding: %s", charsetLabel) } // If there is an error, we concatenate the nicely decoded part and the diff --git a/internal/testutil/exec.go b/internal/testutil/exec.go index ccb821ee1..1dc3344b5 100644 --- a/internal/testutil/exec.go +++ b/internal/testutil/exec.go @@ -1,11 +1,11 @@ package testutil import ( - "errors" - "fmt" "os" "os/exec" "strings" + + "github.com/cockroachdb/errors" ) // Exec executes "go test" on given helper with supplied environment variables. @@ -34,7 +34,7 @@ func Exec(helper string, envs ...string) (string, error) { } if err != nil { - return "", fmt.Errorf("%v - %s", err, str) + return "", errors.Newf("%v - %s", err, str) } return "", errors.New(str) } diff --git a/internal/testutil/exec_test.go b/internal/testutil/exec_test.go index 2cf6969fa..51ef5884e 100644 --- a/internal/testutil/exec_test.go +++ b/internal/testutil/exec_test.go @@ -1,7 +1,6 @@ package testutil import ( - "errors" "fmt" "os" "testing" @@ -24,17 +23,17 @@ func TestExecHelper(_ *testing.T) { func TestExec(t *testing.T) { tests := []struct { - helper string - env string - expOut string - expErr error + helper string + env string + expOut string + expErrMsg string }{ { - helper: "NoTestsToRun", - expErr: errors.New("no tests to run"), + helper: "NoTestsToRun", + expErrMsg: "no tests to run", }, { - helper: "TestExecHelper", - expErr: errors.New("exit status 1 - tests failed\n"), + helper: "TestExecHelper", + expErrMsg: "exit status 1 - tests failed\n", }, { helper: "TestExecHelper", env: "PASS=1", @@ -44,7 +43,12 @@ func TestExec(t *testing.T) { for _, test := range tests { t.Run("", func(t *testing.T) { out, err := Exec(test.helper, test.env) - assert.Equal(t, test.expErr, err) + if test.expErrMsg != "" { + assert.Error(t, err) + assert.Contains(t, err.Error(), test.expErrMsg) + } else { + assert.NoError(t, err) + } assert.Equal(t, test.expOut, out) }) } diff --git a/internal/userutil/userutil.go b/internal/userutil/userutil.go index 3015fb69b..b062edc82 100644 --- a/internal/userutil/userutil.go +++ b/internal/userutil/userutil.go @@ -13,8 +13,8 @@ import ( "strconv" "strings" + "github.com/cockroachdb/errors" "github.com/nfnt/resize" - "github.com/pkg/errors" "golang.org/x/crypto/pbkdf2" "gogs.io/gogs/internal/avatar" diff --git a/templates/embed.go b/templates/embed.go index 2c0b3a54e..44b8277c2 100644 --- a/templates/embed.go +++ b/templates/embed.go @@ -3,13 +3,13 @@ package templates import ( "bytes" "embed" - "fmt" "io" "io/fs" "os" "path" "strings" + "github.com/cockroachdb/errors" "gopkg.in/macaron.v1" "gogs.io/gogs/internal/osutil" @@ -33,7 +33,7 @@ func (fs *fileSystem) Get(name string) (io.Reader, error) { return bytes.NewReader(fs.files[i].Data()), nil } } - return nil, fmt.Errorf("file %q not found", name) + return nil, errors.Newf("file %q not found", name) } func mustNames(fsys fs.FS) []string {