aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/action.go20
-rw-r--r--models/admin.go9
-rw-r--r--models/org.go9
-rw-r--r--models/repo.go47
-rw-r--r--models/update.go11
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(&notices)
- 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(&notices)
}
// 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,