summaryrefslogtreecommitdiffstats
path: root/models/git_diff.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/git_diff.go')
-rw-r--r--models/git_diff.go25
1 files changed, 17 insertions, 8 deletions
diff --git a/models/git_diff.go b/models/git_diff.go
index 4b4d1234dd..21a624de5f 100644
--- a/models/git_diff.go
+++ b/models/git_diff.go
@@ -175,25 +175,30 @@ func ParsePatch(pid int64, cmd *exec.Cmd, reader io.Reader) (*Diff, error) {
return diff, nil
}
-func GetDiff(repoPath, commitid string) (*Diff, error) {
+func GetDiffRange(repoPath, beforeCommitId string, afterCommitId string) (*Diff, error) {
repo, err := git.OpenRepository(repoPath)
if err != nil {
return nil, err
}
- commit, err := repo.GetCommit(commitid)
+ commit, err := repo.GetCommit(afterCommitId)
if err != nil {
return nil, err
}
rd, wr := io.Pipe()
var cmd *exec.Cmd
- // First commit of repository.
- if commit.ParentCount() == 0 {
- cmd = exec.Command("git", "show", commitid)
+ // if "after" commit given
+ if beforeCommitId == "" {
+ // First commit of repository.
+ if commit.ParentCount() == 0 {
+ cmd = exec.Command("git", "show", afterCommitId)
+ } else {
+ c, _ := commit.Parent(0)
+ cmd = exec.Command("git", "diff", c.Id.String(), afterCommitId)
+ }
} else {
- c, _ := commit.Parent(0)
- cmd = exec.Command("git", "diff", c.Id.String(), commitid)
+ cmd = exec.Command("git", "diff", beforeCommitId, afterCommitId)
}
cmd.Dir = repoPath
cmd.Stdout = wr
@@ -208,7 +213,7 @@ func GetDiff(repoPath, commitid string) (*Diff, error) {
}()
defer rd.Close()
- desc := fmt.Sprintf("GetDiff(%s)", repoPath)
+ desc := fmt.Sprintf("GetDiffRange(%s)", repoPath)
pid := process.Add(desc, cmd)
go func() {
// In case process became zombie.
@@ -226,3 +231,7 @@ func GetDiff(repoPath, commitid string) (*Diff, error) {
return ParsePatch(pid, cmd, rd)
}
+
+func GetDiffCommit(repoPath, commitId string) (*Diff, error) {
+ return GetDiffRange(repoPath, "", commitId)
+}