mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Add generic set type (#21408)
This PR adds a generic set type to get rid of maps used as sets. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -17,6 +17,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
	issues_model "code.gitea.io/gitea/models/issues"
 | 
			
		||||
	"code.gitea.io/gitea/models/unit"
 | 
			
		||||
	"code.gitea.io/gitea/modules/container"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/graceful"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
@@ -409,7 +410,7 @@ func checkConflicts(ctx context.Context, pr *issues_model.PullRequest, gitRepo *
 | 
			
		||||
				const appliedPatchPrefix = "Applied patch to '"
 | 
			
		||||
				const withConflicts = "' with conflicts."
 | 
			
		||||
 | 
			
		||||
				conflictMap := map[string]bool{}
 | 
			
		||||
				conflicts := make(container.Set[string])
 | 
			
		||||
 | 
			
		||||
				// Now scan the output from the command
 | 
			
		||||
				scanner := bufio.NewScanner(stderrReader)
 | 
			
		||||
@@ -418,7 +419,7 @@ func checkConflicts(ctx context.Context, pr *issues_model.PullRequest, gitRepo *
 | 
			
		||||
					if strings.HasPrefix(line, prefix) {
 | 
			
		||||
						conflict = true
 | 
			
		||||
						filepath := strings.TrimSpace(strings.Split(line[len(prefix):], ":")[0])
 | 
			
		||||
						conflictMap[filepath] = true
 | 
			
		||||
						conflicts.Add(filepath)
 | 
			
		||||
					} else if is3way && line == threewayFailed {
 | 
			
		||||
						conflict = true
 | 
			
		||||
					} else if strings.HasPrefix(line, errorPrefix) {
 | 
			
		||||
@@ -427,7 +428,7 @@ func checkConflicts(ctx context.Context, pr *issues_model.PullRequest, gitRepo *
 | 
			
		||||
							if strings.HasSuffix(line, suffix) {
 | 
			
		||||
								filepath := strings.TrimSpace(strings.TrimSuffix(line[len(errorPrefix):], suffix))
 | 
			
		||||
								if filepath != "" {
 | 
			
		||||
									conflictMap[filepath] = true
 | 
			
		||||
									conflicts.Add(filepath)
 | 
			
		||||
								}
 | 
			
		||||
								break
 | 
			
		||||
							}
 | 
			
		||||
@@ -436,18 +437,18 @@ func checkConflicts(ctx context.Context, pr *issues_model.PullRequest, gitRepo *
 | 
			
		||||
						conflict = true
 | 
			
		||||
						filepath := strings.TrimPrefix(strings.TrimSuffix(line, withConflicts), appliedPatchPrefix)
 | 
			
		||||
						if filepath != "" {
 | 
			
		||||
							conflictMap[filepath] = true
 | 
			
		||||
							conflicts.Add(filepath)
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					// only list 10 conflicted files
 | 
			
		||||
					if len(conflictMap) >= 10 {
 | 
			
		||||
					if len(conflicts) >= 10 {
 | 
			
		||||
						break
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if len(conflictMap) > 0 {
 | 
			
		||||
					pr.ConflictedFiles = make([]string, 0, len(conflictMap))
 | 
			
		||||
					for key := range conflictMap {
 | 
			
		||||
				if len(conflicts) > 0 {
 | 
			
		||||
					pr.ConflictedFiles = make([]string, 0, len(conflicts))
 | 
			
		||||
					for key := range conflicts {
 | 
			
		||||
						pr.ConflictedFiles = append(pr.ConflictedFiles, key)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user