diff --git a/models/task.go b/models/task.go index bade1a639d..0720d28610 100644 --- a/models/task.go +++ b/models/task.go @@ -181,6 +181,14 @@ func GetMigratingTask(repoID int64) (*Task, error) { return &task, nil } +// HasMigratingTask returns if migrating task exist for repo. +func HasMigratingTask(repoID int64) (bool, error) { + return db.GetEngine(db.DefaultContext).Exist(&Task{ + RepoID: repoID, + Type: structs.TaskTypeMigrateRepo, + }) +} + // GetMigratingTaskByID returns the migrating task by repo's id func GetMigratingTaskByID(id, doerID int64) (*Task, *migration.MigrateOptions, error) { task := Task{ diff --git a/modules/context/repo.go b/modules/context/repo.go index b2c9a21f8e..c5e3a69e5c 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -370,15 +370,24 @@ func repoAssignment(ctx *Context, repo *repo_model.Repository) { ctx.Data["Permission"] = &ctx.Repo.Permission if repo.IsMirror { - var err error - ctx.Repo.Mirror, err = repo_model.GetMirrorByRepoID(repo.ID) + + // Check if there's a migrating task. + // If it does exist, don't fetch the Mirror from the database as it doesn't exist yet. + hasTask, err := models.HasMigratingTask(repo.ID) if err != nil { ctx.ServerError("GetMirrorByRepoID", err) return } - ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune - ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval - ctx.Data["Mirror"] = ctx.Repo.Mirror + if !hasTask { + ctx.Repo.Mirror, err = repo_model.GetMirrorByRepoID(repo.ID) + if err != nil { + ctx.ServerError("GetMirrorByRepoID", err) + return + } + ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune + ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval + ctx.Data["Mirror"] = ctx.Repo.Mirror + } } pushMirrors, err := repo_model.GetPushMirrorsByRepoID(repo.ID)