mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 09:31:53 +01:00 
			
		
		
		
	This commit adds the "You recently pushed to branch X" alert also to PR overview, as opposed to only the repository's home page. GitHub also shows this alert on the PR list, as well as the home page. --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io>
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2025 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package repo
 | |
| 
 | |
| import (
 | |
| 	git_model "code.gitea.io/gitea/models/git"
 | |
| 	access_model "code.gitea.io/gitea/models/perm/access"
 | |
| 	unit_model "code.gitea.io/gitea/models/unit"
 | |
| 	"code.gitea.io/gitea/modules/log"
 | |
| 	"code.gitea.io/gitea/services/context"
 | |
| 	repo_service "code.gitea.io/gitea/services/repository"
 | |
| )
 | |
| 
 | |
| type RecentBranchesPromptDataStruct struct {
 | |
| 	RecentlyPushedNewBranches []*git_model.RecentlyPushedNewBranch
 | |
| }
 | |
| 
 | |
| func prepareRecentlyPushedNewBranches(ctx *context.Context) {
 | |
| 	if ctx.Doer == nil {
 | |
| 		return
 | |
| 	}
 | |
| 	if err := ctx.Repo.Repository.GetBaseRepo(ctx); err != nil {
 | |
| 		log.Error("GetBaseRepo: %v", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	opts := git_model.FindRecentlyPushedNewBranchesOptions{
 | |
| 		Repo:     ctx.Repo.Repository,
 | |
| 		BaseRepo: ctx.Repo.Repository,
 | |
| 	}
 | |
| 	if ctx.Repo.Repository.IsFork {
 | |
| 		opts.BaseRepo = ctx.Repo.Repository.BaseRepo
 | |
| 	}
 | |
| 
 | |
| 	baseRepoPerm, err := access_model.GetUserRepoPermission(ctx, opts.BaseRepo, ctx.Doer)
 | |
| 	if err != nil {
 | |
| 		log.Error("GetUserRepoPermission: %v", err)
 | |
| 		return
 | |
| 	}
 | |
| 	if !opts.Repo.CanContentChange() || !opts.BaseRepo.CanContentChange() {
 | |
| 		return
 | |
| 	}
 | |
| 	if !opts.BaseRepo.UnitEnabled(ctx, unit_model.TypePullRequests) || !baseRepoPerm.CanRead(unit_model.TypePullRequests) {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	var finalBranches []*git_model.RecentlyPushedNewBranch
 | |
| 	branches, err := git_model.FindRecentlyPushedNewBranches(ctx, ctx.Doer, opts)
 | |
| 	if err != nil {
 | |
| 		log.Error("FindRecentlyPushedNewBranches failed: %v", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	for _, branch := range branches {
 | |
| 		divergingInfo, err := repo_service.GetBranchDivergingInfo(ctx,
 | |
| 			branch.BranchRepo, branch.BranchName, // "base" repo for diverging info
 | |
| 			opts.BaseRepo, opts.BaseRepo.DefaultBranch, // "head" repo for diverging info
 | |
| 		)
 | |
| 		if err != nil {
 | |
| 			log.Error("GetBranchDivergingInfo failed: %v", err)
 | |
| 			continue
 | |
| 		}
 | |
| 		branchRepoHasNewCommits := divergingInfo.BaseHasNewCommits
 | |
| 		baseRepoCommitsBehind := divergingInfo.HeadCommitsBehind
 | |
| 		if branchRepoHasNewCommits || baseRepoCommitsBehind > 0 {
 | |
| 			finalBranches = append(finalBranches, branch)
 | |
| 		}
 | |
| 	}
 | |
| 	if len(finalBranches) > 0 {
 | |
| 		ctx.Data["RecentBranchesPromptData"] = RecentBranchesPromptDataStruct{finalBranches}
 | |
| 	}
 | |
| }
 |