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)
package repo
import (
+ "bytes"
+ "errors"
"fmt"
"net/http"
"net/url"
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