Skip to content

Commit 30584a6

Browse files
authored
[API] make change repo settings work on empty repos (#15778) (#15789)
* API: Fix #15602 * Add TEST
1 parent 7871094 commit 30584a6

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed

integrations/api_repo_edit_test.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,14 @@ func getNewRepoEditOption(opts *api.EditRepoOption) *api.EditRepoOption {
130130

131131
func TestAPIRepoEdit(t *testing.T) {
132132
onGiteaRun(t, func(t *testing.T, u *url.URL) {
133+
bFalse, bTrue := false, true
134+
133135
user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User) // owner of the repo1 & repo16
134136
user3 := models.AssertExistsAndLoadBean(t, &models.User{ID: 3}).(*models.User) // owner of the repo3, is an org
135137
user4 := models.AssertExistsAndLoadBean(t, &models.User{ID: 4}).(*models.User) // owner of neither repos
136138
repo1 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository) // public repo
137139
repo3 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 3}).(*models.Repository) // public repo
140+
repo15 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 15}).(*models.Repository) // empty repo
138141
repo16 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 16}).(*models.Repository) // private repo
139142

140143
// Get user2's token
@@ -286,21 +289,33 @@ func TestAPIRepoEdit(t *testing.T) {
286289
// Test making a repo public that is private
287290
repo16 = models.AssertExistsAndLoadBean(t, &models.Repository{ID: 16}).(*models.Repository)
288291
assert.True(t, repo16.IsPrivate)
289-
private := false
290292
repoEditOption = &api.EditRepoOption{
291-
Private: &private,
293+
Private: &bFalse,
292294
}
293295
url = fmt.Sprintf("/api/v1/repos/%s/%s?token=%s", user2.Name, repo16.Name, token2)
294296
req = NewRequestWithJSON(t, "PATCH", url, &repoEditOption)
295297
_ = session.MakeRequest(t, req, http.StatusOK)
296298
repo16 = models.AssertExistsAndLoadBean(t, &models.Repository{ID: 16}).(*models.Repository)
297299
assert.False(t, repo16.IsPrivate)
298300
// Make it private again
299-
private = true
300-
repoEditOption.Private = &private
301+
repoEditOption.Private = &bTrue
301302
req = NewRequestWithJSON(t, "PATCH", url, &repoEditOption)
302303
_ = session.MakeRequest(t, req, http.StatusOK)
303304

305+
// Test to change empty repo
306+
assert.False(t, repo15.IsArchived)
307+
url = fmt.Sprintf("/api/v1/repos/%s/%s?token=%s", user2.Name, repo15.Name, token2)
308+
req = NewRequestWithJSON(t, "PATCH", url, &api.EditRepoOption{
309+
Archived: &bTrue,
310+
})
311+
_ = session.MakeRequest(t, req, http.StatusOK)
312+
repo15 = models.AssertExistsAndLoadBean(t, &models.Repository{ID: 15}).(*models.Repository)
313+
assert.True(t, repo15.IsArchived)
314+
req = NewRequestWithJSON(t, "PATCH", url, &api.EditRepoOption{
315+
Archived: &bFalse,
316+
})
317+
_ = session.MakeRequest(t, req, http.StatusOK)
318+
304319
// Test using org repo "user3/repo3" where user2 is a collaborator
305320
origRepoEditOption = getRepoEditOptionFromRepo(repo3)
306321
repoEditOption = getNewRepoEditOption(origRepoEditOption)

routers/api/v1/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@ func Routes() *web.Route {
716716
m.Group("/{username}/{reponame}", func() {
717717
m.Combo("").Get(reqAnyRepoReader(), repo.Get).
718718
Delete(reqToken(), reqOwner(), repo.Delete).
719-
Patch(reqToken(), reqAdmin(), context.RepoRefForAPI, bind(api.EditRepoOption{}), repo.Edit)
719+
Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), repo.Edit)
720720
m.Post("/transfer", reqOwner(), bind(api.TransferRepoOption{}), repo.Transfer)
721721
m.Combo("/notifications").
722722
Get(reqToken(), notify.ListRepoNotifications).

routers/api/v1/repo/repo.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
578578
repo.IsTemplate = *opts.Template
579579
}
580580

581-
if ctx.Repo.GitRepo == nil {
581+
if ctx.Repo.GitRepo == nil && !repo.IsEmpty {
582582
var err error
583583
ctx.Repo.GitRepo, err = git.OpenRepository(ctx.Repo.Repository.RepoPath())
584584
if err != nil {
@@ -589,13 +589,13 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
589589
}
590590

591591
// Default branch only updated if changed and exist or the repository is empty
592-
if opts.DefaultBranch != nil &&
593-
repo.DefaultBranch != *opts.DefaultBranch &&
594-
(ctx.Repo.Repository.IsEmpty || ctx.Repo.GitRepo.IsBranchExist(*opts.DefaultBranch)) {
595-
if err := ctx.Repo.GitRepo.SetDefaultBranch(*opts.DefaultBranch); err != nil {
596-
if !git.IsErrUnsupportedVersion(err) {
597-
ctx.Error(http.StatusInternalServerError, "SetDefaultBranch", err)
598-
return err
592+
if opts.DefaultBranch != nil && repo.DefaultBranch != *opts.DefaultBranch && (repo.IsEmpty || ctx.Repo.GitRepo.IsBranchExist(*opts.DefaultBranch)) {
593+
if !repo.IsEmpty {
594+
if err := ctx.Repo.GitRepo.SetDefaultBranch(*opts.DefaultBranch); err != nil {
595+
if !git.IsErrUnsupportedVersion(err) {
596+
ctx.Error(http.StatusInternalServerError, "SetDefaultBranch", err)
597+
return err
598+
}
599599
}
600600
}
601601
repo.DefaultBranch = *opts.DefaultBranch

0 commit comments

Comments
 (0)