]> source.dussan.org Git - gitea.git/commitdiff
Replace `list.List` with slices (#16311)
authorKN4CK3R <admin@oldschoolhack.me>
Mon, 9 Aug 2021 18:08:51 +0000 (20:08 +0200)
committerGitHub <noreply@github.com>
Mon, 9 Aug 2021 18:08:51 +0000 (14:08 -0400)
* Replaced list with slice.

* Fixed usage of pointer to temporary variable.

* Replaced LIFO list with slice.

* Lint

* Removed type check.

* Removed duplicated code.

* Lint

* Fixed merge.

Co-authored-by: 6543 <6543@obermui.de>
29 files changed:
models/commit.go [new file with mode: 0644]
models/commit_status.go
models/gpg_key_commit_verification.go
models/issue_comment.go
models/pull_sign.go
models/user.go
modules/git/commit.go
modules/git/repo.go
modules/git/repo_commit.go
modules/git/repo_commit_test.go
modules/git/repo_compare.go
modules/repository/commits.go
modules/repository/commits_test.go
modules/templates/helper.go
routers/api/v1/repo/commits.go
routers/api/v1/repo/pull.go
routers/web/repo/blame.go
routers/web/repo/commit.go
routers/web/repo/compare.go
routers/web/repo/pull.go
routers/web/repo/wiki.go
services/mirror/mirror_pull.go
services/pull/pull.go
services/repository/push.go
templates/mail/issue/default.tmpl
templates/repo/commits_list.tmpl
templates/repo/commits_list_small.tmpl
templates/repo/issue/view_content/comments.tmpl
templates/user/dashboard/feeds.tmpl

diff --git a/models/commit.go b/models/commit.go
new file mode 100644 (file)
index 0000000..4748258
--- /dev/null
@@ -0,0 +1,20 @@
+// Copyright 2021 Gitea. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package models
+
+import (
+       "code.gitea.io/gitea/modules/git"
+)
+
+// ConvertFromGitCommit converts git commits into SignCommitWithStatuses
+func ConvertFromGitCommit(commits []*git.Commit, repo *Repository) []*SignCommitWithStatuses {
+       return ParseCommitsWithStatus(
+               ParseCommitsWithSignature(
+                       ValidateCommitsWithEmails(commits),
+                       repo,
+               ),
+               repo,
+       )
+}
index 1105c3b1731568ef40eb68795977d1d859e4c5ff..c27582024280fba2389657f5b85b7c349d683ba8 100644 (file)
@@ -5,7 +5,6 @@
 package models
 
 import (
-       "container/list"
        "crypto/sha1"
        "fmt"
        "strings"
@@ -257,16 +256,12 @@ 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)
-               commit := SignCommitWithStatuses{
-                       SignCommit: &c,
+func ParseCommitsWithStatus(oldCommits []*SignCommit, repo *Repository) []*SignCommitWithStatuses {
+       newCommits := make([]*SignCommitWithStatuses, 0, len(oldCommits))
+
+       for _, c := range oldCommits {
+               commit := &SignCommitWithStatuses{
+                       SignCommit: c,
                }
                statuses, err := GetLatestCommitStatus(repo.ID, commit.ID.String(), ListOptions{})
                if err != nil {
@@ -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
 }
index f0c27f13aa802d7de26a52a97061d5cb52964342..a4c7d702850fa867c74b5fc54eee9270f0c37a62 100644 (file)
@@ -5,7 +5,6 @@
 package models
 
 import (
-       "container/list"
        "fmt"
        "hash"
        "strings"
@@ -68,24 +67,19 @@ const (
 )
 
 // 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)
-               signCommit := SignCommit{
-                       UserCommit:   &c,
+       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
 }
index ae2dc0811fd08471898e836225bdec08b2d83748..755041efd7ed1c7096a846dde0dfbd4b6196bab0 100644 (file)
@@ -7,7 +7,6 @@
 package models
 
 import (
-       "container/list"
        "fmt"
        "regexp"
        "strconv"
@@ -191,11 +190,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
@@ -675,13 +674,8 @@ 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 = ConvertFromGitCommit(gitRepo.GetCommitsFromIDs(data.CommitIDs), c.Issue.Repo)
+               c.CommitsNum = int64(len(c.Commits))
        }
 
        return err
@@ -1293,21 +1287,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,
                }
        }
@@ -1316,8 +1306,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)
                }
@@ -1331,64 +1321,49 @@ type commitBranchCheckItem struct {
        Checked bool
 }
 
-func commitBranchCheck(gitRepo *git.Repository, startCommit *git.Commit, endCommitID, baseBranch string, commitList map[string]commitBranchCheckItem) (err error) {
-       var (
-               item     commitBranchCheckItem
-               ok       bool
-               listItem *list.Element
-               tmp      string
-       )
-
+func commitBranchCheck(gitRepo *git.Repository, startCommit *git.Commit, endCommitID, baseBranch string, commitList map[string]*commitBranchCheckItem) error {
        if startCommit.ID.String() == endCommitID {
-               return
+               return nil
        }
 
-       checkStack := list.New()
-       checkStack.PushBack(startCommit.ID.String())
-       listItem = checkStack.Back()
+       checkStack := make([]string, 0, 10)
+       checkStack = append(checkStack, startCommit.ID.String())
 
-       for listItem != nil {
-               tmp = listItem.Value.(string)
-               checkStack.Remove(listItem)
+       for len(checkStack) > 0 {
+               commitID := checkStack[0]
+               checkStack = checkStack[1:]
 
-               if item, ok = commitList[tmp]; !ok {
-                       listItem = checkStack.Back()
+               item, ok := commitList[commitID]
+               if !ok {
                        continue
                }
 
                if item.Commit.ID.String() == endCommitID {
-                       listItem = checkStack.Back()
                        continue
                }
 
-               if err = item.Commit.LoadBranchName(); err != nil {
-                       return
+               if err := item.Commit.LoadBranchName(); err != nil {
+                       return err
                }
 
                if item.Commit.Branch == baseBranch {
-                       listItem = checkStack.Back()
                        continue
                }
 
                if item.Checked {
-                       listItem = checkStack.Back()
                        continue
                }
 
                item.Checked = true
-               commitList[tmp] = item
 
                parentNum := item.Commit.ParentCount()
                for i := 0; i < parentNum; i++ {
-                       var parentCommit *git.Commit
-                       parentCommit, err = item.Commit.Parent(i)
+                       parentCommit, err := item.Commit.Parent(i)
                        if err != nil {
-                               return
+                               return err
                        }
-                       checkStack.PushBack(parentCommit.ID.String())
+                       checkStack = append(checkStack, parentCommit.ID.String())
                }
-
-               listItem = checkStack.Back()
        }
        return nil
 }
index 10a6522ebef733cafd2fbd2d59dc279bfbf166b1..e7cf4ab666ee8632095690e365235be33b9a1a31 100644 (file)
@@ -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}
index a4f94999ee44a55e3baab7b5c0d17f841840bb76..c68417a2c3265de19cd5b4f99723490317d46cfa 100644 (file)
@@ -6,7 +6,6 @@
 package models
 
 import (
-       "container/list"
        "context"
        "crypto/sha256"
        "crypto/subtle"
@@ -1509,16 +1508,13 @@ 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)
@@ -1526,15 +1522,12 @@ func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
                        } else {
                                u = v
                        }
-               } else {
-                       u = nil
                }
 
-               newCommits.PushBack(UserCommit{
+               newCommits = append(newCommits, &UserCommit{
                        User:   u,
                        Commit: c,
                })
-               e = e.Next()
        }
        return newCommits
 }
index 3ce2b03886d1f4c0b00710ce98e3c2b4c3cb0d46..fe2c2b977453364a0a8590bceacb2693750178e3 100644 (file)
@@ -8,7 +8,6 @@ package git
 import (
        "bufio"
        "bytes"
-       "container/list"
        "errors"
        "fmt"
        "io"
@@ -187,12 +186,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)
 }
 
@@ -228,12 +227,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
@@ -281,7 +280,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)
 }
 
index 43f329f4487d66732325c59b4f9d3a19fbe72248..4e6f90c3efa5e8af8660bb6f6f24156a41ac4b20 100644 (file)
@@ -7,7 +7,6 @@ package git
 
 import (
        "bytes"
-       "container/list"
        "context"
        "fmt"
        "os"
@@ -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'})
@@ -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.
index 16ee5b2fd62f2a1821e9e3fff1dea7cf0f1b2f9c..e456f04e8773a3741d6acb4609e4467a4ccc2ae5 100644 (file)
@@ -7,7 +7,6 @@ package git
 
 import (
        "bytes"
-       "container/list"
        "io"
        "io/ioutil"
        "strconv"
@@ -84,10 +83,10 @@ func (repo *Repository) GetCommitByPath(relpath string) (*Commit, error) {
        if err != nil {
                return nil, err
        }
-       return commits.Front().Value.(*Commit), nil
+       return commits[0], nil
 }
 
-func (repo *Repository) commitsByRange(id SHA1, page, pageSize int) (*list.List, error) {
+func (repo *Repository) commitsByRange(id SHA1, page, pageSize int) ([]*Commit, error) {
        stdout, err := NewCommand("log", id.String(), "--skip="+strconv.Itoa((page-1)*pageSize),
                "--max-count="+strconv.Itoa(pageSize), prettyLogFormat).RunInDirBytes(repo.Path)
 
@@ -97,7 +96,7 @@ func (repo *Repository) commitsByRange(id SHA1, page, pageSize int) (*list.List,
        return repo.parsePrettyFormatLogToList(stdout)
 }
 
-func (repo *Repository) searchCommits(id SHA1, opts SearchCommitsOptions) (*list.List, error) {
+func (repo *Repository) searchCommits(id SHA1, opts SearchCommitsOptions) ([]*Commit, error) {
        // create new git log command with limit of 100 commis
        cmd := NewCommand("log", id.String(), "-100", prettyLogFormat)
        // ignore case
@@ -201,7 +200,7 @@ func (repo *Repository) FileCommitsCount(revision, file string) (int64, error) {
 }
 
 // CommitsByFileAndRange return the commits according revision file and the page
-func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) (*list.List, error) {
+func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) ([]*Commit, error) {
        skip := (page - 1) * setting.Git.CommitsRangeSize
 
        stdoutReader, stdoutWriter := io.Pipe()
@@ -226,7 +225,7 @@ func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) (
                _, err := io.CopyN(ioutil.Discard, stdoutReader, int64(skip*41))
                if err != nil {
                        if err == io.EOF {
-                               return list.New(), nil
+                               return []*Commit{}, nil
                        }
                        _ = stdoutReader.CloseWithError(err)
                        return nil, err
@@ -241,7 +240,7 @@ func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) (
 }
 
 // CommitsByFileAndRangeNoFollow return the commits according revision file and the page
-func (repo *Repository) CommitsByFileAndRangeNoFollow(revision, file string, page int) (*list.List, error) {
+func (repo *Repository) CommitsByFileAndRangeNoFollow(revision, file string, page int) ([]*Commit, error) {
        stdout, err := NewCommand("log", revision, "--skip="+strconv.Itoa((page-1)*50),
                "--max-count="+strconv.Itoa(setting.Git.CommitsRangeSize), prettyLogFormat, "--", file).RunInDirBytes(repo.Path)
        if err != nil {
@@ -266,7 +265,7 @@ func (repo *Repository) FilesCountBetween(startCommitID, endCommitID string) (in
 
 // CommitsBetween returns a list that contains commits between [before, last).
 // If before is detached (removed by reset + push) it is not included.
-func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List, error) {
+func (repo *Repository) CommitsBetween(last *Commit, before *Commit) ([]*Commit, error) {
        var stdout []byte
        var err error
        if before == nil {
@@ -286,7 +285,7 @@ func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List
 }
 
 // CommitsBetweenLimit returns a list that contains at most limit commits skipping the first skip commits between [before, last)
-func (repo *Repository) CommitsBetweenLimit(last *Commit, before *Commit, limit, skip int) (*list.List, error) {
+func (repo *Repository) CommitsBetweenLimit(last *Commit, before *Commit, limit, skip int) ([]*Commit, error) {
        var stdout []byte
        var err error
        if before == nil {
@@ -306,7 +305,7 @@ func (repo *Repository) CommitsBetweenLimit(last *Commit, before *Commit, limit,
 }
 
 // CommitsBetweenIDs return commits between twoe commits
-func (repo *Repository) CommitsBetweenIDs(last, before string) (*list.List, error) {
+func (repo *Repository) CommitsBetweenIDs(last, before string) ([]*Commit, error) {
        lastCommit, err := repo.GetCommit(last)
        if err != nil {
                return nil, err
@@ -334,7 +333,7 @@ func (repo *Repository) CommitsCountBetween(start, end string) (int64, error) {
 }
 
 // commitsBefore the limit is depth, not total number of returned commits.
-func (repo *Repository) commitsBefore(id SHA1, limit int) (*list.List, error) {
+func (repo *Repository) commitsBefore(id SHA1, limit int) ([]*Commit, error) {
        cmd := NewCommand("log")
        if limit > 0 {
                cmd.AddArguments("-"+strconv.Itoa(limit), prettyLogFormat, id.String())
@@ -352,9 +351,8 @@ func (repo *Repository) commitsBefore(id SHA1, limit int) (*list.List, error) {
                return nil, err
        }
 
-       commits := list.New()
-       for logEntry := formattedLog.Front(); logEntry != nil; logEntry = logEntry.Next() {
-               commit := logEntry.Value.(*Commit)
+       commits := make([]*Commit, 0, len(formattedLog))
+       for _, commit := range formattedLog {
                branches, err := repo.getBranches(commit, 2)
                if err != nil {
                        return nil, err
@@ -364,17 +362,17 @@ func (repo *Repository) commitsBefore(id SHA1, limit int) (*list.List, error) {
                        break
                }
 
-               commits.PushBack(commit)
+               commits = append(commits, commit)
        }
 
        return commits, nil
 }
 
-func (repo *Repository) getCommitsBefore(id SHA1) (*list.List, error) {
+func (repo *Repository) getCommitsBefore(id SHA1) ([]*Commit, error) {
        return repo.commitsBefore(id, 0)
 }
 
-func (repo *Repository) getCommitsBeforeLimit(id SHA1, num int) (*list.List, error) {
+func (repo *Repository) getCommitsBeforeLimit(id SHA1, num int) ([]*Commit, error) {
        return repo.commitsBefore(id, num)
 }
 
@@ -413,13 +411,13 @@ func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error)
 }
 
 // GetCommitsFromIDs get commits from commit IDs
-func (repo *Repository) GetCommitsFromIDs(commitIDs []string) (commits *list.List) {
-       commits = list.New()
+func (repo *Repository) GetCommitsFromIDs(commitIDs []string) []*Commit {
+       commits := make([]*Commit, 0, len(commitIDs))
 
        for _, commitID := range commitIDs {
                commit, err := repo.GetCommit(commitID)
                if err == nil && commit != nil {
-                       commits.PushBack(commit)
+                       commits = append(commits, commit)
                }
        }
 
index a6c27ea4d55bd69382901c51941a532c83c2b5e0..594333484369be9228a4eac4550145a16a298a99 100644 (file)
@@ -97,6 +97,6 @@ func TestRepository_CommitsBetweenIDs(t *testing.T) {
        for i, c := range cases {
                commits, err := bareRepo1.CommitsBetweenIDs(c.NewID, c.OldID)
                assert.NoError(t, err)
-               assert.Equal(t, c.ExpectedCommits, commits.Len(), "case %d", i)
+               assert.Equal(t, c.ExpectedCommits, len(commits), "case %d", i)
        }
 }
index 3255e68392a2dec216bb544afef6e83e2b08bf44..5d1208aab18fe8a21df3800ca9afddc11446454c 100644 (file)
@@ -7,7 +7,6 @@ package git
 
 import (
        "bytes"
-       "container/list"
        "fmt"
        "io"
        "regexp"
@@ -23,7 +22,7 @@ type CompareInfo struct {
        MergeBase    string
        BaseCommitID string
        HeadCommitID string
-       Commits      *list.List
+       Commits      []*Commit
        NumFiles     int
 }
 
@@ -90,7 +89,7 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string)
                        return nil, fmt.Errorf("parsePrettyFormatLogToList: %v", err)
                }
        } else {
-               compareInfo.Commits = list.New()
+               compareInfo.Commits = []*Commit{}
                compareInfo.MergeBase, err = GetFullCommitID(repo.Path, remoteBranch)
                if err != nil {
                        compareInfo.MergeBase = remoteBranch
index eaaf3b8b198b043c484451dbe0258748ce900f25..7f22105745ee1ec4c455596c1ccf4d022ab7c5cf 100644 (file)
@@ -5,7 +5,6 @@
 package repository
 
 import (
-       "container/list"
        "fmt"
        "time"
 
@@ -175,12 +174,11 @@ func CommitToPushCommit(commit *git.Commit) *PushCommit {
        }
 }
 
-// ListToPushCommits transforms a list.List to PushCommits type.
-func ListToPushCommits(l *list.List) *PushCommits {
-       var commits []*PushCommit
-       for e := l.Front(); e != nil; e = e.Next() {
-               commit := CommitToPushCommit(e.Value.(*git.Commit))
-               commits = append(commits, commit)
+// GitToPushCommits transforms a list of git.Commits to PushCommits type.
+func GitToPushCommits(gitCommits []*git.Commit) *PushCommits {
+       commits := make([]*PushCommit, 0, len(gitCommits))
+       for _, commit := range gitCommits {
+               commits = append(commits, CommitToPushCommit(commit))
        }
        return &PushCommits{commits, nil, "", make(map[string]string), make(map[string]*models.User)}
 }
index 8e0d8bf90fa0240d1e9373509b9ffd4a7315efd5..9f0852525898b12029d8a960f00268f645c3ab67 100644 (file)
@@ -5,7 +5,6 @@
 package repository
 
 import (
-       "container/list"
        "crypto/md5"
        "fmt"
        "testing"
@@ -173,21 +172,22 @@ func TestListToPushCommits(t *testing.T) {
        hash2, err := git.NewIDFromString(hexString2)
        assert.NoError(t, err)
 
-       l := list.New()
-       l.PushBack(&git.Commit{
-               ID:            hash1,
-               Author:        sig,
-               Committer:     sig,
-               CommitMessage: "Message1",
-       })
-       l.PushBack(&git.Commit{
-               ID:            hash2,
-               Author:        sig,
-               Committer:     sig,
-               CommitMessage: "Message2",
-       })
+       l := []*git.Commit{
+               {
+                       ID:            hash1,
+                       Author:        sig,
+                       Committer:     sig,
+                       CommitMessage: "Message1",
+               },
+               {
+                       ID:            hash2,
+                       Author:        sig,
+                       Committer:     sig,
+                       CommitMessage: "Message2",
+               },
+       }
 
-       pushCommits := ListToPushCommits(l)
+       pushCommits := GitToPushCommits(l)
        if assert.Len(t, pushCommits.Commits, 2) {
                assert.Equal(t, "Message1", pushCommits.Commits[0].Message)
                assert.Equal(t, hexString1, pushCommits.Commits[0].Sha1)
index 1e8f00b6699887707002927ed572cea8c356360a..6517127ebf45055aebbe1d182e806232e0146d17 100644 (file)
@@ -7,7 +7,6 @@ package templates
 
 import (
        "bytes"
-       "container/list"
        "errors"
        "fmt"
        "html"
@@ -126,7 +125,6 @@ func NewFuncMap() []template.FuncMap {
                },
                "SizeFmt":  base.FileSize,
                "CountFmt": base.FormatNumberSI,
-               "List":     List,
                "SubStr": func(str string, start, length int) string {
                        if len(str) == 0 {
                                return ""
@@ -297,18 +295,6 @@ func NewFuncMap() []template.FuncMap {
                },
                "CommentMustAsDiff":   gitdiff.CommentMustAsDiff,
                "MirrorRemoteAddress": mirrorRemoteAddress,
-               "CommitType": func(commit interface{}) string {
-                       switch commit.(type) {
-                       case models.SignCommitWithStatuses:
-                               return "SignCommitWithStatuses"
-                       case models.SignCommit:
-                               return "SignCommit"
-                       case models.UserCommit:
-                               return "UserCommit"
-                       default:
-                               return ""
-                       }
-               },
                "NotificationSettings": func() map[string]interface{} {
                        return map[string]interface{}{
                                "MinTimeout":            int(setting.UI.Notification.MinTimeout / time.Millisecond),
@@ -428,7 +414,6 @@ func NewTextFuncMap() []texttmpl.FuncMap {
                "DateFmtShort": func(t time.Time) string {
                        return t.Format("Jan 02, 2006")
                },
-               "List": List,
                "SubStr": func(str string, start, length int) string {
                        if len(str) == 0 {
                                return ""
@@ -636,20 +621,6 @@ func JSEscape(raw string) string {
        return template.JSEscapeString(raw)
 }
 
-// List traversings the list
-func List(l *list.List) chan interface{} {
-       e := l.Front()
-       c := make(chan interface{})
-       go func() {
-               for e != nil {
-                       c <- e.Value
-                       e = e.Next()
-               }
-               close(c)
-       }()
-       return c
-}
-
 // Sha1 returns sha1 sum of string
 func Sha1(str string) string {
        return base.EncodeSha1(str)
index e4bea4dee704586ed90626cbe889f5205ab1705e..9950a7d4567a18135b11933e8ed8687163e4133a 100644 (file)
@@ -190,20 +190,14 @@ func GetAllCommits(ctx *context.APIContext) {
 
        userCache := make(map[string]*models.User)
 
-       apiCommits := make([]*api.Commit, commits.Len())
-
-       i := 0
-       for commitPointer := commits.Front(); commitPointer != nil; commitPointer = commitPointer.Next() {
-               commit := commitPointer.Value.(*git.Commit)
-
+       apiCommits := make([]*api.Commit, len(commits))
+       for i, commit := range commits {
                // Create json struct
                apiCommits[i], err = convert.ToCommit(ctx.Repo.Repository, commit, userCache)
                if err != nil {
                        ctx.Error(http.StatusInternalServerError, "toCommit", err)
                        return
                }
-
-               i++
        }
 
        // kept for backwards compatibility
index 3ae7b2683e129e7a7288d8ec6be948486dfaa953..9be6228bfdf8fbd163eb96518757ccb400d8a269 100644 (file)
@@ -1211,7 +1211,7 @@ func GetPullRequestCommits(ctx *context.APIContext) {
 
        listOptions := utils.GetListOptions(ctx)
 
-       totalNumberOfCommits := commits.Len()
+       totalNumberOfCommits := len(commits)
        totalNumberOfPages := int(math.Ceil(float64(totalNumberOfCommits) / float64(listOptions.PageSize)))
 
        userCache := make(map[string]*models.User)
@@ -1222,29 +1222,14 @@ func GetPullRequestCommits(ctx *context.APIContext) {
                end = totalNumberOfCommits
        }
 
-       apiCommits := make([]*api.Commit, end-start)
-
-       i := 0
-       addedCommitsCount := 0
-       for commitPointer := commits.Front(); commitPointer != nil; commitPointer = commitPointer.Next() {
-               if i < start {
-                       i++
-                       continue
-               }
-               if i >= end {
-                       break
-               }
-
-               commit := commitPointer.Value.(*git.Commit)
-
-               // Create json struct
-               apiCommits[addedCommitsCount], err = convert.ToCommit(ctx.Repo.Repository, commit, userCache)
-               addedCommitsCount++
+       apiCommits := make([]*api.Commit, 0, end-start)
+       for i := start; i < end; i++ {
+               apiCommit, err := convert.ToCommit(ctx.Repo.Repository, commits[i], userCache)
                if err != nil {
                        ctx.ServerError("toCommit", err)
                        return
                }
-               i++
+               apiCommits = append(apiCommits, apiCommit)
        }
 
        ctx.SetLinkHeader(int(totalNumberOfCommits), listOptions.PageSize)
index 4ade9e9a93a5af150c4c34d8862f8d007cf5edb1..c2da8e9cdca53162a9eefc824e56b2b8c43953db 100644 (file)
@@ -5,7 +5,6 @@
 package repo
 
 import (
-       "container/list"
        "fmt"
        "html"
        gotemplate "html/template"
@@ -138,15 +137,15 @@ func RefBlame(ctx *context.Context) {
        ctx.HTML(http.StatusOK, tplBlame)
 }
 
-func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[string]models.UserCommit, map[string]string) {
+func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[string]*models.UserCommit, map[string]string) {
        // store commit data by SHA to look up avatar info etc
-       commitNames := make(map[string]models.UserCommit)
+       commitNames := make(map[string]*models.UserCommit)
        // previousCommits contains links from SHA to parent SHA,
        // if parent also contains the current TreePath.
        previousCommits := make(map[string]string)
        // and as blameParts can reference the same commits multiple
        // times, we cache the lookup work locally
-       commits := list.New()
+       commits := make([]*git.Commit, 0, len(blameParts))
        commitCache := map[string]*git.Commit{}
        commitCache[ctx.Repo.Commit.ID.String()] = ctx.Repo.Commit
 
@@ -190,22 +189,18 @@ func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[st
                        }
                }
 
-               commits.PushBack(commit)
-
-               commitNames[commit.ID.String()] = models.UserCommit{}
+               commits = append(commits, commit)
        }
 
        // populate commit email addresses to later look up avatars.
-       commits = models.ValidateCommitsWithEmails(commits)
-       for e := commits.Front(); e != nil; e = e.Next() {
-               c := e.Value.(models.UserCommit)
+       for _, c := range models.ValidateCommitsWithEmails(commits) {
                commitNames[c.ID.String()] = c
        }
 
        return commitNames, previousCommits
 }
 
-func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames map[string]models.UserCommit, previousCommits map[string]string) {
+func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames map[string]*models.UserCommit, previousCommits map[string]string) {
        repoLink := ctx.Repo.RepoLink
 
        var lines = make([]string, 0)
index fcc17a40abec476d1214abcf38b69fc50a3f2e3e..e1d93a243585a66ac5c0f4b7db3fc67ab4bbf2f3 100644 (file)
@@ -72,10 +72,7 @@ func Commits(ctx *context.Context) {
                ctx.ServerError("CommitsByRange", err)
                return
        }
-       commits = models.ValidateCommitsWithEmails(commits)
-       commits = models.ParseCommitsWithSignature(commits, ctx.Repo.Repository)
-       commits = models.ParseCommitsWithStatus(commits, ctx.Repo.Repository)
-       ctx.Data["Commits"] = commits
+       ctx.Data["Commits"] = models.ConvertFromGitCommit(commits, ctx.Repo.Repository)
 
        ctx.Data["Username"] = ctx.Repo.Owner.Name
        ctx.Data["Reponame"] = ctx.Repo.Repository.Name
@@ -193,10 +190,8 @@ func SearchCommits(ctx *context.Context) {
                ctx.ServerError("SearchCommits", err)
                return
        }
-       commits = models.ValidateCommitsWithEmails(commits)
-       commits = models.ParseCommitsWithSignature(commits, ctx.Repo.Repository)
-       commits = models.ParseCommitsWithStatus(commits, ctx.Repo.Repository)
-       ctx.Data["Commits"] = commits
+       ctx.Data["CommitCount"] = len(commits)
+       ctx.Data["Commits"] = models.ConvertFromGitCommit(commits, ctx.Repo.Repository)
 
        ctx.Data["Keyword"] = query
        if all {
@@ -204,7 +199,6 @@ func SearchCommits(ctx *context.Context) {
        }
        ctx.Data["Username"] = ctx.Repo.Owner.Name
        ctx.Data["Reponame"] = ctx.Repo.Repository.Name
-       ctx.Data["CommitCount"] = commits.Len()
        ctx.Data["Branch"] = ctx.Repo.BranchName
        ctx.HTML(http.StatusOK, tplCommits)
 }
@@ -239,10 +233,7 @@ func FileHistory(ctx *context.Context) {
                ctx.ServerError("CommitsByFileAndRange", err)
                return
        }
-       commits = models.ValidateCommitsWithEmails(commits)
-       commits = models.ParseCommitsWithSignature(commits, ctx.Repo.Repository)
-       commits = models.ParseCommitsWithStatus(commits, ctx.Repo.Repository)
-       ctx.Data["Commits"] = commits
+       ctx.Data["Commits"] = models.ConvertFromGitCommit(commits, ctx.Repo.Repository)
 
        ctx.Data["Username"] = ctx.Repo.Owner.Name
        ctx.Data["Reponame"] = ctx.Repo.Repository.Name
index 45d0624ca2c5a1dad35fb08303003a9dbfac8e68..511a74cdd54c40c08c8b83cedbaa6174a2342101 100644 (file)
@@ -551,14 +551,12 @@ func PrepareCompareDiff(
                return false
        }
 
-       compareInfo.Commits = models.ValidateCommitsWithEmails(compareInfo.Commits)
-       compareInfo.Commits = models.ParseCommitsWithSignature(compareInfo.Commits, headRepo)
-       compareInfo.Commits = models.ParseCommitsWithStatus(compareInfo.Commits, headRepo)
-       ctx.Data["Commits"] = compareInfo.Commits
-       ctx.Data["CommitCount"] = compareInfo.Commits.Len()
-
-       if compareInfo.Commits.Len() == 1 {
-               c := compareInfo.Commits.Front().Value.(models.SignCommitWithStatuses)
+       commits := models.ConvertFromGitCommit(compareInfo.Commits, headRepo)
+       ctx.Data["Commits"] = commits
+       ctx.Data["CommitCount"] = len(commits)
+
+       if len(commits) == 1 {
+               c := commits[0]
                title = strings.TrimSpace(c.UserCommit.Summary())
 
                body := strings.Split(strings.TrimSpace(c.UserCommit.Message()), "\n")
index 5c61e0d5fa98a5f10c04bdd49b961ea447950464..ccdd670e6a603e589d926abc2099f9789c5ec0b2 100644 (file)
@@ -7,7 +7,6 @@
 package repo
 
 import (
-       "container/list"
        "crypto/subtle"
        "errors"
        "fmt"
@@ -327,11 +326,11 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.C
                ctx.ServerError("GetCompareInfo", err)
                return nil
        }
-       ctx.Data["NumCommits"] = compareInfo.Commits.Len()
+       ctx.Data["NumCommits"] = len(compareInfo.Commits)
        ctx.Data["NumFiles"] = compareInfo.NumFiles
 
-       if compareInfo.Commits.Len() != 0 {
-               sha := compareInfo.Commits.Front().Value.(*git.Commit).ID.String()
+       if len(compareInfo.Commits) != 0 {
+               sha := compareInfo.Commits[0].ID.String()
                commitStatuses, err := models.GetLatestCommitStatus(ctx.Repo.Repository.ID, sha, models.ListOptions{})
                if err != nil {
                        ctx.ServerError("GetLatestCommitStatus", err)
@@ -411,7 +410,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
                        return nil
                }
 
-               ctx.Data["NumCommits"] = compareInfo.Commits.Len()
+               ctx.Data["NumCommits"] = len(compareInfo.Commits)
                ctx.Data["NumFiles"] = compareInfo.NumFiles
                return compareInfo
        }
@@ -543,7 +542,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
                ctx.Data["ConflictedFiles"] = pull.ConflictedFiles
        }
 
-       ctx.Data["NumCommits"] = compareInfo.Commits.Len()
+       ctx.Data["NumCommits"] = len(compareInfo.Commits)
        ctx.Data["NumFiles"] = compareInfo.NumFiles
        return compareInfo
 }
@@ -559,7 +558,6 @@ func ViewPullCommits(ctx *context.Context) {
        }
        pull := issue.PullRequest
 
-       var commits *list.List
        var prInfo *git.CompareInfo
        if pull.HasMerged {
                prInfo = PrepareMergedViewPullInfo(ctx, issue)
@@ -576,12 +574,10 @@ func ViewPullCommits(ctx *context.Context) {
 
        ctx.Data["Username"] = ctx.Repo.Owner.Name
        ctx.Data["Reponame"] = ctx.Repo.Repository.Name
-       commits = prInfo.Commits
-       commits = models.ValidateCommitsWithEmails(commits)
-       commits = models.ParseCommitsWithSignature(commits, ctx.Repo.Repository)
-       commits = models.ParseCommitsWithStatus(commits, ctx.Repo.Repository)
+
+       commits := models.ConvertFromGitCommit(prInfo.Commits, ctx.Repo.Repository)
        ctx.Data["Commits"] = commits
-       ctx.Data["CommitCount"] = commits.Len()
+       ctx.Data["CommitCount"] = len(commits)
 
        getBranchData(ctx, issue)
        ctx.HTML(http.StatusOK, tplPullCommits)
index 7226039e21087d2fa2f113c69eb154e064e162f2..2057229bf955920b49b53b33ec49d1bb404a5e8b 100644 (file)
@@ -312,10 +312,7 @@ func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry)
                ctx.ServerError("CommitsByFileAndRangeNoFollow", err)
                return nil, nil
        }
-       commitsHistory = models.ValidateCommitsWithEmails(commitsHistory)
-       commitsHistory = models.ParseCommitsWithSignature(commitsHistory, ctx.Repo.Repository)
-
-       ctx.Data["Commits"] = commitsHistory
+       ctx.Data["Commits"] = models.ConvertFromGitCommit(commitsHistory, ctx.Repo.Repository)
 
        pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5)
        pager.SetDefaultParams(ctx)
index a16724b36fefae3584483f25b86b93f78460d6de..89b5df4638069e0e4a6095e91755d5ac52333ed7 100644 (file)
@@ -354,7 +354,7 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
                        continue
                }
 
-               theCommits := repo_module.ListToPushCommits(commits)
+               theCommits := repo_module.GitToPushCommits(commits)
                if len(theCommits.Commits) > setting.UI.FeedMaxCommitNum {
                        theCommits.Commits = theCommits.Commits[:setting.UI.FeedMaxCommitNum]
                }
index b33f641130c874414d2f621453e1ac1109d77d16..23407ea67bdb2e317006e62ef85910d4d40f7102 100644 (file)
@@ -84,11 +84,11 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6
                return err
        }
 
-       if compareInfo.Commits.Len() > 0 {
+       if len(compareInfo.Commits) > 0 {
                data := models.PushActionContent{IsForcePush: false}
-               data.CommitIDs = make([]string, 0, compareInfo.Commits.Len())
-               for e := compareInfo.Commits.Back(); e != nil; e = e.Prev() {
-                       data.CommitIDs = append(data.CommitIDs, e.Value.(*git.Commit).ID.String())
+               data.CommitIDs = make([]string, 0, len(compareInfo.Commits))
+               for i := len(compareInfo.Commits) - 1; i >= 0; i-- {
+                       data.CommitIDs = append(data.CommitIDs, compareInfo.Commits[i].ID.String())
                }
 
                dataJSON, err := json.Marshal(data)
@@ -611,7 +611,7 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
 
        limit := setting.Repository.PullRequest.DefaultMergeMessageCommitsLimit
 
-       list, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, 0)
+       commits, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, 0)
        if err != nil {
                log.Error("Unable to get commits between: %s %s Error: %v", pr.HeadBranch, pr.MergeBase, err)
                return ""
@@ -620,7 +620,7 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
        posterSig := pr.Issue.Poster.NewGitSig().String()
 
        authorsMap := map[string]bool{}
-       authors := make([]string, 0, list.Len())
+       authors := make([]string, 0, len(commits))
        stringBuilder := strings.Builder{}
 
        if !setting.Repository.PullRequest.PopulateSquashCommentWithCommitMessages {
@@ -635,15 +635,16 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
        }
 
        // commits list is in reverse chronological order
-       element := list.Back()
-       for element != nil {
-               commit := element.Value.(*git.Commit)
+       first := true
+       for i := len(commits) - 1; i >= 0; i-- {
+               commit := commits[i]
 
                if setting.Repository.PullRequest.PopulateSquashCommentWithCommitMessages {
                        maxSize := setting.Repository.PullRequest.DefaultMergeMessageSize
                        if maxSize < 0 || stringBuilder.Len() < maxSize {
                                var toWrite []byte
-                               if element == list.Back() {
+                               if first {
+                                       first = false
                                        toWrite = []byte(strings.TrimPrefix(commit.CommitMessage, pr.Issue.Title))
                                } else {
                                        toWrite = []byte(commit.CommitMessage)
@@ -669,7 +670,6 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
                        authors = append(authors, authorString)
                        authorsMap[authorString] = true
                }
-               element = element.Prev()
        }
 
        // Consider collecting the remaining authors
@@ -677,25 +677,21 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
                skip := limit
                limit = 30
                for {
-                       list, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, skip)
+                       commits, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, skip)
                        if err != nil {
                                log.Error("Unable to get commits between: %s %s Error: %v", pr.HeadBranch, pr.MergeBase, err)
                                return ""
 
                        }
-                       if list.Len() == 0 {
+                       if len(commits) == 0 {
                                break
                        }
-                       element := list.Front()
-                       for element != nil {
-                               commit := element.Value.(*git.Commit)
-
+                       for _, commit := range commits {
                                authorString := commit.Author.String()
                                if !authorsMap[authorString] && authorString != posterSig {
                                        authors = append(authors, authorString)
                                        authorsMap[authorString] = true
                                }
-                               element = element.Next()
                        }
                        skip += limit
                }
index 26df6b8e45e66fb54e34db432bd54c6d4ab96fb8..cf7060adef0e7af8ce4e5749dde7ba2b310a72c4 100644 (file)
@@ -5,7 +5,6 @@
 package repository
 
 import (
-       "container/list"
        "fmt"
        "time"
 
@@ -147,7 +146,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
                                refName := opts.RefName()
 
                                // Push new branch.
-                               var l *list.List
+                               var l []*git.Commit
                                if opts.IsNewRef() {
                                        if repo.IsEmpty { // Change default branch and empty status only if pushed ref is non-empty branch.
                                                repo.DefaultBranch = refName
@@ -191,7 +190,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
                                        }
                                }
 
-                               commits := repo_module.ListToPushCommits(l)
+                               commits := repo_module.GitToPushCommits(l)
                                commits.HeadCommit = repo_module.CommitToPushCommit(newCommit)
 
                                if err := repofiles.UpdateIssuesCommit(pusher, repo, commits.Commits, refName); err != nil {
index 071acdcbcfa0cdb7658d813c7ef0cd3a098018d5..6c74f34c29616c8e930f69a44681bcce0fe11d63 100644 (file)
@@ -30,7 +30,7 @@
 
                                {{.i18n.Tr "mail.issue.action.force_push" .Doer.Name .Comment.Issue.PullRequest.HeadBranch $oldCommitLink $newCommitLink | Str2html}}
                        {{else}}
-                               {{.i18n.Tr (TrN .i18n.Lang .Comment.Commits.Len "mail.issue.action.push_1" "mail.issue.action.push_n")  .Doer.Name .Comment.Issue.PullRequest.HeadBranch .Comment.Commits.Len | Str2html}}
+                               {{.i18n.Tr (TrN .i18n.Lang (len .Comment.Commits) "mail.issue.action.push_1" "mail.issue.action.push_n") .Doer.Name .Comment.Issue.PullRequest.HeadBranch (len .Comment.Commits) | Str2html}}
                        {{end}}
                </p>
        {{end}}
@@ -69,9 +69,8 @@
                        </div>
                {{end -}}
                {{if eq .ActionName "push"}}
-                       {{ $r:= List .Comment.Commits}}
                        <ul>
-                       {{range $r}}
+                       {{range .Comment.Commits}}
                                <li>
                                        <a href="{{AppUrl}}{{$.Comment.Issue.PullRequest.BaseRepo.OwnerName}}/{{$.Comment.Issue.PullRequest.BaseRepo.Name}}/commit/{{.ID}}">
                                                {{ShortSha .ID.String}}
index 66138e21389db1ab03f22efedf7047bd15c79f1f..5282430ec796f727ea8980e80ffff237f36a0380 100644 (file)
@@ -9,8 +9,7 @@
                                </tr>
                        </thead>
                        <tbody class="commit-list">
-                               {{ $r:= List .Commits}}
-                               {{range $r}}
+                               {{range .Commits}}
                                        <tr>
                                                <td class="author">
                                                        {{$userName := .Author.Name}}
@@ -69,9 +68,7 @@
                                                        {{if IsMultilineCommitMessage .Message}}
                                                        <button class="basic compact mini ui icon button commit-button"><i class="ellipsis horizontal icon"></i></button>
                                                        {{end}}
-                                                       {{if eq (CommitType .) "SignCommitWithStatuses"}}
-                                                               {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $}}
-                                                       {{end}}
+                                                       {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $}}
                                                        {{if IsMultilineCommitMessage .Message}}
                                                        <pre class="commit-body" style="display: none;">{{RenderCommitBody .Message $.RepoLink $.Repository.ComposeMetas}}</pre>
                                                        {{end}}
index acab040a450403d1ed55b38ff06d8899c715391b..bdbee816cc5802c0f8fb61e663c512bb828e139c 100644 (file)
@@ -1,7 +1,6 @@
-{{ $r:= List .comment.Commits}}
 {{ $index := 0}}
 <div class="timeline-item commits-list">
-{{range $r}}
+{{range .comment.Commits}}
        {{ $tag := printf "%s-%d" $.comment.HashTag $index }}
        {{ $index = Add $index 1}}
        <div class="singular-commit" id="{{$tag}}">
@@ -15,9 +14,7 @@
                {{end}}
 
                <span class="ui float right shabox">
-                       {{if eq (CommitType .) "SignCommitWithStatuses"}}
-                               {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $.root}}
-                       {{end}}
+                       {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $.root}}
                        {{$class := "ui sha label"}}
                        {{if .Signature}}
                                {{$class = (printf "%s%s" $class " isSigned")}}
index dcc0401c99962bf9bd2195747d44aab04c0938f6..7bc90b0434b70494b236ea7756151d8ad95650a8 100644 (file)
                                {{ if .IsForcePush }}
                                        {{$.i18n.Tr "repo.issues.force_push_codes" $.Issue.PullRequest.HeadBranch (ShortSha .OldCommit) ($.Issue.Repo.CommitLink .OldCommit)  (ShortSha .NewCommit) ($.Issue.Repo.CommitLink .NewCommit) $createdStr | Safe}}
                                {{else}}
-                                       {{$.i18n.Tr (TrN $.i18n.Lang .Commits.Len "repo.issues.push_commit_1" "repo.issues.push_commits_n") .Commits.Len $createdStr | Safe}}
+                                       {{$.i18n.Tr (TrN $.i18n.Lang (len .Commits) "repo.issues.push_commit_1" "repo.issues.push_commits_n") (len .Commits) $createdStr | Safe}}
                                {{end}}
                        </span>
                </div>
index 745fb1ec63c9d1daae184791628542f9d19d8ca8..1b770d4472a3733daced43013ab4a2ac3f51c27a 100644 (file)
                                                        <ul>
                                                                {{ $push := ActionContent2Commits .}}
                                                                {{ $repoLink := .GetRepoLink}}
-                                                               {{if $push.Commits}}
-                                                                       {{range $push.Commits}}
-                                                                               {{ $commitLink := printf "%s/commit/%s" $repoLink .Sha1}}
-                                                                               <li>
-                                                                                       {{avatarHTML ($push.AvatarLink .AuthorEmail) 16 "mr-2" .AuthorName}}
-                                                                                       <a class="commit-id mr-2" href="{{$commitLink}}">{{ShortSha .Sha1}}</a>
-                                                                                       <span class="text truncate light grey">
-                                                                                               {{RenderCommitMessage .Message $repoLink $.ComposeMetas}}
-                                                                                       </span>
-                                                                               </li>
-                                                                       {{end}}
+                                                               {{range $push.Commits}}
+                                                                       {{ $commitLink := printf "%s/commit/%s" $repoLink .Sha1}}
+                                                                       <li>
+                                                                               {{avatarHTML ($push.AvatarLink .AuthorEmail) 16 "mr-2" .AuthorName}}
+                                                                               <a class="commit-id mr-2" href="{{$commitLink}}">{{ShortSha .Sha1}}</a>
+                                                                               <span class="text truncate light grey">
+                                                                                       {{RenderCommitMessage .Message $repoLink $.ComposeMetas}}
+                                                                               </span>
+                                                                       </li>
                                                                {{end}}
                                                                {{if and (gt (len $push.Commits) 1) $push.CompareURL}}<li><a href="{{AppSubUrl}}/{{$push.CompareURL}}">{{$.i18n.Tr "action.compare_commits" (len $push.Commits)}} ยป</a></li>{{end}}
                                                        </ul>