forked from Gitlink/gitea-1156
112 lines
3.1 KiB
Go
112 lines
3.1 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/timeutil"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
type PullRequestVersion struct {
|
|
ID int64 `xorm:"pk autoincr"`
|
|
RepoID int64 `xorm:"INDEX"`
|
|
Repo *Repository `xorm:"-"`
|
|
PullID int64 `xorm:"INDEX"`
|
|
Pull *PullRequest `xorm:"-"`
|
|
AddLineNum int
|
|
CommitsCount int
|
|
DelLineNum int
|
|
FilesCount int
|
|
HeadCommitID string `xorm:"VARCHAR(40)"`
|
|
BaseCommitID string `xorm:"VARCHAR(40)"`
|
|
StartCommitID string `xorm:"VARCHAR(40)"`
|
|
CreatedUnix timeutil.TimeStamp `xorm:"created INDEX"`
|
|
UpdatedUnix timeutil.TimeStamp `xorm:"updated INDEX"`
|
|
}
|
|
|
|
func listPullRequestVersionStatement(prID int64, opts *ListOptions) (*xorm.Session, error) {
|
|
sess := x.Where("pull_request_version.pull_id=?", prID)
|
|
|
|
sess.Join("INNER", "repository", "pull_request_version.repo_id = repository.id")
|
|
return sess, nil
|
|
}
|
|
|
|
func PullRequestVersions(prID int64, opts *ListOptions) ([]*PullRequestVersion, int64, error) {
|
|
if opts.Page <= 0 {
|
|
opts.Page = 1
|
|
}
|
|
|
|
countSession, err := listPullRequestVersionStatement(prID, opts)
|
|
if err != nil {
|
|
log.Error("listPullRequestVersionStatement: %v", err)
|
|
return nil, 0, err
|
|
}
|
|
maxResults, err := countSession.Count(new(PullRequestVersion))
|
|
if err != nil {
|
|
log.Error("Count pull_request_versions: %v", err)
|
|
return nil, maxResults, err
|
|
}
|
|
findSession, err := listPullRequestVersionStatement(prID, opts)
|
|
if err != nil {
|
|
log.Error("listPullRequestVersionStatement: %v", err)
|
|
return nil, 0, err
|
|
}
|
|
findSession = opts.setSessionPagination(findSession)
|
|
prvs := make([]*PullRequestVersion, 0, opts.PageSize)
|
|
return prvs, maxResults, findSession.Find(&prvs)
|
|
}
|
|
|
|
func GetPullRequestLastVersionByPullRequest(pr *PullRequest) (*PullRequestVersion, error) {
|
|
prv := &PullRequestVersion{
|
|
RepoID: pr.BaseRepoID,
|
|
PullID: pr.ID,
|
|
}
|
|
has, err := x.Desc("created_unix").Get(prv)
|
|
if err != nil {
|
|
return nil, err
|
|
} else if !has {
|
|
return nil, ErrPullRequestNotExist{}
|
|
}
|
|
|
|
return prv, nil
|
|
}
|
|
|
|
func GetPullRequestVersionByID(prID, id int64) (*PullRequestVersion, error) {
|
|
if id < 1 {
|
|
return nil, ErrPullRequestNotExist{}
|
|
}
|
|
prv := &PullRequestVersion{
|
|
PullID: prID,
|
|
ID: id,
|
|
}
|
|
|
|
has, err := x.Get(prv)
|
|
if err != nil {
|
|
return nil, err
|
|
} else if !has {
|
|
return nil, ErrPullRequestNotExist{}
|
|
}
|
|
|
|
return prv, nil
|
|
}
|
|
|
|
// NewPullRequestDiff creates new pull request diff version for repository.
|
|
func NewPullRequestVersion(repo *Repository, pr *PullRequest, addLineNum, commitsCount, delLineNUm, filesCount int, headCommitID, baseCommitID, StartCommitID string) (err error) {
|
|
var version PullRequestVersion
|
|
version.PullID = pr.ID
|
|
version.RepoID = repo.ID
|
|
version.AddLineNum = addLineNum
|
|
version.CommitsCount = commitsCount
|
|
version.DelLineNum = delLineNUm
|
|
version.FilesCount = filesCount
|
|
version.HeadCommitID = headCommitID
|
|
version.BaseCommitID = baseCommitID
|
|
version.StartCommitID = StartCommitID
|
|
if _, err = x.Insert(version); err != nil {
|
|
return fmt.Errorf("insert pull version repo: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|