aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/gogits/git-module/commit.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/gogits/git-module/commit.go')
-rw-r--r--vendor/github.com/gogits/git-module/commit.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/github.com/gogits/git-module/commit.go b/vendor/github.com/gogits/git-module/commit.go
index b68a6b97..6cc6b5fd 100644
--- a/vendor/github.com/gogits/git-module/commit.go
+++ b/vendor/github.com/gogits/git-module/commit.go
@@ -6,8 +6,10 @@ package git
import (
"bufio"
+ "bytes"
"container/list"
"fmt"
+ "io"
"net/http"
"strconv"
"strings"
@@ -252,3 +254,55 @@ func (c *Commit) GetSubModule(entryname string) (*SubModule, error) {
}
return nil, nil
}
+
+// CommitFileStatus represents status of files in a commit.
+type CommitFileStatus struct {
+ Added []string
+ Removed []string
+ Modified []string
+}
+
+func NewCommitFileStatus() *CommitFileStatus {
+ return &CommitFileStatus{
+ []string{}, []string{}, []string{},
+ }
+}
+
+// GetCommitFileStatus returns file status of commit in given repository.
+func GetCommitFileStatus(repoPath, commitID string) (*CommitFileStatus, error) {
+ stdout, w := io.Pipe()
+ defer stdout.Close()
+
+ stderr := new(bytes.Buffer)
+
+ fileStatus := NewCommitFileStatus()
+ go func() {
+ scanner := bufio.NewScanner(stdout)
+ for scanner.Scan() {
+ fields := strings.Fields(scanner.Text())
+ if len(fields) < 2 {
+ continue
+ }
+
+ switch fields[0][0] {
+ case 'A':
+ fileStatus.Added = append(fileStatus.Added, fields[1])
+ case 'D':
+ fileStatus.Removed = append(fileStatus.Removed, fields[1])
+ case 'M':
+ fileStatus.Modified = append(fileStatus.Modified, fields[1])
+ }
+ }
+ }()
+
+ if err := NewCommand("log", "-1", "--name-status", "--pretty=format:''", commitID).RunInDirPipeline(repoPath, w, stderr); err != nil {
+ return nil, concatenateError(err, stderr.String())
+ }
+
+ return fileStatus, nil
+}
+
+// FileStatus returns file status of commit.
+func (c *Commit) FileStatus() (*CommitFileStatus, error) {
+ return GetCommitFileStatus(c.repo.Path, c.ID.String())
+}