mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Fix issue with DiffIndex on initial commit (#11677)
Unfortunately #11614 introduced a bug whereby the initial commit of a repository could not be seen due to there being no parent commit to create a clear diff from. Here we create a diffstat from the difference between the parentless SHA and the SHA of the empty tree - a constant known to git. (With thanks to @L0veSunshine for informing me of this SHA) Thanks to @a1012112796 for initial attempt to fix. Fix #11650 Closes #11674 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-Authored-By: L0veSunshine <xuan199651@gmail.com>
This commit is contained in:
		| @@ -17,6 +17,9 @@ import ( | |||||||
| // EmptySHA defines empty git SHA | // EmptySHA defines empty git SHA | ||||||
| const EmptySHA = "0000000000000000000000000000000000000000" | const EmptySHA = "0000000000000000000000000000000000000000" | ||||||
|  |  | ||||||
|  | // EmptyTreeSHA is the SHA of an empty tree | ||||||
|  | const EmptyTreeSHA = "4b825dc642cb6eb9a060e54bf8d69288fbee4904" | ||||||
|  |  | ||||||
| // SHAPattern can be used to determine if a string is an valid sha | // SHAPattern can be used to determine if a string is an valid sha | ||||||
| var SHAPattern = regexp.MustCompile(`^[0-9a-f]{4,40}$`) | var SHAPattern = regexp.MustCompile(`^[0-9a-f]{4,40}$`) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -664,7 +664,7 @@ func GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID | |||||||
| 	ctx, cancel := context.WithCancel(git.DefaultContext) | 	ctx, cancel := context.WithCancel(git.DefaultContext) | ||||||
| 	defer cancel() | 	defer cancel() | ||||||
| 	var cmd *exec.Cmd | 	var cmd *exec.Cmd | ||||||
| 	if len(beforeCommitID) == 0 && commit.ParentCount() == 0 { | 	if (len(beforeCommitID) == 0 || beforeCommitID == git.EmptySHA) && commit.ParentCount() == 0 { | ||||||
| 		cmd = exec.CommandContext(ctx, git.GitExecutable, "show", afterCommitID) | 		cmd = exec.CommandContext(ctx, git.GitExecutable, "show", afterCommitID) | ||||||
| 	} else { | 	} else { | ||||||
| 		actualBeforeCommitID := beforeCommitID | 		actualBeforeCommitID := beforeCommitID | ||||||
| @@ -711,7 +711,11 @@ func GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID | |||||||
| 		return nil, fmt.Errorf("Wait: %v", err) | 		return nil, fmt.Errorf("Wait: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	diff.NumFiles, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(repoPath, beforeCommitID+"..."+afterCommitID) | 	shortstatArgs := []string{beforeCommitID + "..." + afterCommitID} | ||||||
|  | 	if len(beforeCommitID) == 0 || beforeCommitID == git.EmptySHA { | ||||||
|  | 		shortstatArgs = []string{git.EmptyTreeSHA, afterCommitID} | ||||||
|  | 	} | ||||||
|  | 	diff.NumFiles, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(repoPath, shortstatArgs...) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user