@ -223,16 +223,37 @@ func prepareRecentlyPushedNewBranches(ctx *context.Context) {
@@ -223,16 +223,37 @@ func prepareRecentlyPushedNewBranches(ctx *context.Context) {
}
}
func updateContextRepoEmptyAndStatus ( ctx * context . Context , empty bool , status repo_model . RepositoryStatus ) {
ctx . Repo . Repository . IsEmpty = empty
if ctx . Repo . Repository . Status == repo_model . RepositoryReady || ctx . Repo . Repository . Status == repo_model . RepositoryBroken {
ctx . Repo . Repository . Status = status // only handle ready and broken status, leave other status as-is
}
if err := repo_model . UpdateRepositoryCols ( ctx , ctx . Repo . Repository , "is_empty" , "status" ) ; err != nil {
ctx . ServerError ( "updateContextRepoEmptyAndStatus: UpdateRepositoryCols" , err )
return
}
}
func handleRepoEmptyOrBroken ( ctx * context . Context ) {
showEmpty := true
var err error
if ctx . Repo . GitRepo != nil {
showEmpty , err = ctx . Repo . GitRepo . IsEmpty ( )
reallyEmpty , err : = ctx . Repo . GitRepo . IsEmpty ( )
if err != nil {
showEmpty = true // the repo is broken
updateContextRepoEmptyAndStatus ( ctx , true , repo_model . RepositoryBroken )
log . Error ( "GitRepo.IsEmpty: %v" , err )
ctx . Repo . Repository . Status = repo_model . RepositoryBroken
showEmpty = true
ctx . Flash . Error ( ctx . Tr ( "error.occurred" ) , true )
} else if reallyEmpty {
showEmpty = true // the repo is really empty
updateContextRepoEmptyAndStatus ( ctx , true , repo_model . RepositoryReady )
} else if ctx . Repo . Commit == nil {
showEmpty = true // it is not really empty, but there is no branch
// at the moment, other repo units like "actions" are not able to handle such case,
// so we just mark the repo as empty to prevent from displaying these units.
updateContextRepoEmptyAndStatus ( ctx , true , repo_model . RepositoryReady )
} else {
// the repo is actually not empty and has branches, need to update the database later
showEmpty = false
}
}
if showEmpty {
@ -240,18 +261,11 @@ func handleRepoEmptyOrBroken(ctx *context.Context) {
@@ -240,18 +261,11 @@ func handleRepoEmptyOrBroken(ctx *context.Context) {
return
}
// the repo is not really empty, so we should update the modal in database
// such problem may be caused by:
// 1) an error occurs during pushing/receiving. 2) the user replaces an empty git repo manually
// and even more: the IsEmpty flag is deeply broken and should be removed with the UI changed to manage to cope with empty repos.
// it's possible for a repository to be non-empty by that flag but still 500
// because there are no branches - only tags -or the default branch is non-extant as it has been 0-pushed.
ctx . Repo . Repository . IsEmpty = false
if err = repo_model . UpdateRepositoryCols ( ctx , ctx . Repo . Repository , "is_empty" ) ; err != nil {
ctx . ServerError ( "UpdateRepositoryCols" , err )
return
}
if err = repo_module . UpdateRepoSize ( ctx , ctx . Repo . Repository ) ; err != nil {
// The repo is not really empty, so we should update the model in database, such problem may be caused by:
// 1) an error occurs during pushing/receiving.
// 2) the user replaces an empty git repo manually.
updateContextRepoEmptyAndStatus ( ctx , false , repo_model . RepositoryReady )
if err := repo_module . UpdateRepoSize ( ctx , ctx . Repo . Repository ) ; err != nil {
ctx . ServerError ( "UpdateRepoSize" , err )
return
}