mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	Allow adding new files to an empty repo (#24164)

This commit is contained in:
		| @@ -184,6 +184,9 @@ func (r *Repository) CanCreateIssueDependencies(user *user_model.User, isPull bo | ||||
|  | ||||
| // GetCommitsCount returns cached commit count for current view | ||||
| func (r *Repository) GetCommitsCount() (int64, error) { | ||||
| 	if r.Commit == nil { | ||||
| 		return 0, nil | ||||
| 	} | ||||
| 	var contextName string | ||||
| 	if r.IsViewBranch { | ||||
| 		contextName = r.BranchName | ||||
| @@ -642,8 +645,7 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { | ||||
| 	if err != nil { | ||||
| 		if strings.Contains(err.Error(), "repository does not exist") || strings.Contains(err.Error(), "no such file or directory") { | ||||
| 			log.Error("Repository %-v has a broken repository on the file system: %s Error: %v", ctx.Repo.Repository, ctx.Repo.Repository.RepoPath(), err) | ||||
| 			ctx.Repo.Repository.Status = repo_model.RepositoryBroken | ||||
| 			ctx.Repo.Repository.IsEmpty = true | ||||
| 			ctx.Repo.Repository.MarkAsBrokenEmpty() | ||||
| 			ctx.Data["BranchName"] = ctx.Repo.Repository.DefaultBranch | ||||
| 			// Only allow access to base of repo or settings | ||||
| 			if !isHomeOrSettings { | ||||
| @@ -689,7 +691,7 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { | ||||
| 	ctx.Data["BranchesCount"] = len(brs) | ||||
|  | ||||
| 	// If not branch selected, try default one. | ||||
| 	// If default branch doesn't exists, fall back to some other branch. | ||||
| 	// If default branch doesn't exist, fall back to some other branch. | ||||
| 	if len(ctx.Repo.BranchName) == 0 { | ||||
| 		if len(ctx.Repo.Repository.DefaultBranch) > 0 && gitRepo.IsBranchExist(ctx.Repo.Repository.DefaultBranch) { | ||||
| 			ctx.Repo.BranchName = ctx.Repo.Repository.DefaultBranch | ||||
| @@ -878,6 +880,10 @@ func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context | ||||
| 	return func(ctx *Context) (cancel context.CancelFunc) { | ||||
| 		// Empty repository does not have reference information. | ||||
| 		if ctx.Repo.Repository.IsEmpty { | ||||
| 			// assume the user is viewing the (non-existent) default branch | ||||
| 			ctx.Repo.IsViewBranch = true | ||||
| 			ctx.Repo.BranchName = ctx.Repo.Repository.DefaultBranch | ||||
| 			ctx.Data["TreePath"] = "" | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| @@ -907,27 +913,30 @@ func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context | ||||
| 			refName = ctx.Repo.Repository.DefaultBranch | ||||
| 			if !ctx.Repo.GitRepo.IsBranchExist(refName) { | ||||
| 				brs, _, err := ctx.Repo.GitRepo.GetBranchNames(0, 0) | ||||
| 				if err != nil { | ||||
| 					ctx.ServerError("GetBranches", err) | ||||
| 					return | ||||
| 				if err == nil && len(brs) != 0 { | ||||
| 					refName = brs[0] | ||||
| 				} else if len(brs) == 0 { | ||||
| 					err = fmt.Errorf("No branches in non-empty repository %s", | ||||
| 						ctx.Repo.GitRepo.Path) | ||||
| 					ctx.ServerError("GetBranches", err) | ||||
| 					return | ||||
| 					log.Error("No branches in non-empty repository %s", ctx.Repo.GitRepo.Path) | ||||
| 					ctx.Repo.Repository.MarkAsBrokenEmpty() | ||||
| 				} else { | ||||
| 					log.Error("GetBranches error: %v", err) | ||||
| 					ctx.Repo.Repository.MarkAsBrokenEmpty() | ||||
| 				} | ||||
| 				refName = brs[0] | ||||
| 			} | ||||
| 			ctx.Repo.RefName = refName | ||||
| 			ctx.Repo.BranchName = refName | ||||
| 			ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetBranchCommit(refName) | ||||
| 			if err != nil { | ||||
| 			if err == nil { | ||||
| 				ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() | ||||
| 			} else if strings.Contains(err.Error(), "fatal: not a git repository") || strings.Contains(err.Error(), "object does not exist") { | ||||
| 				// if the repository is broken, we can continue to the handler code, to show "Settings -> Delete Repository" for end users | ||||
| 				log.Error("GetBranchCommit: %v", err) | ||||
| 				ctx.Repo.Repository.MarkAsBrokenEmpty() | ||||
| 			} else { | ||||
| 				ctx.ServerError("GetBranchCommit", err) | ||||
| 				return | ||||
| 			} | ||||
| 			ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() | ||||
| 			ctx.Repo.IsViewBranch = true | ||||
|  | ||||
| 		} else { | ||||
| 			refName = getRefName(ctx, refType) | ||||
| 			ctx.Repo.RefName = refName | ||||
|   | ||||
		Reference in New Issue
	
	Block a user