|
@@ -422,6 +422,50 @@ func GetDiffRange(repoPath, beforeCommitID string, afterCommitID string, maxLine
|
|
|
return diff, nil
|
|
|
}
|
|
|
|
|
|
-func GetDiffCommit(repoPath, commitId string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) {
|
|
|
- return GetDiffRange(repoPath, "", commitId, maxLines, maxLineCharacteres, maxFiles)
|
|
|
+func GetRawDiff(repoPath, commitID, diffType string) (string, error) {
|
|
|
+ repo, err := git.OpenRepository(repoPath)
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+
|
|
|
+ commit, err := repo.GetCommit(commitID)
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+
|
|
|
+ var cmd *exec.Cmd
|
|
|
+ switch diffType {
|
|
|
+ case "diff":
|
|
|
+ if commit.ParentCount() == 0 {
|
|
|
+ cmd = exec.Command("git", "show", commitID)
|
|
|
+ } else {
|
|
|
+ c, _ := commit.Parent(0)
|
|
|
+ cmd = exec.Command("git", "diff", "-M", c.ID.String(), commitID)
|
|
|
+ }
|
|
|
+ case "patch":
|
|
|
+ if commit.ParentCount() == 0 {
|
|
|
+ cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", "--root", commitID)
|
|
|
+ } else {
|
|
|
+ c, _ := commit.Parent(0)
|
|
|
+ query := fmt.Sprintf("%s...%s", commitID, c.ID.String())
|
|
|
+ cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", query)
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return "", fmt.Errorf("Invalid diffType '%s'", diffType)
|
|
|
+ }
|
|
|
+
|
|
|
+ stderr := new(bytes.Buffer)
|
|
|
+
|
|
|
+ cmd.Dir = repoPath
|
|
|
+ cmd.Stderr = stderr
|
|
|
+
|
|
|
+ stdout, err := cmd.Output()
|
|
|
+ if err != nil {
|
|
|
+ return "", fmt.Errorf("%v - %s", err, stderr)
|
|
|
+ }
|
|
|
+ return string(stdout), nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) {
|
|
|
+ return GetDiffRange(repoPath, "", commitID, maxLines, maxLineCharacteres, maxFiles)
|
|
|
}
|