]> source.dussan.org Git - gitea.git/commitdiff
Fix missing repository status when migrating repository via API (#9511)
authorLunny Xiao <xiaolunwen@gmail.com>
Fri, 27 Dec 2019 12:34:28 +0000 (20:34 +0800)
committerLauris BH <lauris@nix.lv>
Fri, 27 Dec 2019 12:34:28 +0000 (14:34 +0200)
* Fix API migration wrong repository status

* Force push for ci

models/repo.go
routers/api/v1/repo/repo.go

index 2d31184d6d6f689c4b0138d429b584cfa2f2c4ba..582df7613a480843947132f3e6698fba3903569f 100644 (file)
@@ -1781,6 +1781,12 @@ func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
        return sess.Commit()
 }
 
+// UpdateRepositoryStatus updates a repository's status
+func UpdateRepositoryStatus(repoID int64, status RepositoryStatus) error {
+       _, err := x.Exec("UPDATE repository SET status = ? WHERE id = ?", status, repoID)
+       return err
+}
+
 // UpdateRepositoryUpdatedTime updates a repository's updated time
 func UpdateRepositoryUpdatedTime(repoID int64, updateTime time.Time) error {
        _, err := x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID)
index a4417107ee3848877bf7dc40f6f3de687dd7e4dc..8edb53a61f8ea8862cc88a6cc5a71133a4c19d25 100644 (file)
@@ -6,6 +6,8 @@
 package repo
 
 import (
+       "bytes"
+       "errors"
        "fmt"
        "net/http"
        "net/url"
@@ -431,10 +433,31 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
                opts.Releases = false
        }
 
-       repo, err := migrations.MigrateRepository(ctx.User, ctxUser.Name, opts)
-       if err == nil {
-               notification.NotifyCreateRepository(ctx.User, ctxUser, repo)
+       var repo *models.Repository
+       defer func() {
+               if e := recover(); e != nil {
+                       var buf bytes.Buffer
+                       fmt.Fprintf(&buf, "Handler crashed with error: %v", log.Stack(2))
+                       err = errors.New(buf.String())
+               }
+
+               if err == nil {
+                       repo.Status = models.RepositoryReady
+                       if err := models.UpdateRepositoryStatus(repo.ID, repo.Status); err == nil {
+                               notification.NotifyMigrateRepository(ctx.User, ctxUser, repo)
+                               return
+                       }
+               }
 
+               if repo != nil {
+                       if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil {
+                               log.Error("DeleteRepository: %v", errDelete)
+                       }
+               }
+       }()
+
+       repo, err = migrations.MigrateRepository(ctx.User, ctxUser.Name, opts)
+       if err == nil {
                log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName)
                ctx.JSON(201, repo.APIFormat(models.AccessModeAdmin))
                return