diff --git a/models/repo/repo.go b/models/repo/repo.go index 5aae02c6d8059..f74c790245f66 100644 --- a/models/repo/repo.go +++ b/models/repo/repo.go @@ -320,6 +320,19 @@ func (repo *Repository) MarkAsBrokenEmpty() { repo.IsEmpty = true } +func (repo *Repository) MarkAsNormal() { + repo.IsEmpty = false + repo.Status = RepositoryReady +} + +func MarkBrokenRepoAsNormal(ctx context.Context, repo *Repository) error { + repo.MarkAsNormal() + if _, err := db.GetEngine(ctx).ID(repo.ID).Cols("status", "is_empty").Update(repo); err != nil { + return fmt.Errorf("update repository: %w", err) + } + return nil +} + // AfterLoad is invoked from XORM after setting the values of all fields of this object. func (repo *Repository) AfterLoad() { repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues diff --git a/services/context/repo.go b/services/context/repo.go index 127d31325867a..031568882d0ba 100644 --- a/services/context/repo.go +++ b/services/context/repo.go @@ -567,7 +567,7 @@ func RepoAssignment(ctx *Context) { ctx.Link == ctx.Repo.RepoLink+"/-/migrate/status" // Disable everything when the repo is being created - if ctx.Repo.Repository.IsBeingCreated() || ctx.Repo.Repository.IsBroken() { + if ctx.Repo.Repository.IsBeingCreated() { if !isHomeOrSettings { ctx.Redirect(ctx.Repo.RepoLink) } @@ -595,6 +595,13 @@ func RepoAssignment(ctx *Context) { return } + // The repository can be open but marked as broken + if ctx.Repo.Repository.IsBroken() { + if err = repo_model.MarkBrokenRepoAsNormal(ctx, ctx.Repo.Repository); err != nil { + log.Error("MarkBrokenRepoAsNormal: %v", err) + } + } + // Stop at this point when the repo is empty. if ctx.Repo.Repository.IsEmpty { return