diff options
Diffstat (limited to 'models')
-rw-r--r-- | models/action.go | 20 | ||||
-rw-r--r-- | models/admin.go | 9 | ||||
-rw-r--r-- | models/org.go | 9 | ||||
-rw-r--r-- | models/repo.go | 47 | ||||
-rw-r--r-- | models/update.go | 11 |
5 files changed, 64 insertions, 32 deletions
diff --git a/models/action.go b/models/action.go index 2e158cbf..e38cf593 100644 --- a/models/action.go +++ b/models/action.go @@ -189,7 +189,10 @@ func issueIndexTrimRight(c rune) bool { // updateIssuesCommit checks if issues are manipulated by commit message. func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string, commits []*base.PushCommit) error { - for _, c := range commits { + // Commits are appended in the reverse order. + for i := len(commits) - 1; i >= 0; i-- { + c := commits[i] + refMarked := make(map[int64]bool) for _, ref := range IssueReferenceKeywordsPat.FindAllString(c.Message, -1) { ref = ref[strings.IndexByte(ref, byte(' '))+1:] @@ -210,6 +213,9 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string issue, err := GetIssueByRef(ref) if err != nil { + if IsErrIssueNotExist(err) { + continue + } return err } @@ -246,6 +252,9 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string issue, err := GetIssueByRef(ref) if err != nil { + if IsErrIssueNotExist(err) { + continue + } return err } @@ -283,6 +292,9 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string issue, err := GetIssueByRef(ref) if err != nil { + if IsErrIssueNotExist(err) { + continue + } return err } @@ -346,10 +358,14 @@ func CommitRepoAction( } if err = updateIssuesCommit(u, repo, repoUserName, repoName, commit.Commits); err != nil { - log.Debug("updateIssuesCommit: %v", err) + log.Error(4, "updateIssuesCommit: %v", err) } } + if len(commit.Commits) > setting.FeedMaxCommitNum { + commit.Commits = commit.Commits[:setting.FeedMaxCommitNum] + } + bs, err := json.Marshal(commit) if err != nil { return fmt.Errorf("Marshal: %v", err) diff --git a/models/admin.go b/models/admin.go index 493cc7af..e24e0026 100644 --- a/models/admin.go +++ b/models/admin.go @@ -50,11 +50,10 @@ func CountNotices() int64 { return count } -// GetNotices returns given number of notices with offset. -func GetNotices(num, offset int) ([]*Notice, error) { - notices := make([]*Notice, 0, num) - err := x.Limit(num, offset).Desc("id").Find(¬ices) - return notices, err +// Notices returns number of notices in given page. +func Notices(page, pageSize int) ([]*Notice, error) { + notices := make([]*Notice, 0, pageSize) + return notices, x.Limit(pageSize, (page-1)*pageSize).Desc("id").Find(¬ices) } // DeleteNotice deletes a system notice by given ID. diff --git a/models/org.go b/models/org.go index b45dcafb..5c3b0d12 100644 --- a/models/org.go +++ b/models/org.go @@ -184,11 +184,10 @@ func CountOrganizations() int64 { return count } -// GetOrganizations returns given number of organizations with offset. -func GetOrganizations(num, offset int) ([]*User, error) { - orgs := make([]*User, 0, num) - err := x.Limit(num, offset).Where("type=1").Asc("id").Find(&orgs) - return orgs, err +// Organizations returns number of organizations in given page. +func Organizations(page, pageSize int) ([]*User, error) { + orgs := make([]*User, 0, pageSize) + return orgs, x.Limit(pageSize, (page-1)*pageSize).Where("type=1").Asc("id").Find(&orgs) } // DeleteOrganization completely and permanently deletes everything of organization. diff --git a/models/repo.go b/models/repo.go index 8b805338..d70454fc 100644 --- a/models/repo.go +++ b/models/repo.go @@ -46,6 +46,9 @@ var ( var ( Gitignores, Licenses, Readmes []string + + // Maximum items per page in forks, watchers and stars of a repo + ItemsPerPage = 54 ) func LoadRepoConfig() { @@ -776,21 +779,16 @@ func CountPublicRepositories() int64 { return countRepositories(false) } -// GetRepositoriesWithUsers returns given number of repository objects with offset. -// It also auto-gets corresponding users. -func GetRepositoriesWithUsers(num, offset int) ([]*Repository, error) { - repos := make([]*Repository, 0, num) - if err := x.Limit(num, offset).Asc("id").Find(&repos); err != nil { +// RepositoriesWithUsers returns number of repos in given page. +func RepositoriesWithUsers(page, pageSize int) (_ []*Repository, err error) { + repos := make([]*Repository, 0, pageSize) + if err = x.Limit(pageSize, (page-1)*pageSize).Asc("id").Find(&repos); err != nil { return nil, err } - for _, repo := range repos { - repo.Owner = &User{Id: repo.OwnerID} - has, err := x.Get(repo.Owner) - if err != nil { + for i := range repos { + if err = repos[i].GetOwner(); err != nil { return nil, err - } else if !has { - return nil, ErrUserNotExist{repo.OwnerID, ""} } } @@ -1617,6 +1615,16 @@ func GetWatchers(rid int64) ([]*Watch, error) { return getWatchers(x, rid) } +// Repository.GetWatchers returns all users watching given repository. +func (repo *Repository) GetWatchers(offset int) ([]*User, error) { + users := make([]*User, 0, 10) + offset = (offset - 1) * ItemsPerPage + + err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "watch", "user.id=watch.user_id").Find(&users) + + return users, err +} + func notifyWatchers(e Engine, act *Action) error { // Add feeds for user self and all watchers. watches, err := getWatchers(e, act.RepoID) @@ -1694,6 +1702,15 @@ func IsStaring(uid, repoId int64) bool { return has } +func (repo *Repository) GetStars(offset int) ([]*User, error) { + users := make([]*User, 0, 10) + offset = (offset - 1) * ItemsPerPage + + err := x.Limit(ItemsPerPage, offset).Where("repo_id=?", repo.ID).Join("LEFT", "star", "user.id=star.uid").Find(&users) + + return users, err +} + // ___________ __ // \_ _____/__________| | __ // | __)/ _ \_ __ \ |/ / @@ -1761,3 +1778,11 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit return repo, sess.Commit() } + +func (repo *Repository) GetForks() ([]*Repository, error) { + forks := make([]*Repository, 0, 10) + + err := x.Find(&forks, &Repository{ForkID: repo.ID}) + + return forks, err +} diff --git a/models/update.go b/models/update.go index f381d6fd..cbaf0e66 100644 --- a/models/update.go +++ b/models/update.go @@ -23,10 +23,6 @@ type UpdateTask struct { NewCommitId string } -const ( - MAX_COMMITS int = 5 -) - func AddUpdateTask(task *UpdateTask) error { _, err := x.Insert(task) return err @@ -139,7 +135,6 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName var actEmail string for e := l.Front(); e != nil; e = e.Next() { commit := e.Value.(*git.Commit) - if actEmail == "" { actEmail = commit.Committer.Email } @@ -147,10 +142,8 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName &base.PushCommit{commit.Id.String(), commit.Message(), commit.Author.Email, - commit.Author.Name}) - if len(commits) >= MAX_COMMITS { - break - } + commit.Author.Name, + }) } if err = CommitRepoAction(userId, ru.Id, userName, actEmail, |