diff --git a/models/access.go b/models/access.go index e46819f2d4385..0fefeea6b15f0 100644 --- a/models/access.go +++ b/models/access.go @@ -8,6 +8,7 @@ import ( "fmt" "github.com/go-gitea/gitea/modules/log" + "github.com/go-gitea/gitea/modules/setting" ) type AccessMode int @@ -124,13 +125,20 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) { // GetAccessibleRepositories finds repositories which the user has access but does not own. // If limit is smaller than 1 means returns all found results. func (user *User) GetAccessibleRepositories(limit int) (repos []*Repository, _ error) { - sess := x.Where("owner_id !=? ", user.ID).Desc("updated_unix") + sess := x.Where("owner_id !=? ", user.ID).Desc("uid").Desc("updated_unix") if limit > 0 { sess.Limit(limit) repos = make([]*Repository, 0, limit) } else { repos = make([]*Repository, 0, 10) } + + if setting.UsePostgreSQL { + sess = sess.Join("LEFT", "star", `"repository".id=star.repo_id AND star.uid = ?`, user.ID) + } else { + sess = sess.Join("LEFT", "star", "repository.id=star.repo_id AND star.uid = ?", user.ID) + } + return repos, sess.Join("INNER", "access", "access.user_id = ? AND access.repo_id = repository.id", user.ID).Find(&repos) } diff --git a/models/repo.go b/models/repo.go index 6fa023633c04f..950063f8c66d0 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1450,7 +1450,14 @@ func GetRepositoryByID(id int64) (*Repository, error) { // GetUserRepositories returns a list of repositories of given user. func GetUserRepositories(userID int64, private bool, page, pageSize int) ([]*Repository, error) { - sess := x.Where("owner_id = ?", userID).Desc("updated_unix") + sess := x.Where("owner_id = ?", userID).Desc("uid").Desc("updated_unix") + + if setting.UsePostgreSQL { + sess = sess.Join("LEFT", "star", `"repository".id=star.repo_id AND star.uid = ?`, userID) + } else { + sess = sess.Join("LEFT", "star", "repository.id=star.repo_id AND star.uid = ?", userID) + } + if !private { sess.And("is_private=?", false) } @@ -1467,7 +1474,15 @@ func GetUserRepositories(userID int64, private bool, page, pageSize int) ([]*Rep // GetUserRepositories returns a list of mirror repositories of given user. func GetUserMirrorRepositories(userID int64) ([]*Repository, error) { repos := make([]*Repository, 0, 10) - return repos, x.Where("owner_id = ?", userID).And("is_mirror = ?", true).Find(&repos) + sess := x.Where("owner_id = ?", userID).And("is_mirror = ?", true).Desc("uid") + + if setting.UsePostgreSQL { + sess = sess.Join("LEFT", "star", `"repository".id=star.repo_id AND star.uid = ?`, userID) + } else { + sess = sess.Join("LEFT", "star", "repository.id=star.repo_id AND star.uid = ?", userID) + } + + return repos, sess.Find(&repos) } // GetRecentUpdatedRepositories returns the list of repositories that are recently updated.