mirror of
https://github.com/gogs/gogs.git
synced 2025-12-20 23:30:00 +01:00
webhook: add file status to push event (#3897)
This commit is contained in:
54
vendor/github.com/gogits/git-module/commit.go
generated
vendored
54
vendor/github.com/gogits/git-module/commit.go
generated
vendored
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user