mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 09:31:53 +01:00 
			
		
		
		
	
							parent
							
								
									6f5748c507
								
							
						
					
					
						commit
						d3b0bc22c0
					
				| @ -115,7 +115,25 @@ func nonGenesisChanges(ctx context.Context, repo *repo_model.Repository, revisio | ||||
| 	var changes internal.RepoChanges | ||||
| 	var err error | ||||
| 	updatedFilenames := make([]string, 0, 10) | ||||
| 	for _, line := range strings.Split(stdout, "\n") { | ||||
| 	objectFormat := git.ObjectFormatFromName(repo.ObjectFormatName) | ||||
| 
 | ||||
| 	updateChanges := func() error { | ||||
| 		cmd := git.NewCommand(ctx, "ls-tree", "--full-tree", "-l").AddDynamicArguments(revision). | ||||
| 			AddDashesAndList(updatedFilenames...) | ||||
| 		lsTreeStdout, _, err := cmd.RunStdBytes(&git.RunOpts{Dir: repo.RepoPath()}) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		updates, err1 := parseGitLsTreeOutput(objectFormat, lsTreeStdout) | ||||
| 		if err1 != nil { | ||||
| 			return err1 | ||||
| 		} | ||||
| 		changes.Updates = append(changes.Updates, updates...) | ||||
| 		return nil | ||||
| 	} | ||||
| 	lines := strings.Split(stdout, "\n") | ||||
| 	for _, line := range lines { | ||||
| 		line = strings.TrimSpace(line) | ||||
| 		if len(line) == 0 { | ||||
| 			continue | ||||
| @ -163,17 +181,22 @@ func nonGenesisChanges(ctx context.Context, repo *repo_model.Repository, revisio | ||||
| 		default: | ||||
| 			log.Warn("Unrecognized status: %c (line=%s)", status, line) | ||||
| 		} | ||||
| 
 | ||||
| 		// According to https://learn.microsoft.com/en-us/troubleshoot/windows-client/shell-experience/command-line-string-limitation#more-information | ||||
| 		// the command line length should less than 8191 characters, assume filepath is 256, then 8191/256 = 31, so we use 30 | ||||
| 		if len(updatedFilenames) >= 30 { | ||||
| 			if err := updateChanges(); err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 			updatedFilenames = updatedFilenames[0:0] | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	cmd := git.NewCommand(ctx, "ls-tree", "--full-tree", "-l").AddDynamicArguments(revision). | ||||
| 		AddDashesAndList(updatedFilenames...) | ||||
| 	lsTreeStdout, _, err := cmd.RunStdBytes(&git.RunOpts{Dir: repo.RepoPath()}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	if len(updatedFilenames) > 0 { | ||||
| 		if err := updateChanges(); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	objectFormat := git.ObjectFormatFromName(repo.ObjectFormatName) | ||||
| 
 | ||||
| 	changes.Updates, err = parseGitLsTreeOutput(objectFormat, lsTreeStdout) | ||||
| 	return &changes, err | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user