Skip to content

Commit a3928fd

Browse files
lunnylafriks
authored andcommitted
Fix missing repository status when migrating repository via API (#9511)
* Fix API migration wrong repository status * Force push for ci
1 parent f0bda12 commit a3928fd

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

models/repo.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,12 @@ func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
17811781
return sess.Commit()
17821782
}
17831783

1784+
// UpdateRepositoryStatus updates a repository's status
1785+
func UpdateRepositoryStatus(repoID int64, status RepositoryStatus) error {
1786+
_, err := x.Exec("UPDATE repository SET status = ? WHERE id = ?", status, repoID)
1787+
return err
1788+
}
1789+
17841790
// UpdateRepositoryUpdatedTime updates a repository's updated time
17851791
func UpdateRepositoryUpdatedTime(repoID int64, updateTime time.Time) error {
17861792
_, err := x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID)

routers/api/v1/repo/repo.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package repo
77

88
import (
9+
"bytes"
10+
"errors"
911
"fmt"
1012
"net/http"
1113
"net/url"
@@ -431,10 +433,31 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
431433
opts.Releases = false
432434
}
433435

434-
repo, err := migrations.MigrateRepository(ctx.User, ctxUser.Name, opts)
435-
if err == nil {
436-
notification.NotifyCreateRepository(ctx.User, ctxUser, repo)
436+
var repo *models.Repository
437+
defer func() {
438+
if e := recover(); e != nil {
439+
var buf bytes.Buffer
440+
fmt.Fprintf(&buf, "Handler crashed with error: %v", log.Stack(2))
441+
err = errors.New(buf.String())
442+
}
443+
444+
if err == nil {
445+
repo.Status = models.RepositoryReady
446+
if err := models.UpdateRepositoryStatus(repo.ID, repo.Status); err == nil {
447+
notification.NotifyMigrateRepository(ctx.User, ctxUser, repo)
448+
return
449+
}
450+
}
437451

452+
if repo != nil {
453+
if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil {
454+
log.Error("DeleteRepository: %v", errDelete)
455+
}
456+
}
457+
}()
458+
459+
repo, err = migrations.MigrateRepository(ctx.User, ctxUser.Name, opts)
460+
if err == nil {
438461
log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName)
439462
ctx.JSON(201, repo.APIFormat(models.AccessModeAdmin))
440463
return

0 commit comments

Comments
 (0)