diff --git a/models/task.go b/models/task.go index 0720d2861..5528573ca 100644 --- a/models/task.go +++ b/models/task.go @@ -181,12 +181,12 @@ 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, - }) +// HasFinishedMigratingTask returns if a finished migration task exists for the repo. +func HasFinishedMigratingTask(repoID int64) (bool, error) { + return db.GetEngine(db.DefaultContext). + Where("repo_id=? AND type=? AND status=?", repoID, structs.TaskTypeMigrateRepo, structs.TaskStatusFinished). + Table("task"). + Exist() } // GetMigratingTaskByID returns the migrating task by repo's id diff --git a/modules/context/repo.go b/modules/context/repo.go index c5e3a69e5..4a1e9aa9e 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -371,14 +371,14 @@ func repoAssignment(ctx *Context, repo *repo_model.Repository) { if repo.IsMirror { - // 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) + // Check if the mirror has finsihed migrationg, only then we can + // lookup the mirror informtation the database. + finishedMigrating, err := models.HasFinishedMigratingTask(repo.ID) if err != nil { - ctx.ServerError("GetMirrorByRepoID", err) + ctx.ServerError("HasFinishedMigratingTask", err) return } - if !hasTask { + if finishedMigrating { ctx.Repo.Mirror, err = repo_model.GetMirrorByRepoID(repo.ID) if err != nil { ctx.ServerError("GetMirrorByRepoID", err)