0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-07-18 06:32:51 +02:00

fix getDiffLineSectionInfo

This commit is contained in:
wxiaoguang 2025-07-12 00:24:00 +08:00
parent 8f8ca4e510
commit 806f915b3c
2 changed files with 17 additions and 9 deletions

View File

@ -99,9 +99,9 @@ func GetRepoRawDiffForFile(repo *Repository, startCommit, endCommit string, diff
return nil return nil
} }
// ParseDiffHunkString parse the diffhunk content and return // ParseDiffHunkString parse the diff hunk content and return
func ParseDiffHunkString(diffhunk string) (leftLine, leftHunk, rightLine, righHunk int) { func ParseDiffHunkString(diffHunk string) (leftLine, leftHunk, rightLine, rightHunk int) {
ss := strings.Split(diffhunk, "@@") ss := strings.Split(diffHunk, "@@")
ranges := strings.Split(ss[1][1:], " ") ranges := strings.Split(ss[1][1:], " ")
leftRange := strings.Split(ranges[0], ",") leftRange := strings.Split(ranges[0], ",")
leftLine, _ = strconv.Atoi(leftRange[0][1:]) leftLine, _ = strconv.Atoi(leftRange[0][1:])
@ -112,14 +112,21 @@ func ParseDiffHunkString(diffhunk string) (leftLine, leftHunk, rightLine, righHu
rightRange := strings.Split(ranges[1], ",") rightRange := strings.Split(ranges[1], ",")
rightLine, _ = strconv.Atoi(rightRange[0]) rightLine, _ = strconv.Atoi(rightRange[0])
if len(rightRange) > 1 { if len(rightRange) > 1 {
righHunk, _ = strconv.Atoi(rightRange[1]) rightHunk, _ = strconv.Atoi(rightRange[1])
} }
} else { } else {
log.Debug("Parse line number failed: %v", diffhunk) log.Debug("Parse line number failed: %v", diffHunk)
rightLine = leftLine rightLine = leftLine
righHunk = leftHunk rightHunk = leftHunk
} }
return leftLine, leftHunk, rightLine, righHunk if rightLine == 0 {
// "git diff" outputs 2 different formats for the same change "OLD" => "A\nB\nC"
// * "@@ -1 +1,3 @@": the expected result
// * "@@ -1,1 +0,4 @@": the "0" means "insert before the first line"
rightLine++
rightHunk--
}
return leftLine, leftHunk, rightLine, rightHunk
} }
// Example: @@ -1,8 +1,9 @@ => [..., 1, 8, 1, 9] // Example: @@ -1,8 +1,9 @@ => [..., 1, 8, 1, 9]

View File

@ -179,7 +179,7 @@ func (d *DiffLine) GetExpandDirection() DiffLineExpandDirection {
} }
func getDiffLineSectionInfo(treePath, line string, lastLeftIdx, lastRightIdx int) *DiffLineSectionInfo { func getDiffLineSectionInfo(treePath, line string, lastLeftIdx, lastRightIdx int) *DiffLineSectionInfo {
leftLine, leftHunk, rightLine, righHunk := git.ParseDiffHunkString(line) leftLine, leftHunk, rightLine, rightHunk := git.ParseDiffHunkString(line)
return &DiffLineSectionInfo{ return &DiffLineSectionInfo{
Path: treePath, Path: treePath,
@ -188,7 +188,7 @@ func getDiffLineSectionInfo(treePath, line string, lastLeftIdx, lastRightIdx int
LeftIdx: leftLine, LeftIdx: leftLine,
RightIdx: rightLine, RightIdx: rightLine,
LeftHunkSize: leftHunk, LeftHunkSize: leftHunk,
RightHunkSize: righHunk, RightHunkSize: rightHunk,
} }
} }
@ -856,6 +856,7 @@ func parseHunks(ctx context.Context, curFile *DiffFile, maxLines, maxLineCharact
lastLeftIdx = -1 lastLeftIdx = -1
curFile.Sections = append(curFile.Sections, curSection) curFile.Sections = append(curFile.Sections, curSection)
// FIXME: the "-1" can't be right, these "line idx" are all 1-based, maybe there are other bugs that covers this bug.
lineSectionInfo := getDiffLineSectionInfo(curFile.Name, line, leftLine-1, rightLine-1) lineSectionInfo := getDiffLineSectionInfo(curFile.Name, line, leftLine-1, rightLine-1)
diffLine := &DiffLine{ diffLine := &DiffLine{
Type: DiffLineSection, Type: DiffLineSection,