Skip to content

Commit 47430a5

Browse files
committed
Merge remote-tracking branch 'giteaofficial/main'
* giteaofficial/main: Allow postgres integration tests to run over unix pipe (go-gitea#19875) improvement some release related code (go-gitea#19867) feat: add DEFAULT_MERGE_STYLE to `repository.pull-request` section for repo init (go-gitea#19751) [skip ci] Updated translations via Crowdin Prevent NPE on update mirror settings (go-gitea#19864)
2 parents cb81be2 + 085924b commit 47430a5

File tree

17 files changed

+106
-66
lines changed

17 files changed

+106
-66
lines changed

custom/conf/app.example.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,9 @@ PATH =
948948
;; List of keywords used in Pull Request comments to automatically reopen a related issue
949949
;REOPEN_KEYWORDS = reopen,reopens,reopened
950950
;;
951+
;; Set default merge style for repository creating, valid options: merge, rebase, rebase-merge, squash
952+
;DEFAULT_MERGE_STYLE = merge
953+
;;
951954
;; In the default merge message for squash commits include at most this many commits
952955
;DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT = 50
953956
;;

docs/content/doc/advanced/config-cheat-sheet.en-us.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
9292
keywords used in Pull Request comments to automatically close a related issue
9393
- `REOPEN_KEYWORDS`: **reopen**, **reopens**, **reopened**: List of keywords used in Pull Request comments to automatically reopen
9494
a related issue
95+
- `DEFAULT_MERGE_STYLE`: **merge**: Set default merge style for repository creating, valid options: `merge`, `rebase`, `rebase-merge`, `squash`
9596
- `DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT`: **50**: In the default merge message for squash commits include at most this many commits. Set to `-1` to include all commits
9697
- `DEFAULT_MERGE_MESSAGE_SIZE`: **5120**: In the default merge message for squash commits limit the size of the commit messages. Set to `-1` to have no limit. Only used if `POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES` is `true`.
9798
- `DEFAULT_MERGE_MESSAGE_ALL_AUTHORS`: **false**: In the default merge message for squash commits walk all commits to include all authors in the Co-authored-by otherwise just use those in the limited list

integrations/integration_test.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,16 @@ func initIntegrationTest() {
193193
log.Fatal("db.Exec: %v", err)
194194
}
195195
case setting.Database.UsePostgreSQL:
196-
db, err := sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s",
197-
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.SSLMode))
196+
var db *sql.DB
197+
var err error
198+
if setting.Database.Host[0] == '/' {
199+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s",
200+
setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host))
201+
} else {
202+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
203+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
204+
}
205+
198206
defer db.Close()
199207
if err != nil {
200208
log.Fatal("sql.Open: %v", err)
@@ -216,8 +224,13 @@ func initIntegrationTest() {
216224
}
217225
db.Close()
218226

219-
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
220-
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
227+
if setting.Database.Host[0] == '/' {
228+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s",
229+
setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host))
230+
} else {
231+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
232+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
233+
}
221234
// This is a different db object; requires a different Close()
222235
defer db.Close()
223236
if err != nil {

integrations/migration-test/migration_test.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,17 @@ func restoreOldDB(t *testing.T, version string) bool {
185185
db.Close()
186186

187187
case setting.Database.UsePostgreSQL:
188-
db, err := sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s",
189-
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.SSLMode))
190-
assert.NoError(t, err)
188+
var db *sql.DB
189+
var err error
190+
if setting.Database.Host[0] == '/' {
191+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/?sslmode=%s&host=%s",
192+
setting.Database.User, setting.Database.Passwd, setting.Database.SSLMode, setting.Database.Host))
193+
assert.NoError(t, err)
194+
} else {
195+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s",
196+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.SSLMode))
197+
assert.NoError(t, err)
198+
}
191199
defer db.Close()
192200

193201
_, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", setting.Database.Name))
@@ -199,8 +207,13 @@ func restoreOldDB(t *testing.T, version string) bool {
199207

200208
// Check if we need to setup a specific schema
201209
if len(setting.Database.Schema) != 0 {
202-
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
203-
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
210+
if setting.Database.Host[0] == '/' {
211+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s",
212+
setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host))
213+
} else {
214+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
215+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
216+
}
204217
if !assert.NoError(t, err) {
205218
return false
206219
}
@@ -225,8 +238,13 @@ func restoreOldDB(t *testing.T, version string) bool {
225238
db.Close()
226239
}
227240

228-
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
229-
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
241+
if setting.Database.Host[0] == '/' {
242+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s",
243+
setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host))
244+
} else {
245+
db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s",
246+
setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode))
247+
}
230248
assert.NoError(t, err)
231249
defer db.Close()
232250

models/release.go

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func init() {
5555
func (r *Release) loadAttributes(ctx context.Context) error {
5656
var err error
5757
if r.Repo == nil {
58-
r.Repo, err = repo_model.GetRepositoryByID(r.RepoID)
58+
r.Repo, err = repo_model.GetRepositoryByIDCtx(ctx, r.RepoID)
5959
if err != nil {
6060
return err
6161
}
@@ -99,24 +99,12 @@ func (r *Release) HTMLURL() string {
9999
}
100100

101101
// IsReleaseExist returns true if release with given tag name already exists.
102-
func IsReleaseExist(repoID int64, tagName string) (bool, error) {
102+
func IsReleaseExist(ctx context.Context, repoID int64, tagName string) (bool, error) {
103103
if len(tagName) == 0 {
104104
return false, nil
105105
}
106106

107-
return db.GetEngine(db.DefaultContext).Get(&Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)})
108-
}
109-
110-
// InsertRelease inserts a release
111-
func InsertRelease(rel *Release) error {
112-
_, err := db.GetEngine(db.DefaultContext).Insert(rel)
113-
return err
114-
}
115-
116-
// InsertReleasesContext insert releases
117-
func InsertReleasesContext(ctx context.Context, rels []*Release) error {
118-
_, err := db.GetEngine(ctx).Insert(rels)
119-
return err
107+
return db.GetEngine(ctx).Exist(&Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)})
120108
}
121109

122110
// UpdateRelease updates all columns of a release
@@ -149,22 +137,20 @@ func AddReleaseAttachments(ctx context.Context, releaseID int64, attachmentUUIDs
149137

150138
// GetRelease returns release by given ID.
151139
func GetRelease(repoID int64, tagName string) (*Release, error) {
152-
isExist, err := IsReleaseExist(repoID, tagName)
140+
rel := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)}
141+
has, err := db.GetEngine(db.DefaultContext).Get(rel)
153142
if err != nil {
154143
return nil, err
155-
} else if !isExist {
144+
} else if !has {
156145
return nil, ErrReleaseNotExist{0, tagName}
157146
}
158-
159-
rel := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)}
160-
_, err = db.GetEngine(db.DefaultContext).Get(rel)
161-
return rel, err
147+
return rel, nil
162148
}
163149

164150
// GetReleaseByID returns release with given ID.
165-
func GetReleaseByID(id int64) (*Release, error) {
151+
func GetReleaseByID(ctx context.Context, id int64) (*Release, error) {
166152
rel := new(Release)
167-
has, err := db.GetEngine(db.DefaultContext).
153+
has, err := db.GetEngine(ctx).
168154
ID(id).
169155
Get(rel)
170156
if err != nil {

models/repo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ func CreateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_
373373
units = append(units, repo_model.RepoUnit{
374374
RepoID: repo.ID,
375375
Type: tp,
376-
Config: &repo_model.PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true, DefaultMergeStyle: repo_model.MergeStyleMerge, AllowRebaseUpdate: true},
376+
Config: &repo_model.PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowRebaseMerge: true, AllowSquash: true, DefaultMergeStyle: repo_model.MergeStyle(setting.Repository.PullRequest.DefaultMergeStyle), AllowRebaseUpdate: true},
377377
})
378378
} else {
379379
units = append(units, repo_model.RepoUnit{
@@ -1144,7 +1144,7 @@ func LinkedRepository(a *repo_model.Attachment) (*repo_model.Repository, unit.Ty
11441144
}
11451145
return repo, unitType, err
11461146
} else if a.ReleaseID != 0 {
1147-
rel, err := GetReleaseByID(a.ReleaseID)
1147+
rel, err := GetReleaseByID(db.DefaultContext, a.ReleaseID)
11481148
if err != nil {
11491149
return nil, unit.TypeReleases, err
11501150
}

models/repo/repo_unit.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"code.gitea.io/gitea/models/db"
1212
"code.gitea.io/gitea/models/unit"
1313
"code.gitea.io/gitea/modules/json"
14+
"code.gitea.io/gitea/modules/setting"
1415
"code.gitea.io/gitea/modules/timeutil"
1516

1617
"xorm.io/xorm"
@@ -148,6 +149,10 @@ func (cfg *PullRequestsConfig) GetDefaultMergeStyle() MergeStyle {
148149
return cfg.DefaultMergeStyle
149150
}
150151

152+
if setting.Repository.PullRequest.DefaultMergeStyle != "" {
153+
return MergeStyle(setting.Repository.PullRequest.DefaultMergeStyle)
154+
}
155+
151156
return MergeStyleMerge
152157
}
153158

modules/context/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ func repoAssignment(ctx *Context, repo *repo_model.Repository) {
391391
ctx.ServerError("GetMirrorByRepoID", err)
392392
return
393393
}
394-
ctx.Repo.Mirror.Repo = ctx.Repo.Repository
394+
ctx.Repo.Mirror.Repo = repo
395395
ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune
396396
ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval
397397
ctx.Data["Mirror"] = ctx.Repo.Mirror

modules/setting/repository.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ var (
7171
WorkInProgressPrefixes []string
7272
CloseKeywords []string
7373
ReopenKeywords []string
74+
DefaultMergeStyle string
7475
DefaultMergeMessageCommitsLimit int
7576
DefaultMergeMessageSize int
7677
DefaultMergeMessageAllAuthors bool
@@ -192,6 +193,7 @@ var (
192193
WorkInProgressPrefixes []string
193194
CloseKeywords []string
194195
ReopenKeywords []string
196+
DefaultMergeStyle string
195197
DefaultMergeMessageCommitsLimit int
196198
DefaultMergeMessageSize int
197199
DefaultMergeMessageAllAuthors bool
@@ -205,6 +207,7 @@ var (
205207
// https://help.github.com/articles/closing-issues-via-commit-messages
206208
CloseKeywords: strings.Split("close,closes,closed,fix,fixes,fixed,resolve,resolves,resolved", ","),
207209
ReopenKeywords: strings.Split("reopen,reopens,reopened", ","),
210+
DefaultMergeStyle: "merge",
208211
DefaultMergeMessageCommitsLimit: 50,
209212
DefaultMergeMessageSize: 5 * 1024,
210213
DefaultMergeMessageAllAuthors: false,

options/locale/locale_pt-BR.ini

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ error404=A página que você está tentando acessar <strong>não existe</strong>
105105

106106
never=Nunca
107107

108+
rss_feed=Feed RSS
108109

109110
[error]
110111
occurred=Ocorreu um erro
@@ -777,6 +778,7 @@ webauthn_delete_key_desc=Se você remover uma chave de segurança, não poderá
777778
manage_account_links=Gerenciar contas vinculadas
778779
manage_account_links_desc=Estas contas externas estão vinculadas a sua conta de Gitea.
779780
account_links_not_available=Não existem contas externas atualmente vinculadas a esta conta.
781+
link_account=Vincular Conta
780782
remove_account_link=Remover conta vinculada
781783
remove_account_link_desc=A exclusão da chave SSH revogará o acesso à sua conta. Continuar?
782784
remove_account_link_success=A conta vinculada foi removida.
@@ -1010,6 +1012,7 @@ tags=Tags
10101012
issues=Issues
10111013
pulls=Pull requests
10121014
project_board=Projetos
1015+
packages=Pacotes
10131016
labels=Etiquetas
10141017
org_labels_desc=Rótulos de nível de organização que podem ser usados em <strong>todos os repositórios</strong> sob esta organização
10151018
org_labels_desc_manage=gerenciar
@@ -1461,6 +1464,7 @@ issues.review.add_review_request=solicitou revisão de %s %s
14611464
issues.review.remove_review_request=removeu a solicitação de revisão para %s %s
14621465
issues.review.remove_review_request_self=recusou revisar %s
14631466
issues.review.pending=Pendente
1467+
issues.review.pending.tooltip=Este comentário não está atualmente visível para outros usuários. Para enviar seus comentários pendentes, selecione '%s' -> '%s/%s/%s' no topo da página.
14641468
issues.review.review=Revisão
14651469
issues.review.reviewers=Revisores
14661470
issues.review.outdated=Desatualizado
@@ -1488,8 +1492,11 @@ pulls.desc=Habilitar pull requests e revisões de código.
14881492
pulls.new=Novo pull request
14891493
pulls.view=Ver Pull Request
14901494
pulls.compare_changes=Novo pull request
1495+
pulls.allow_edits_from_maintainers=Permitir edições de mantenedores
14911496
pulls.compare_changes_desc=Selecione o branch de destino (push) e o branch de origem (pull) para o merge.
14921497
pulls.has_viewed_file=Visto
1498+
pulls.has_changed_since_last_review=Alterado desde a última revisão
1499+
pulls.viewed_files_label=%[1]d / %[2]d arquivos visualizados
14931500
pulls.compare_base=merge em
14941501
pulls.compare_compare=pull de
14951502
pulls.switch_comparison_type=Mudar tipo de comparação
@@ -1557,6 +1564,10 @@ pulls.squash_merge_pull_request=Criar commit de squash
15571564
pulls.merge_manually=Merge feito manualmente
15581565
pulls.merge_commit_id=A ID de merge commit
15591566
pulls.require_signed_wont_sign=O branch requer commits assinados, mas este merge não será assinado
1567+
pulls.merge_pull_request_now=Aplicar Pull Request Agora
1568+
pulls.rebase_merge_pull_request_now=Aplicar Rebase e Merge Agora
1569+
pulls.rebase_merge_commit_pull_request_now=Aplicar Rebase e Merge Agora (--no-ff)
1570+
pulls.squash_merge_pull_request_now=Aplicar Squash e Merge Agora
15601571
pulls.invalid_merge_option=Você não pode usar esta opção de merge neste pull request.
15611572
pulls.merge_conflict=O merge falhou: Houve um conflito ao fazer merge. Dica: Tente uma estratégia diferente
15621573
pulls.merge_conflict_summary=Mensagem de erro
@@ -2505,6 +2516,7 @@ users.allow_import_local=Pode importar repositórios locais
25052516
users.allow_create_organization=Pode criar organizações
25062517
users.update_profile=Atualizar conta de usuário
25072518
users.delete_account=Excluir conta de usuário
2519+
users.cannot_delete_self=Você não pode excluir você mesmo
25082520
users.still_own_repo=Este usuário ainda possui um ou mais repositórios. Exclua ou transfira esses repositórios primeiro.
25092521
users.still_has_org=Este usuário é membro de uma organização. Remova o usuário de qualquer organização primeiro.
25102522
users.still_own_packages=Este usuário ainda possui um ou mais pacotes. Exclua esses pacotes primeiro.

routers/api/v1/repo/release.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
api "code.gitea.io/gitea/modules/structs"
1616
"code.gitea.io/gitea/modules/web"
1717
"code.gitea.io/gitea/routers/api/v1/utils"
18-
releaseservice "code.gitea.io/gitea/services/release"
18+
release_service "code.gitea.io/gitea/services/release"
1919
)
2020

2121
// GetRelease get a single release of a repository
@@ -49,7 +49,7 @@ func GetRelease(ctx *context.APIContext) {
4949
// "$ref": "#/responses/notFound"
5050

5151
id := ctx.ParamsInt64(":id")
52-
release, err := models.GetReleaseByID(id)
52+
release, err := models.GetReleaseByID(ctx, id)
5353
if err != nil && !models.IsErrReleaseNotExist(err) {
5454
ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err)
5555
return
@@ -202,7 +202,7 @@ func CreateRelease(ctx *context.APIContext) {
202202
IsTag: false,
203203
Repo: ctx.Repo.Repository,
204204
}
205-
if err := releaseservice.CreateRelease(ctx.Repo.GitRepo, rel, nil, ""); err != nil {
205+
if err := release_service.CreateRelease(ctx.Repo.GitRepo, rel, nil, ""); err != nil {
206206
if models.IsErrReleaseAlreadyExist(err) {
207207
ctx.Error(http.StatusConflict, "ReleaseAlreadyExist", err)
208208
} else {
@@ -225,7 +225,7 @@ func CreateRelease(ctx *context.APIContext) {
225225
rel.Repo = ctx.Repo.Repository
226226
rel.Publisher = ctx.Doer
227227

228-
if err = releaseservice.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil {
228+
if err = release_service.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil {
229229
ctx.Error(http.StatusInternalServerError, "UpdateRelease", err)
230230
return
231231
}
@@ -271,7 +271,7 @@ func EditRelease(ctx *context.APIContext) {
271271

272272
form := web.GetForm(ctx).(*api.EditReleaseOption)
273273
id := ctx.ParamsInt64(":id")
274-
rel, err := models.GetReleaseByID(id)
274+
rel, err := models.GetReleaseByID(ctx, id)
275275
if err != nil && !models.IsErrReleaseNotExist(err) {
276276
ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err)
277277
return
@@ -300,12 +300,13 @@ func EditRelease(ctx *context.APIContext) {
300300
if form.IsPrerelease != nil {
301301
rel.IsPrerelease = *form.IsPrerelease
302302
}
303-
if err := releaseservice.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil {
303+
if err := release_service.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil {
304304
ctx.Error(http.StatusInternalServerError, "UpdateRelease", err)
305305
return
306306
}
307307

308-
rel, err = models.GetReleaseByID(id)
308+
// reload data from database
309+
rel, err = models.GetReleaseByID(ctx, id)
309310
if err != nil {
310311
ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err)
311312
return
@@ -346,7 +347,7 @@ func DeleteRelease(ctx *context.APIContext) {
346347
// "$ref": "#/responses/notFound"
347348

348349
id := ctx.ParamsInt64(":id")
349-
rel, err := models.GetReleaseByID(id)
350+
rel, err := models.GetReleaseByID(ctx, id)
350351
if err != nil && !models.IsErrReleaseNotExist(err) {
351352
ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err)
352353
return
@@ -356,7 +357,7 @@ func DeleteRelease(ctx *context.APIContext) {
356357
ctx.NotFound()
357358
return
358359
}
359-
if err := releaseservice.DeleteReleaseByID(ctx, id, ctx.Doer, false); err != nil {
360+
if err := release_service.DeleteReleaseByID(ctx, id, ctx.Doer, false); err != nil {
360361
ctx.Error(http.StatusInternalServerError, "DeleteReleaseByID", err)
361362
return
362363
}

0 commit comments

Comments
 (0)