Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Replaced list with slice.
  • Loading branch information
KN4CK3R committed Jun 29, 2021
commit 99f5c8c1d64fb0388bde8d1a27276f2c65dc7418
16 changes: 5 additions & 11 deletions models/commit_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
package models

import (
"container/list"
"crypto/sha1"
"fmt"
"strings"
Expand Down Expand Up @@ -257,14 +256,10 @@ type SignCommitWithStatuses struct {
}

// ParseCommitsWithStatus checks commits latest statuses and calculates its worst status state
func ParseCommitsWithStatus(oldCommits *list.List, repo *Repository) *list.List {
var (
newCommits = list.New()
e = oldCommits.Front()
)

for e != nil {
c := e.Value.(SignCommit)
func ParseCommitsWithStatus(oldCommits []SignCommit, repo *Repository) []SignCommitWithStatuses {
newCommits := make([]SignCommitWithStatuses, 0, len(oldCommits))

for _, c := range oldCommits {
commit := SignCommitWithStatuses{
SignCommit: &c,
}
Expand All @@ -276,8 +271,7 @@ func ParseCommitsWithStatus(oldCommits *list.List, repo *Repository) *list.List
commit.Status = CalcCommitStatus(statuses)
}

newCommits.PushBack(commit)
e = e.Next()
newCommits = append(newCommits, commit)
}
return newCommits
}
Expand Down
14 changes: 4 additions & 10 deletions models/gpg_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package models

import (
"bytes"
"container/list"
"crypto"
"encoding/base64"
"fmt"
Expand Down Expand Up @@ -830,24 +829,19 @@ func verifyWithGPGSettings(gpgSettings *git.GPGSettings, sig *packet.Signature,
}

// ParseCommitsWithSignature checks if signaute of commits are corresponding to users gpg keys.
func ParseCommitsWithSignature(oldCommits *list.List, repository *Repository) *list.List {
var (
newCommits = list.New()
e = oldCommits.Front()
)
func ParseCommitsWithSignature(oldCommits []UserCommit, repository *Repository) []SignCommit {
newCommits := make([]SignCommit, 0, len(oldCommits))
keyMap := map[string]bool{}

for e != nil {
c := e.Value.(UserCommit)
for _, c := range oldCommits {
signCommit := SignCommit{
UserCommit: &c,
Verification: ParseCommitWithSignature(c.Commit),
}

_ = CalculateTrustStatus(signCommit.Verification, repository, &keyMap)

newCommits.PushBack(signCommit)
e = e.Next()
newCommits = append(newCommits, signCommit)
}
return newCommits
}
Expand Down
47 changes: 23 additions & 24 deletions models/issue_comment.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,11 @@ type Comment struct {
RefIssue *Issue `xorm:"-"`
RefComment *Comment `xorm:"-"`

Commits *list.List `xorm:"-"`
OldCommit string `xorm:"-"`
NewCommit string `xorm:"-"`
CommitsNum int64 `xorm:"-"`
IsForcePush bool `xorm:"-"`
Commits []SignCommitWithStatuses `xorm:"-"`
OldCommit string `xorm:"-"`
NewCommit string `xorm:"-"`
CommitsNum int64 `xorm:"-"`
IsForcePush bool `xorm:"-"`
}

// PushActionContent is content of push pull comment
Expand Down Expand Up @@ -676,13 +676,16 @@ func (c *Comment) LoadPushCommits() (err error) {
}
defer gitRepo.Close()

c.Commits = gitRepo.GetCommitsFromIDs(data.CommitIDs)
c.CommitsNum = int64(c.Commits.Len())
if c.CommitsNum > 0 {
c.Commits = ValidateCommitsWithEmails(c.Commits)
c.Commits = ParseCommitsWithSignature(c.Commits, c.Issue.Repo)
c.Commits = ParseCommitsWithStatus(c.Commits, c.Issue.Repo)
}
c.Commits = ParseCommitsWithStatus(
ParseCommitsWithSignature(
ValidateCommitsWithEmails(
gitRepo.GetCommitsFromIDs(data.CommitIDs),
),
c.Issue.Repo,
),
c.Issue.Repo,
)
c.CommitsNum = int64(len(c.Commits))
}

return err
Expand Down Expand Up @@ -1295,21 +1298,17 @@ func getCommitIDsFromRepo(repo *Repository, oldCommitID, newCommitID, baseBranch
return nil, false, err
}

var (
commits *list.List
commitChecks map[string]commitBranchCheckItem
)
commits, err = newCommit.CommitsBeforeUntil(oldCommitID)
commits, err := newCommit.CommitsBeforeUntil(oldCommitID)
if err != nil {
return nil, false, err
}

commitIDs = make([]string, 0, commits.Len())
commitChecks = make(map[string]commitBranchCheckItem)
commitIDs = make([]string, 0, len(commits))
commitChecks := make(map[string]commitBranchCheckItem)

for e := commits.Front(); e != nil; e = e.Next() {
commitChecks[e.Value.(*git.Commit).ID.String()] = commitBranchCheckItem{
Commit: e.Value.(*git.Commit),
for _, commit := range commits {
commitChecks[commit.ID.String()] = commitBranchCheckItem{
Commit: commit,
Checked: false,
}
}
Expand All @@ -1318,8 +1317,8 @@ func getCommitIDsFromRepo(repo *Repository, oldCommitID, newCommitID, baseBranch
return
}

for e := commits.Back(); e != nil; e = e.Prev() {
commitID := e.Value.(*git.Commit).ID.String()
for i := len(commits) - 1; i >= 0; i-- {
commitID := commits[i].ID.String()
if item, ok := commitChecks[commitID]; ok && item.Checked {
commitIDs = append(commitIDs, commitID)
}
Expand Down
3 changes: 1 addition & 2 deletions models/pull_sign.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,7 @@ Loop:
if err != nil {
return false, "", nil, err
}
for e := commitList.Front(); e != nil; e = e.Next() {
commit = e.Value.(*git.Commit)
for _, commit := range commitList {
verification := ParseCommitWithSignature(commit)
if !verification.Verified {
return false, "", nil, &ErrWontSign{commitsSigned}
Expand Down
19 changes: 6 additions & 13 deletions models/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package models

import (
"container/list"
"context"
"crypto/sha256"
"crypto/subtle"
Expand Down Expand Up @@ -1503,32 +1502,26 @@ func ValidateCommitWithEmail(c *git.Commit) *User {
}

// ValidateCommitsWithEmails checks if authors' e-mails of commits are corresponding to users.
func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
func ValidateCommitsWithEmails(oldCommits []*git.Commit) []UserCommit {
var (
u *User
emails = map[string]*User{}
newCommits = list.New()
e = oldCommits.Front()
emails = make(map[string]*User)
newCommits = make([]UserCommit, 0, len(oldCommits))
)
for e != nil {
c := e.Value.(*git.Commit)

for _, c := range oldCommits {
var u *User
if c.Author != nil {
if v, ok := emails[c.Author.Email]; !ok {
u, _ = GetUserByEmail(c.Author.Email)
emails[c.Author.Email] = u
} else {
u = v
}
} else {
u = nil
}

newCommits.PushBack(UserCommit{
newCommits = append(newCommits, UserCommit{
User: u,
Commit: c,
})
e = e.Next()
}
return newCommits
}
Expand Down
11 changes: 5 additions & 6 deletions modules/git/commit.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package git
import (
"bufio"
"bytes"
"container/list"
"errors"
"fmt"
"io"
Expand Down Expand Up @@ -185,12 +184,12 @@ func (c *Commit) CommitsCount() (int64, error) {
}

// CommitsByRange returns the specific page commits before current revision, every page's number default by CommitsRangeSize
func (c *Commit) CommitsByRange(page, pageSize int) (*list.List, error) {
func (c *Commit) CommitsByRange(page, pageSize int) ([]*Commit, error) {
return c.repo.commitsByRange(c.ID, page, pageSize)
}

// CommitsBefore returns all the commits before current revision
func (c *Commit) CommitsBefore() (*list.List, error) {
func (c *Commit) CommitsBefore() ([]*Commit, error) {
return c.repo.getCommitsBefore(c.ID)
}

Expand Down Expand Up @@ -226,12 +225,12 @@ func (c *Commit) HasPreviousCommit(commitHash SHA1) (bool, error) {
}

// CommitsBeforeLimit returns num commits before current revision
func (c *Commit) CommitsBeforeLimit(num int) (*list.List, error) {
func (c *Commit) CommitsBeforeLimit(num int) ([]*Commit, error) {
return c.repo.getCommitsBeforeLimit(c.ID, num)
}

// CommitsBeforeUntil returns the commits between commitID to current revision
func (c *Commit) CommitsBeforeUntil(commitID string) (*list.List, error) {
func (c *Commit) CommitsBeforeUntil(commitID string) ([]*Commit, error) {
endCommit, err := c.repo.GetCommit(commitID)
if err != nil {
return nil, err
Expand Down Expand Up @@ -279,7 +278,7 @@ func NewSearchCommitsOptions(searchString string, forAllRefs bool) SearchCommits
}

// SearchCommits returns the commits match the keyword before current revision
func (c *Commit) SearchCommits(opts SearchCommitsOptions) (*list.List, error) {
func (c *Commit) SearchCommits(opts SearchCommitsOptions) ([]*Commit, error) {
return c.repo.searchCommits(c.ID, opts)
}

Expand Down
11 changes: 5 additions & 6 deletions modules/git/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ package git

import (
"bytes"
"container/list"
"context"
"fmt"
"os"
Expand All @@ -33,10 +32,10 @@ func (repo *Repository) GetAllCommitsCount() (int64, error) {
return AllCommitsCount(repo.Path, false)
}

func (repo *Repository) parsePrettyFormatLogToList(logs []byte) (*list.List, error) {
l := list.New()
func (repo *Repository) parsePrettyFormatLogToList(logs []byte) ([]*Commit, error) {
var commits []*Commit
if len(logs) == 0 {
return l, nil
return commits, nil
}

parts := bytes.Split(logs, []byte{'\n'})
Expand All @@ -46,10 +45,10 @@ func (repo *Repository) parsePrettyFormatLogToList(logs []byte) (*list.List, err
if err != nil {
return nil, err
}
l.PushBack(commit)
commits = append(commits, commit)
}

return l, nil
return commits, nil
}

// IsRepoURLAccessible checks if given repository URL is accessible.
Expand Down
Loading