|
@@ -188,7 +188,7 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) tem
|
|
|
type DiffFile struct {
|
|
|
Name string
|
|
|
OldName string
|
|
|
- Index int
|
|
|
+ Index string // 40-byte SHA, Changed/New: new SHA; Deleted: old SHA
|
|
|
Addition, Deletion int
|
|
|
Type DiffFileType
|
|
|
IsCreated bool
|
|
@@ -331,7 +331,6 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
|
|
|
|
|
|
curFile = &DiffFile{
|
|
|
Name: a,
|
|
|
- Index: len(diff.Files) + 1,
|
|
|
Type: DIFF_FILE_CHANGE,
|
|
|
Sections: make([]*DiffSection, 0, 10),
|
|
|
}
|
|
@@ -343,7 +342,8 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
|
|
|
}
|
|
|
curFileLinesCount = 0
|
|
|
|
|
|
- // Check file diff type and is submodule.
|
|
|
+ // Check file diff type and submodule.
|
|
|
+ CHECK_TYPE:
|
|
|
for {
|
|
|
line, err := input.ReadString('\n')
|
|
|
if err != nil {
|
|
@@ -358,22 +358,25 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*
|
|
|
case strings.HasPrefix(line, "new file"):
|
|
|
curFile.Type = DIFF_FILE_ADD
|
|
|
curFile.IsCreated = true
|
|
|
+ curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n")
|
|
|
case strings.HasPrefix(line, "deleted"):
|
|
|
curFile.Type = DIFF_FILE_DEL
|
|
|
curFile.IsDeleted = true
|
|
|
+ curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n")
|
|
|
case strings.HasPrefix(line, "index"):
|
|
|
- curFile.Type = DIFF_FILE_CHANGE
|
|
|
+ if curFile.IsDeleted {
|
|
|
+ curFile.Index = line[6:46]
|
|
|
+ } else {
|
|
|
+ curFile.Index = line[49:88]
|
|
|
+ }
|
|
|
+ break CHECK_TYPE
|
|
|
case strings.HasPrefix(line, "similarity index 100%"):
|
|
|
curFile.Type = DIFF_FILE_RENAME
|
|
|
curFile.IsRenamed = true
|
|
|
curFile.OldName = curFile.Name
|
|
|
curFile.Name = b
|
|
|
- }
|
|
|
- if curFile.Type > 0 {
|
|
|
- if strings.HasSuffix(line, " 160000\n") {
|
|
|
- curFile.IsSubmodule = true
|
|
|
- }
|
|
|
- break
|
|
|
+ curFile.Index = b
|
|
|
+ break CHECK_TYPE
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -423,13 +426,13 @@ func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxL
|
|
|
if len(beforeCommitID) == 0 {
|
|
|
// First commit of repository.
|
|
|
if commit.ParentCount() == 0 {
|
|
|
- cmd = exec.Command("git", "show", afterCommitID)
|
|
|
+ cmd = exec.Command("git", "show", "--full-index", afterCommitID)
|
|
|
} else {
|
|
|
c, _ := commit.Parent(0)
|
|
|
- cmd = exec.Command("git", "diff", "-M", c.ID.String(), afterCommitID)
|
|
|
+ cmd = exec.Command("git", "diff", "--full-index", "-M", c.ID.String(), afterCommitID)
|
|
|
}
|
|
|
} else {
|
|
|
- cmd = exec.Command("git", "diff", "-M", beforeCommitID, afterCommitID)
|
|
|
+ cmd = exec.Command("git", "diff", "--full-index", "-M", beforeCommitID, afterCommitID)
|
|
|
}
|
|
|
cmd.Dir = repoPath
|
|
|
cmd.Stderr = os.Stderr
|