Merge pull request #136 from 0xbaadf00d/feature/rewrite-xorm-queries
Rewrite raw queries
This commit is contained in:
		
						commit
						52cc3fd36a
					
				|  | @ -124,14 +124,18 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) { | ||||||
| // GetAccessibleRepositories finds repositories which the user has access but does not own.
 | // GetAccessibleRepositories finds repositories which the user has access but does not own.
 | ||||||
| // If limit is smaller than 1 means returns all found results.
 | // If limit is smaller than 1 means returns all found results.
 | ||||||
| func (user *User) GetAccessibleRepositories(limit int) (repos []*Repository, _ error) { | 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("updated_unix") | ||||||
| 	if limit > 0 { | 	if limit > 0 { | ||||||
| 		sess.Limit(limit) | 		sess.Limit(limit) | ||||||
| 		repos = make([]*Repository, 0, limit) | 		repos = make([]*Repository, 0, limit) | ||||||
| 	} else { | 	} else { | ||||||
| 		repos = make([]*Repository, 0, 10) | 		repos = make([]*Repository, 0, 10) | ||||||
| 	} | 	} | ||||||
| 	return repos, sess.Join("INNER", "access", "access.user_id = ? AND access.repo_id = repository.id", user.ID).Find(&repos) | 	return repos, sess. | ||||||
|  | 		Join("INNER", "access", "access.user_id = ? AND access.repo_id = repository.id", user.ID). | ||||||
|  | 		Find(&repos) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func maxAccessMode(modes ...AccessMode) AccessMode { | func maxAccessMode(modes ...AccessMode) AccessMode { | ||||||
|  |  | ||||||
|  | @ -591,9 +591,14 @@ func MergePullRequestAction(actUser *User, repo *Repository, pull *Issue) error | ||||||
| // actorID can be -1 when isProfile is true or to skip the permission check.
 | // actorID can be -1 when isProfile is true or to skip the permission check.
 | ||||||
| func GetFeeds(ctxUser *User, actorID, offset int64, isProfile bool) ([]*Action, error) { | func GetFeeds(ctxUser *User, actorID, offset int64, isProfile bool) ([]*Action, error) { | ||||||
| 	actions := make([]*Action, 0, 20) | 	actions := make([]*Action, 0, 20) | ||||||
| 	sess := x.Limit(20, int(offset)).Desc("id").Where("user_id = ?", ctxUser.ID) | 	sess := x. | ||||||
|  | 		Limit(20, int(offset)). | ||||||
|  | 		Desc("id"). | ||||||
|  | 		Where("user_id = ?", ctxUser.ID) | ||||||
| 	if isProfile { | 	if isProfile { | ||||||
| 		sess.And("is_private = ?", false).And("act_user_id = ?", ctxUser.ID) | 		sess. | ||||||
|  | 			And("is_private = ?", false). | ||||||
|  | 			And("act_user_id = ?", ctxUser.ID) | ||||||
| 	} else if actorID != -1 && ctxUser.IsOrganization() { | 	} else if actorID != -1 && ctxUser.IsOrganization() { | ||||||
| 		// FIXME: only need to get IDs here, not all fields of repository.
 | 		// FIXME: only need to get IDs here, not all fields of repository.
 | ||||||
| 		repos, _, err := ctxUser.GetUserRepositories(actorID, 1, ctxUser.NumRepos) | 		repos, _, err := ctxUser.GetUserRepositories(actorID, 1, ctxUser.NumRepos) | ||||||
|  |  | ||||||
|  | @ -103,7 +103,10 @@ func CountNotices() int64 { | ||||||
| // Notices returns number of notices in given page.
 | // Notices returns number of notices in given page.
 | ||||||
| func Notices(page, pageSize int) ([]*Notice, error) { | func Notices(page, pageSize int) ([]*Notice, error) { | ||||||
| 	notices := make([]*Notice, 0, pageSize) | 	notices := make([]*Notice, 0, pageSize) | ||||||
| 	return notices, x.Limit(pageSize, (page-1)*pageSize).Desc("id").Find(¬ices) | 	return notices, x. | ||||||
|  | 		Limit(pageSize, (page-1)*pageSize). | ||||||
|  | 		Desc("id"). | ||||||
|  | 		Find(¬ices) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeleteNotice deletes a system notice by given ID.
 | // DeleteNotice deletes a system notice by given ID.
 | ||||||
|  | @ -127,6 +130,8 @@ func DeleteNoticesByIDs(ids []int64) error { | ||||||
| 	if len(ids) == 0 { | 	if len(ids) == 0 { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 	_, err := x.Where("id IN (" + strings.Join(base.Int64sToStrings(ids), ",") + ")").Delete(new(Notice)) | 	_, err := x. | ||||||
|  | 		Where("id IN (" + strings.Join(base.Int64sToStrings(ids), ",") + ")"). | ||||||
|  | 		Delete(new(Notice)) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -820,13 +820,17 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) { | ||||||
| 	sess := x.Limit(setting.UI.IssuePagingNum, (opts.Page-1)*setting.UI.IssuePagingNum) | 	sess := x.Limit(setting.UI.IssuePagingNum, (opts.Page-1)*setting.UI.IssuePagingNum) | ||||||
| 
 | 
 | ||||||
| 	if opts.RepoID > 0 { | 	if opts.RepoID > 0 { | ||||||
| 		sess.Where("issue.repo_id=?", opts.RepoID).And("issue.is_closed=?", opts.IsClosed) | 		sess. | ||||||
|  | 			Where("issue.repo_id=?", opts.RepoID). | ||||||
|  | 			And("issue.is_closed=?", opts.IsClosed) | ||||||
| 	} else if opts.RepoIDs != nil { | 	} else if opts.RepoIDs != nil { | ||||||
| 		// In case repository IDs are provided but actually no repository has issue.
 | 		// In case repository IDs are provided but actually no repository has issue.
 | ||||||
| 		if len(opts.RepoIDs) == 0 { | 		if len(opts.RepoIDs) == 0 { | ||||||
| 			return make([]*Issue, 0), nil | 			return make([]*Issue, 0), nil | ||||||
| 		} | 		} | ||||||
| 		sess.In("issue.repo_id", base.Int64sToStrings(opts.RepoIDs)).And("issue.is_closed=?", opts.IsClosed) | 		sess. | ||||||
|  | 			In("issue.repo_id", base.Int64sToStrings(opts.RepoIDs)). | ||||||
|  | 			And("issue.is_closed=?", opts.IsClosed) | ||||||
| 	} else { | 	} else { | ||||||
| 		sess.Where("issue.is_closed=?", opts.IsClosed) | 		sess.Where("issue.is_closed=?", opts.IsClosed) | ||||||
| 	} | 	} | ||||||
|  | @ -863,12 +867,16 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) { | ||||||
| 	if len(opts.Labels) > 0 && opts.Labels != "0" { | 	if len(opts.Labels) > 0 && opts.Labels != "0" { | ||||||
| 		labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ",")) | 		labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ",")) | ||||||
| 		if len(labelIDs) > 0 { | 		if len(labelIDs) > 0 { | ||||||
| 			sess.Join("INNER", "issue_label", "issue.id = issue_label.issue_id").In("issue_label.label_id", labelIDs) | 			sess. | ||||||
|  | 				Join("INNER", "issue_label", "issue.id = issue_label.issue_id"). | ||||||
|  | 				In("issue_label.label_id", labelIDs) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if opts.IsMention { | 	if opts.IsMention { | ||||||
| 		sess.Join("INNER", "issue_user", "issue.id = issue_user.issue_id").And("issue_user.is_mentioned = ?", true) | 		sess. | ||||||
|  | 			Join("INNER", "issue_user", "issue.id = issue_user.issue_id"). | ||||||
|  | 			And("issue_user.is_mentioned = ?", true) | ||||||
| 
 | 
 | ||||||
| 		if opts.UserID > 0 { | 		if opts.UserID > 0 { | ||||||
| 			sess.And("issue_user.uid = ?", opts.UserID) | 			sess.And("issue_user.uid = ?", opts.UserID) | ||||||
|  | @ -991,7 +999,10 @@ func GetIssueUserPairsByRepoIds(rids []int64, isClosed bool, page int) ([]*Issue | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ius := make([]*IssueUser, 0, 10) | 	ius := make([]*IssueUser, 0, 10) | ||||||
| 	sess := x.Limit(20, (page-1)*20).Where("is_closed=?", isClosed).In("repo_id", rids) | 	sess := x. | ||||||
|  | 		Limit(20, (page-1)*20). | ||||||
|  | 		Where("is_closed=?", isClosed). | ||||||
|  | 		In("repo_id", rids) | ||||||
| 	err := sess.Find(&ius) | 	err := sess.Find(&ius) | ||||||
| 	return ius, err | 	return ius, err | ||||||
| } | } | ||||||
|  | @ -999,7 +1010,10 @@ func GetIssueUserPairsByRepoIds(rids []int64, isClosed bool, page int) ([]*Issue | ||||||
| // GetIssueUserPairsByMode returns issue-user pairs by given repository and user.
 | // GetIssueUserPairsByMode returns issue-user pairs by given repository and user.
 | ||||||
| func GetIssueUserPairsByMode(uid, rid int64, isClosed bool, page, filterMode int) ([]*IssueUser, error) { | func GetIssueUserPairsByMode(uid, rid int64, isClosed bool, page, filterMode int) ([]*IssueUser, error) { | ||||||
| 	ius := make([]*IssueUser, 0, 10) | 	ius := make([]*IssueUser, 0, 10) | ||||||
| 	sess := x.Limit(20, (page-1)*20).Where("uid=?", uid).And("is_closed=?", isClosed) | 	sess := x. | ||||||
|  | 		Limit(20, (page-1)*20). | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		And("is_closed=?", isClosed) | ||||||
| 	if rid > 0 { | 	if rid > 0 { | ||||||
| 		sess.And("repo_id=?", rid) | 		sess.And("repo_id=?", rid) | ||||||
| 	} | 	} | ||||||
|  | @ -1101,12 +1115,16 @@ func GetIssueStats(opts *IssueStatsOptions) *IssueStats { | ||||||
| 	stats := &IssueStats{} | 	stats := &IssueStats{} | ||||||
| 
 | 
 | ||||||
| 	countSession := func(opts *IssueStatsOptions) *xorm.Session { | 	countSession := func(opts *IssueStatsOptions) *xorm.Session { | ||||||
| 		sess := x.Where("issue.repo_id = ?", opts.RepoID).And("is_pull = ?", opts.IsPull) | 		sess := x. | ||||||
|  | 			Where("issue.repo_id = ?", opts.RepoID). | ||||||
|  | 			And("is_pull = ?", opts.IsPull) | ||||||
| 
 | 
 | ||||||
| 		if len(opts.Labels) > 0 && opts.Labels != "0" { | 		if len(opts.Labels) > 0 && opts.Labels != "0" { | ||||||
| 			labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ",")) | 			labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ",")) | ||||||
| 			if len(labelIDs) > 0 { | 			if len(labelIDs) > 0 { | ||||||
| 				sess.Join("INNER", "issue_label", "issue.id = issue_id").In("label_id", labelIDs) | 				sess. | ||||||
|  | 					Join("INNER", "issue_label", "issue.id = issue_id"). | ||||||
|  | 					In("label_id", labelIDs) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -1163,7 +1181,9 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int, isPul | ||||||
| 	stats := &IssueStats{} | 	stats := &IssueStats{} | ||||||
| 
 | 
 | ||||||
| 	countSession := func(isClosed, isPull bool, repoID int64, repoIDs []int64) *xorm.Session { | 	countSession := func(isClosed, isPull bool, repoID int64, repoIDs []int64) *xorm.Session { | ||||||
| 		sess := x.Where("issue.is_closed = ?", isClosed).And("issue.is_pull = ?", isPull) | 		sess := x. | ||||||
|  | 			Where("issue.is_closed = ?", isClosed). | ||||||
|  | 			And("issue.is_pull = ?", isPull) | ||||||
| 
 | 
 | ||||||
| 		if repoID > 0 || len(repoIDs) == 0 { | 		if repoID > 0 || len(repoIDs) == 0 { | ||||||
| 			sess.And("repo_id = ?", repoID) | 			sess.And("repo_id = ?", repoID) | ||||||
|  | @ -1203,7 +1223,8 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int, isPul | ||||||
| // GetRepoIssueStats returns number of open and closed repository issues by given filter mode.
 | // GetRepoIssueStats returns number of open and closed repository issues by given filter mode.
 | ||||||
| func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen int64, numClosed int64) { | func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen int64, numClosed int64) { | ||||||
| 	countSession := func(isClosed, isPull bool, repoID int64) *xorm.Session { | 	countSession := func(isClosed, isPull bool, repoID int64) *xorm.Session { | ||||||
| 		sess := x.Where("issue.repo_id = ?", isClosed). | 		sess := x. | ||||||
|  | 			Where("issue.repo_id = ?", isClosed). | ||||||
| 			And("is_pull = ?", isPull). | 			And("is_pull = ?", isPull). | ||||||
| 			And("repo_id = ?", repoID) | 			And("repo_id = ?", repoID) | ||||||
| 
 | 
 | ||||||
|  | @ -1463,7 +1484,9 @@ func UpdateMilestone(m *Milestone) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func countRepoMilestones(e Engine, repoID int64) int64 { | func countRepoMilestones(e Engine, repoID int64) int64 { | ||||||
| 	count, _ := e.Where("repo_id=?", repoID).Count(new(Milestone)) | 	count, _ := e. | ||||||
|  | 		Where("repo_id=?", repoID). | ||||||
|  | 		Count(new(Milestone)) | ||||||
| 	return count | 	return count | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1473,7 +1496,9 @@ func CountRepoMilestones(repoID int64) int64 { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func countRepoClosedMilestones(e Engine, repoID int64) int64 { | func countRepoClosedMilestones(e Engine, repoID int64) int64 { | ||||||
| 	closed, _ := e.Where("repo_id=? AND is_closed=?", repoID, true).Count(new(Milestone)) | 	closed, _ := e. | ||||||
|  | 		Where("repo_id=? AND is_closed=?", repoID, true). | ||||||
|  | 		Count(new(Milestone)) | ||||||
| 	return closed | 	return closed | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1484,7 +1509,9 @@ func CountRepoClosedMilestones(repoID int64) int64 { | ||||||
| 
 | 
 | ||||||
| // MilestoneStats returns number of open and closed milestones of given repository.
 | // MilestoneStats returns number of open and closed milestones of given repository.
 | ||||||
| func MilestoneStats(repoID int64) (open int64, closed int64) { | func MilestoneStats(repoID int64) (open int64, closed int64) { | ||||||
| 	open, _ = x.Where("repo_id=? AND is_closed=?", repoID, false).Count(new(Milestone)) | 	open, _ = x. | ||||||
|  | 		Where("repo_id=? AND is_closed=?", repoID, false). | ||||||
|  | 		Count(new(Milestone)) | ||||||
| 	return open, CountRepoClosedMilestones(repoID) | 	return open, CountRepoClosedMilestones(repoID) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -356,7 +356,9 @@ func GetCommentByID(id int64) (*Comment, error) { | ||||||
| 
 | 
 | ||||||
| func getCommentsByIssueIDSince(e Engine, issueID, since int64) ([]*Comment, error) { | func getCommentsByIssueIDSince(e Engine, issueID, since int64) ([]*Comment, error) { | ||||||
| 	comments := make([]*Comment, 0, 10) | 	comments := make([]*Comment, 0, 10) | ||||||
| 	sess := e.Where("issue_id = ?", issueID).Asc("created_unix") | 	sess := e. | ||||||
|  | 		Where("issue_id = ?", issueID). | ||||||
|  | 		Asc("created_unix") | ||||||
| 	if since > 0 { | 	if since > 0 { | ||||||
| 		sess.And("updated_unix >= ?", since) | 		sess.And("updated_unix >= ?", since) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -138,13 +138,20 @@ func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) { | ||||||
| // it silently ignores label IDs that are not belong to the repository.
 | // it silently ignores label IDs that are not belong to the repository.
 | ||||||
| func GetLabelsInRepoByIDs(repoID int64, labelIDs []int64) ([]*Label, error) { | func GetLabelsInRepoByIDs(repoID int64, labelIDs []int64) ([]*Label, error) { | ||||||
| 	labels := make([]*Label, 0, len(labelIDs)) | 	labels := make([]*Label, 0, len(labelIDs)) | ||||||
| 	return labels, x.Where("repo_id = ?", repoID).In("id", base.Int64sToStrings(labelIDs)).Asc("name").Find(&labels) | 	return labels, x. | ||||||
|  | 		Where("repo_id = ?", repoID). | ||||||
|  | 		In("id", base.Int64sToStrings(labelIDs)). | ||||||
|  | 		Asc("name"). | ||||||
|  | 		Find(&labels) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetLabelsByRepoID returns all labels that belong to given repository by ID.
 | // GetLabelsByRepoID returns all labels that belong to given repository by ID.
 | ||||||
| func GetLabelsByRepoID(repoID int64) ([]*Label, error) { | func GetLabelsByRepoID(repoID int64) ([]*Label, error) { | ||||||
| 	labels := make([]*Label, 0, 10) | 	labels := make([]*Label, 0, 10) | ||||||
| 	return labels, x.Where("repo_id = ?", repoID).Asc("name").Find(&labels) | 	return labels, x. | ||||||
|  | 		Where("repo_id = ?", repoID). | ||||||
|  | 		Asc("name"). | ||||||
|  | 		Find(&labels) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) { | func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) { | ||||||
|  | @ -161,7 +168,11 @@ func getLabelsByIssueID(e Engine, issueID int64) ([]*Label, error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	labels := make([]*Label, 0, len(labelIDs)) | 	labels := make([]*Label, 0, len(labelIDs)) | ||||||
| 	return labels, e.Where("id > 0").In("id", base.Int64sToStrings(labelIDs)).Asc("name").Find(&labels) | 	return labels, e. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		In("id", base.Int64sToStrings(labelIDs)). | ||||||
|  | 		Asc("name"). | ||||||
|  | 		Find(&labels) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetLabelsByIssueID returns all labels that belong to given issue by ID.
 | // GetLabelsByIssueID returns all labels that belong to given issue by ID.
 | ||||||
|  | @ -197,7 +208,9 @@ func DeleteLabel(repoID, labelID int64) error { | ||||||
| 
 | 
 | ||||||
| 	if _, err = sess.Id(labelID).Delete(new(Label)); err != nil { | 	if _, err = sess.Id(labelID).Delete(new(Label)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if _, err = sess.Where("label_id = ?", labelID).Delete(new(IssueLabel)); err != nil { | 	} else if _, err = sess. | ||||||
|  | 		Where("label_id = ?", labelID). | ||||||
|  | 		Delete(new(IssueLabel)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -293,7 +306,10 @@ func NewIssueLabels(issue *Issue, labels []*Label) (err error) { | ||||||
| 
 | 
 | ||||||
| func getIssueLabels(e Engine, issueID int64) ([]*IssueLabel, error) { | func getIssueLabels(e Engine, issueID int64) ([]*IssueLabel, error) { | ||||||
| 	issueLabels := make([]*IssueLabel, 0, 10) | 	issueLabels := make([]*IssueLabel, 0, 10) | ||||||
| 	return issueLabels, e.Where("issue_id=?", issueID).Asc("label_id").Find(&issueLabels) | 	return issueLabels, e. | ||||||
|  | 		Where("issue_id=?", issueID). | ||||||
|  | 		Asc("label_id"). | ||||||
|  | 		Find(&issueLabels) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetIssueLabels returns all issue-label relations of given issue by ID.
 | // GetIssueLabels returns all issue-label relations of given issue by ID.
 | ||||||
|  |  | ||||||
							
								
								
									
										108
									
								
								models/org.go
								
								
								
								
							
							
						
						
									
										108
									
								
								models/org.go
								
								
								
								
							|  | @ -13,7 +13,6 @@ import ( | ||||||
| 	"github.com/go-xorm/xorm" | 	"github.com/go-xorm/xorm" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/modules/base" | 	"code.gitea.io/gitea/modules/base" | ||||||
| 	"code.gitea.io/gitea/modules/log" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
|  | @ -50,7 +49,10 @@ func (org *User) GetOwnerTeam() (*Team, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (org *User) getTeams(e Engine) error { | func (org *User) getTeams(e Engine) error { | ||||||
| 	return e.Where("org_id=?", org.ID).OrderBy("CASE WHEN name LIKE '" + OWNER_TEAM + "' THEN '' ELSE name END").Find(&org.Teams) | 	return e. | ||||||
|  | 		Where("org_id=?", org.ID). | ||||||
|  | 		OrderBy("CASE WHEN name LIKE '" + OWNER_TEAM + "' THEN '' ELSE name END"). | ||||||
|  | 		Find(&org.Teams) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetTeams returns all teams that belong to organization.
 | // GetTeams returns all teams that belong to organization.
 | ||||||
|  | @ -181,14 +183,20 @@ func GetOrgByName(name string) (*User, error) { | ||||||
| 
 | 
 | ||||||
| // CountOrganizations returns number of organizations.
 | // CountOrganizations returns number of organizations.
 | ||||||
| func CountOrganizations() int64 { | func CountOrganizations() int64 { | ||||||
| 	count, _ := x.Where("type=1").Count(new(User)) | 	count, _ := x. | ||||||
|  | 		Where("type=1"). | ||||||
|  | 		Count(new(User)) | ||||||
| 	return count | 	return count | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Organizations returns number of organizations in given page.
 | // Organizations returns number of organizations in given page.
 | ||||||
| func Organizations(page, pageSize int) ([]*User, error) { | func Organizations(page, pageSize int) ([]*User, error) { | ||||||
| 	orgs := make([]*User, 0, pageSize) | 	orgs := make([]*User, 0, pageSize) | ||||||
| 	return orgs, x.Limit(pageSize, (page-1)*pageSize).Where("type=1").Asc("name").Find(&orgs) | 	return orgs, x. | ||||||
|  | 		Limit(pageSize, (page-1)*pageSize). | ||||||
|  | 		Where("type=1"). | ||||||
|  | 		Asc("name"). | ||||||
|  | 		Find(&orgs) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeleteOrganization completely and permanently deletes everything of organization.
 | // DeleteOrganization completely and permanently deletes everything of organization.
 | ||||||
|  | @ -237,19 +245,30 @@ type OrgUser struct { | ||||||
| 
 | 
 | ||||||
| // IsOrganizationOwner returns true if given user is in the owner team.
 | // IsOrganizationOwner returns true if given user is in the owner team.
 | ||||||
| func IsOrganizationOwner(orgId, uid int64) bool { | func IsOrganizationOwner(orgId, uid int64) bool { | ||||||
| 	has, _ := x.Where("is_owner=?", true).And("uid=?", uid).And("org_id=?", orgId).Get(new(OrgUser)) | 	has, _ := x. | ||||||
|  | 		Where("is_owner=?", true). | ||||||
|  | 		And("uid=?", uid). | ||||||
|  | 		And("org_id=?", orgId). | ||||||
|  | 		Get(new(OrgUser)) | ||||||
| 	return has | 	return has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IsOrganizationMember returns true if given user is member of organization.
 | // IsOrganizationMember returns true if given user is member of organization.
 | ||||||
| func IsOrganizationMember(orgId, uid int64) bool { | func IsOrganizationMember(orgId, uid int64) bool { | ||||||
| 	has, _ := x.Where("uid=?", uid).And("org_id=?", orgId).Get(new(OrgUser)) | 	has, _ := x. | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		And("org_id=?", orgId). | ||||||
|  | 		Get(new(OrgUser)) | ||||||
| 	return has | 	return has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IsPublicMembership returns true if given user public his/her membership.
 | // IsPublicMembership returns true if given user public his/her membership.
 | ||||||
| func IsPublicMembership(orgId, uid int64) bool { | func IsPublicMembership(orgId, uid int64) bool { | ||||||
| 	has, _ := x.Where("uid=?", uid).And("org_id=?", orgId).And("is_public=?", true).Get(new(OrgUser)) | 	has, _ := x. | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		And("org_id=?", orgId). | ||||||
|  | 		And("is_public=?", true). | ||||||
|  | 		Get(new(OrgUser)) | ||||||
| 	return has | 	return has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -319,14 +338,19 @@ func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) { | ||||||
| // GetOrgUsersByOrgID returns all organization-user relations by organization ID.
 | // GetOrgUsersByOrgID returns all organization-user relations by organization ID.
 | ||||||
| func GetOrgUsersByOrgID(orgID int64) ([]*OrgUser, error) { | func GetOrgUsersByOrgID(orgID int64) ([]*OrgUser, error) { | ||||||
| 	ous := make([]*OrgUser, 0, 10) | 	ous := make([]*OrgUser, 0, 10) | ||||||
| 	err := x.Where("org_id=?", orgID).Find(&ous) | 	err := x. | ||||||
|  | 		Where("org_id=?", orgID). | ||||||
|  | 		Find(&ous) | ||||||
| 	return ous, err | 	return ous, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ChangeOrgUserStatus changes public or private membership status.
 | // ChangeOrgUserStatus changes public or private membership status.
 | ||||||
| func ChangeOrgUserStatus(orgID, uid int64, public bool) error { | func ChangeOrgUserStatus(orgID, uid int64, public bool) error { | ||||||
| 	ou := new(OrgUser) | 	ou := new(OrgUser) | ||||||
| 	has, err := x.Where("uid=?", uid).And("org_id=?", orgID).Get(ou) | 	has, err := x. | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		And("org_id=?", orgID). | ||||||
|  | 		Get(ou) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -370,7 +394,10 @@ func AddOrgUser(orgID, uid int64) error { | ||||||
| func RemoveOrgUser(orgID, userID int64) error { | func RemoveOrgUser(orgID, userID int64) error { | ||||||
| 	ou := new(OrgUser) | 	ou := new(OrgUser) | ||||||
| 
 | 
 | ||||||
| 	has, err := x.Where("uid=?", userID).And("org_id=?", orgID).Get(ou) | 	has, err := x. | ||||||
|  | 		Where("uid=?", userID). | ||||||
|  | 		And("org_id=?", orgID). | ||||||
|  | 		Get(ou) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("get org-user: %v", err) | 		return fmt.Errorf("get org-user: %v", err) | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -425,7 +452,10 @@ func RemoveOrgUser(orgID, userID int64) error { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if len(repoIDs) > 0 { | 	if len(repoIDs) > 0 { | ||||||
| 		if _, err = sess.Where("user_id = ?", user.ID).In("repo_id", repoIDs).Delete(new(Access)); err != nil { | 		if _, err = sess. | ||||||
|  | 			Where("user_id = ?", user.ID). | ||||||
|  | 			In("repo_id", repoIDs). | ||||||
|  | 			Delete(new(Access)); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -506,32 +536,29 @@ func (org *User) GetUserRepositories(userID int64, page, pageSize int) ([]*Repos | ||||||
| 		page = 1 | 		page = 1 | ||||||
| 	} | 	} | ||||||
| 	repos := make([]*Repository, 0, pageSize) | 	repos := make([]*Repository, 0, pageSize) | ||||||
| 	// FIXME: use XORM chain operations instead of raw SQL.
 | 	if err := x. | ||||||
| 	if err = x.SQL(fmt.Sprintf(`SELECT repository.* FROM repository | 		Select("`repository`.*"). | ||||||
| 	INNER JOIN team_repo | 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id"). | ||||||
| 	ON team_repo.repo_id = repository.id | 		Where("(`repository`.owner_id=? AND `repository`.is_private=?)", org.ID, false). | ||||||
| 	WHERE (repository.owner_id = ? AND repository.is_private = ?) OR team_repo.team_id IN (%s) | 		Or("team_repo.team_id IN (?)", strings.Join(base.Int64sToStrings(teamIDs), ",")). | ||||||
| 	GROUP BY repository.id | 		GroupBy("`repository`.id"). | ||||||
| 	ORDER BY updated_unix DESC | 		OrderBy("updated_unix DESC"). | ||||||
| 	LIMIT %d OFFSET %d`, | 		Limit(pageSize, (page-1)*pageSize). | ||||||
| 		strings.Join(base.Int64sToStrings(teamIDs), ","), pageSize, (page-1)*pageSize), | 		Find(&repos); err != nil { | ||||||
| 		org.ID, false).Find(&repos); err != nil { |  | ||||||
| 		return nil, 0, fmt.Errorf("get repositories: %v", err) | 		return nil, 0, fmt.Errorf("get repositories: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	results, err := x.Query(fmt.Sprintf(`SELECT repository.id FROM repository | 	repoCount, err := x. | ||||||
| 	INNER JOIN team_repo | 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id"). | ||||||
| 	ON team_repo.repo_id = repository.id | 		Where("(`repository`.owner_id=? AND `repository`.is_private=?)", org.ID, false). | ||||||
| 	WHERE (repository.owner_id = ? AND repository.is_private = ?) OR team_repo.team_id IN (%s) | 		Or("team_repo.team_id IN (?)", strings.Join(base.Int64sToStrings(teamIDs), ",")). | ||||||
| 	GROUP BY repository.id | 		GroupBy("`repository`.id"). | ||||||
| 	ORDER BY updated_unix DESC`, | 		Count(&Repository{}) | ||||||
| 		strings.Join(base.Int64sToStrings(teamIDs), ",")), |  | ||||||
| 		org.ID, false) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error(4, "count user repositories in organization: %v", err) | 		return nil, 0, fmt.Errorf("count user repositories in organization: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return repos, int64(len(results)), nil | 	return repos, repoCount, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetUserRepositories returns mirror repositories of the organization
 | // GetUserRepositories returns mirror repositories of the organization
 | ||||||
|  | @ -546,15 +573,12 @@ func (org *User) GetUserMirrorRepositories(userID int64) ([]*Repository, error) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	repos := make([]*Repository, 0, 10) | 	repos := make([]*Repository, 0, 10) | ||||||
| 	if err = x.SQL(fmt.Sprintf(`SELECT repository.* FROM repository | 	return repos, x. | ||||||
| 	INNER JOIN team_repo | 		Select("`repository`.*"). | ||||||
| 	ON team_repo.repo_id = repository.id AND repository.is_mirror = ? | 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true). | ||||||
| 	WHERE (repository.owner_id = ? AND repository.is_private = ?) OR team_repo.team_id IN (%s) | 		Where("(`repository`.owner_id=? AND `repository`.is_private=?)", org.ID, false). | ||||||
| 	GROUP BY repository.id | 		Or("team_repo.team_id IN (?)", strings.Join(base.Int64sToStrings(teamIDs), ",")). | ||||||
| 	ORDER BY updated_unix DESC`, | 		GroupBy("`repository`.id"). | ||||||
| 		strings.Join(base.Int64sToStrings(teamIDs), ",")), | 		OrderBy("updated_unix DESC"). | ||||||
| 		true, org.ID, false).Find(&repos); err != nil { | 		Find(&repos) | ||||||
| 		return nil, fmt.Errorf("get repositories: %v", err) |  | ||||||
| 	} |  | ||||||
| 	return repos, nil |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -38,7 +38,9 @@ func (t *Team) IsMember(uid int64) bool { | ||||||
| 
 | 
 | ||||||
| func (t *Team) getRepositories(e Engine) (err error) { | func (t *Team) getRepositories(e Engine) (err error) { | ||||||
| 	teamRepos := make([]*TeamRepo, 0, t.NumRepos) | 	teamRepos := make([]*TeamRepo, 0, t.NumRepos) | ||||||
| 	if err = x.Where("team_id=?", t.ID).Find(&teamRepos); err != nil { | 	if err = x. | ||||||
|  | 		Where("team_id=?", t.ID). | ||||||
|  | 		Find(&teamRepos); err != nil { | ||||||
| 		return fmt.Errorf("get team-repos: %v", err) | 		return fmt.Errorf("get team-repos: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -225,7 +227,10 @@ func NewTeam(t *Team) (err error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	t.LowerName = strings.ToLower(t.Name) | 	t.LowerName = strings.ToLower(t.Name) | ||||||
| 	has, err = x.Where("org_id=?", t.OrgID).And("lower_name=?", t.LowerName).Get(new(Team)) | 	has, err = x. | ||||||
|  | 		Where("org_id=?", t.OrgID). | ||||||
|  | 		And("lower_name=?", t.LowerName). | ||||||
|  | 		Get(new(Team)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if has { | 	} else if has { | ||||||
|  | @ -303,7 +308,11 @@ func UpdateTeam(t *Team, authChanged bool) (err error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	t.LowerName = strings.ToLower(t.Name) | 	t.LowerName = strings.ToLower(t.Name) | ||||||
| 	has, err := x.Where("org_id=?", t.OrgID).And("lower_name=?", t.LowerName).And("id!=?", t.ID).Get(new(Team)) | 	has, err := x. | ||||||
|  | 		Where("org_id=?", t.OrgID). | ||||||
|  | 		And("lower_name=?", t.LowerName). | ||||||
|  | 		And("id!=?", t.ID). | ||||||
|  | 		Get(new(Team)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if has { | 	} else if has { | ||||||
|  | @ -357,7 +366,10 @@ func DeleteTeam(t *Team) error { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Delete team-user.
 | 	// Delete team-user.
 | ||||||
| 	if _, err = sess.Where("org_id=?", org.ID).Where("team_id=?", t.ID).Delete(new(TeamUser)); err != nil { | 	if _, err = sess. | ||||||
|  | 		Where("org_id=?", org.ID). | ||||||
|  | 		Where("team_id=?", t.ID). | ||||||
|  | 		Delete(new(TeamUser)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -389,7 +401,11 @@ type TeamUser struct { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func isTeamMember(e Engine, orgID, teamID, uid int64) bool { | func isTeamMember(e Engine, orgID, teamID, uid int64) bool { | ||||||
| 	has, _ := e.Where("org_id=?", orgID).And("team_id=?", teamID).And("uid=?", uid).Get(new(TeamUser)) | 	has, _ := e. | ||||||
|  | 		Where("org_id=?", orgID). | ||||||
|  | 		And("team_id=?", teamID). | ||||||
|  | 		And("uid=?", uid). | ||||||
|  | 		Get(new(TeamUser)) | ||||||
| 	return has | 	return has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -400,7 +416,9 @@ func IsTeamMember(orgID, teamID, uid int64) bool { | ||||||
| 
 | 
 | ||||||
| func getTeamMembers(e Engine, teamID int64) (_ []*User, err error) { | func getTeamMembers(e Engine, teamID int64) (_ []*User, err error) { | ||||||
| 	teamUsers := make([]*TeamUser, 0, 10) | 	teamUsers := make([]*TeamUser, 0, 10) | ||||||
| 	if err = e.Where("team_id=?", teamID).Find(&teamUsers); err != nil { | 	if err = e. | ||||||
|  | 		Where("team_id=?", teamID). | ||||||
|  | 		Find(&teamUsers); err != nil { | ||||||
| 		return nil, fmt.Errorf("get team-users: %v", err) | 		return nil, fmt.Errorf("get team-users: %v", err) | ||||||
| 	} | 	} | ||||||
| 	members := make([]*User, 0, len(teamUsers)) | 	members := make([]*User, 0, len(teamUsers)) | ||||||
|  | @ -421,7 +439,10 @@ func GetTeamMembers(teamID int64) ([]*User, error) { | ||||||
| 
 | 
 | ||||||
| func getUserTeams(e Engine, orgId, uid int64) ([]*Team, error) { | func getUserTeams(e Engine, orgId, uid int64) ([]*Team, error) { | ||||||
| 	tus := make([]*TeamUser, 0, 5) | 	tus := make([]*TeamUser, 0, 5) | ||||||
| 	if err := e.Where("uid=?", uid).And("org_id=?", orgId).Find(&tus); err != nil { | 	if err := e. | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		And("org_id=?", orgId). | ||||||
|  | 		Find(&tus); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -492,7 +513,10 @@ func AddTeamMember(orgID, teamID, uid int64) error { | ||||||
| 
 | 
 | ||||||
| 	// We make sure it exists before.
 | 	// We make sure it exists before.
 | ||||||
| 	ou := new(OrgUser) | 	ou := new(OrgUser) | ||||||
| 	if _, err = sess.Where("uid = ?", uid).And("org_id = ?", orgID).Get(ou); err != nil { | 	if _, err = sess. | ||||||
|  | 		Where("uid = ?", uid). | ||||||
|  | 		And("org_id = ?", orgID). | ||||||
|  | 		Get(ou); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	ou.NumTeams++ | 	ou.NumTeams++ | ||||||
|  | @ -541,7 +565,10 @@ func removeTeamMember(e Engine, orgID, teamID, uid int64) error { | ||||||
| 	} | 	} | ||||||
| 	if _, err := e.Delete(tu); err != nil { | 	if _, err := e.Delete(tu); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if _, err = e.Id(t.ID).AllCols().Update(t); err != nil { | 	} else if _, err = e. | ||||||
|  | 		Id(t.ID). | ||||||
|  | 		AllCols(). | ||||||
|  | 		Update(t); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -554,7 +581,10 @@ func removeTeamMember(e Engine, orgID, teamID, uid int64) error { | ||||||
| 
 | 
 | ||||||
| 	// This must exist.
 | 	// This must exist.
 | ||||||
| 	ou := new(OrgUser) | 	ou := new(OrgUser) | ||||||
| 	_, err = e.Where("uid = ?", uid).And("org_id = ?", org.ID).Get(ou) | 	_, err = e. | ||||||
|  | 		Where("uid = ?", uid). | ||||||
|  | 		And("org_id = ?", org.ID). | ||||||
|  | 		Get(ou) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | @ -562,7 +592,10 @@ func removeTeamMember(e Engine, orgID, teamID, uid int64) error { | ||||||
| 	if t.IsOwnerTeam() { | 	if t.IsOwnerTeam() { | ||||||
| 		ou.IsOwner = false | 		ou.IsOwner = false | ||||||
| 	} | 	} | ||||||
| 	if _, err = e.Id(ou.ID).AllCols().Update(ou); err != nil { | 	if _, err = e. | ||||||
|  | 		Id(ou.ID). | ||||||
|  | 		AllCols(). | ||||||
|  | 		Update(ou); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
|  | @ -597,7 +630,11 @@ type TeamRepo struct { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func hasTeamRepo(e Engine, orgID, teamID, repoID int64) bool { | func hasTeamRepo(e Engine, orgID, teamID, repoID int64) bool { | ||||||
| 	has, _ := e.Where("org_id=?", orgID).And("team_id=?", teamID).And("repo_id=?", repoID).Get(new(TeamRepo)) | 	has, _ := e. | ||||||
|  | 		Where("org_id=?", orgID). | ||||||
|  | 		And("team_id=?", teamID). | ||||||
|  | 		And("repo_id=?", repoID). | ||||||
|  | 		Get(new(TeamRepo)) | ||||||
| 	return has | 	return has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -462,9 +462,11 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str | ||||||
| // by given head/base and repo/branch.
 | // by given head/base and repo/branch.
 | ||||||
| func GetUnmergedPullRequest(headRepoID, baseRepoID int64, headBranch, baseBranch string) (*PullRequest, error) { | func GetUnmergedPullRequest(headRepoID, baseRepoID int64, headBranch, baseBranch string) (*PullRequest, error) { | ||||||
| 	pr := new(PullRequest) | 	pr := new(PullRequest) | ||||||
| 	has, err := x.Where("head_repo_id=? AND head_branch=? AND base_repo_id=? AND base_branch=? AND has_merged=? AND issue.is_closed=?", | 	has, err := x. | ||||||
|  | 		Where("head_repo_id=? AND head_branch=? AND base_repo_id=? AND base_branch=? AND has_merged=? AND issue.is_closed=?", | ||||||
| 			headRepoID, headBranch, baseRepoID, baseBranch, false, false). | 			headRepoID, headBranch, baseRepoID, baseBranch, false, false). | ||||||
| 		Join("INNER", "issue", "issue.id=pull_request.issue_id").Get(pr) | 		Join("INNER", "issue", "issue.id=pull_request.issue_id"). | ||||||
|  | 		Get(pr) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -478,18 +480,22 @@ func GetUnmergedPullRequest(headRepoID, baseRepoID int64, headBranch, baseBranch | ||||||
| // by given head information (repo and branch).
 | // by given head information (repo and branch).
 | ||||||
| func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string) ([]*PullRequest, error) { | func GetUnmergedPullRequestsByHeadInfo(repoID int64, branch string) ([]*PullRequest, error) { | ||||||
| 	prs := make([]*PullRequest, 0, 2) | 	prs := make([]*PullRequest, 0, 2) | ||||||
| 	return prs, x.Where("head_repo_id = ? AND head_branch = ? AND has_merged = ? AND issue.is_closed = ?", | 	return prs, x. | ||||||
|  | 		Where("head_repo_id = ? AND head_branch = ? AND has_merged = ? AND issue.is_closed = ?", | ||||||
| 			repoID, branch, false, false). | 			repoID, branch, false, false). | ||||||
| 		Join("INNER", "issue", "issue.id = pull_request.issue_id").Find(&prs) | 		Join("INNER", "issue", "issue.id = pull_request.issue_id"). | ||||||
|  | 		Find(&prs) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetUnmergedPullRequestsByBaseInfo returnss all pull requests that are open and has not been merged
 | // GetUnmergedPullRequestsByBaseInfo returnss all pull requests that are open and has not been merged
 | ||||||
| // by given base information (repo and branch).
 | // by given base information (repo and branch).
 | ||||||
| func GetUnmergedPullRequestsByBaseInfo(repoID int64, branch string) ([]*PullRequest, error) { | func GetUnmergedPullRequestsByBaseInfo(repoID int64, branch string) ([]*PullRequest, error) { | ||||||
| 	prs := make([]*PullRequest, 0, 2) | 	prs := make([]*PullRequest, 0, 2) | ||||||
| 	return prs, x.Where("base_repo_id=? AND base_branch=? AND has_merged=? AND issue.is_closed=?", | 	return prs, x. | ||||||
|  | 		Where("base_repo_id=? AND base_branch=? AND has_merged=? AND issue.is_closed=?", | ||||||
| 			repoID, branch, false, false). | 			repoID, branch, false, false). | ||||||
| 		Join("INNER", "issue", "issue.id=pull_request.issue_id").Find(&prs) | 		Join("INNER", "issue", "issue.id=pull_request.issue_id"). | ||||||
|  | 		Find(&prs) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getPullRequestByID(e Engine, id int64) (*PullRequest, error) { | func getPullRequestByID(e Engine, id int64) (*PullRequest, error) { | ||||||
|  | @ -638,7 +644,10 @@ func (prs PullRequestList) loadAttributes(e Engine) error { | ||||||
| 		issueIDs = append(issueIDs, prs[i].IssueID) | 		issueIDs = append(issueIDs, prs[i].IssueID) | ||||||
| 	} | 	} | ||||||
| 	issues := make([]*Issue, 0, len(issueIDs)) | 	issues := make([]*Issue, 0, len(issueIDs)) | ||||||
| 	if err := e.Where("id > 0").In("id", issueIDs).Find(&issues); err != nil { | 	if err := e. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		In("id", issueIDs). | ||||||
|  | 		Find(&issues); err != nil { | ||||||
| 		return fmt.Errorf("find issues: %v", err) | 		return fmt.Errorf("find issues: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -725,7 +734,10 @@ func ChangeUsernameInPullRequests(oldUserName, newUserName string) error { | ||||||
| 	pr := PullRequest{ | 	pr := PullRequest{ | ||||||
| 		HeadUserName: strings.ToLower(newUserName), | 		HeadUserName: strings.ToLower(newUserName), | ||||||
| 	} | 	} | ||||||
| 	_, err := x.Cols("head_user_name").Where("head_user_name = ?", strings.ToLower(oldUserName)).Update(pr) | 	_, err := x. | ||||||
|  | 		Cols("head_user_name"). | ||||||
|  | 		Where("head_user_name = ?", strings.ToLower(oldUserName)). | ||||||
|  | 		Update(pr) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -127,7 +127,9 @@ func GetRelease(repoID int64, tagName string) (*Release, error) { | ||||||
| // GetReleaseByID returns release with given ID.
 | // GetReleaseByID returns release with given ID.
 | ||||||
| func GetReleaseByID(id int64) (*Release, error) { | func GetReleaseByID(id int64) (*Release, error) { | ||||||
| 	rel := new(Release) | 	rel := new(Release) | ||||||
| 	has, err := x.Id(id).Get(rel) | 	has, err := x. | ||||||
|  | 		Id(id). | ||||||
|  | 		Get(rel) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -142,7 +144,10 @@ func GetReleasesByRepoID(repoID int64, page, pageSize int) (rels []*Release, err | ||||||
| 	if page <= 0 { | 	if page <= 0 { | ||||||
| 		page = 1 | 		page = 1 | ||||||
| 	} | 	} | ||||||
| 	err = x.Desc("created_unix").Limit(pageSize, (page-1)*pageSize).Find(&rels, Release{RepoID: repoID}) | 	err = x. | ||||||
|  | 		Desc("created_unix"). | ||||||
|  | 		Limit(pageSize, (page-1)*pageSize). | ||||||
|  | 		Find(&rels, Release{RepoID: repoID}) | ||||||
| 	return rels, err | 	return rels, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -334,7 +334,9 @@ func (repo *Repository) getAssignees(e Engine) (_ []*User, err error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	accesses := make([]*Access, 0, 10) | 	accesses := make([]*Access, 0, 10) | ||||||
| 	if err = e.Where("repo_id = ? AND mode >= ?", repo.ID, AccessModeWrite).Find(&accesses); err != nil { | 	if err = e. | ||||||
|  | 		Where("repo_id = ? AND mode >= ?", repo.ID, AccessModeWrite). | ||||||
|  | 		Find(&accesses); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1209,7 +1211,9 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error) | ||||||
| 
 | 
 | ||||||
| func getRepositoriesByForkID(e Engine, forkID int64) ([]*Repository, error) { | func getRepositoriesByForkID(e Engine, forkID int64) ([]*Repository, error) { | ||||||
| 	repos := make([]*Repository, 0, 10) | 	repos := make([]*Repository, 0, 10) | ||||||
| 	return repos, e.Where("fork_id=?", forkID).Find(&repos) | 	return repos, e. | ||||||
|  | 		Where("fork_id=?", forkID). | ||||||
|  | 		Find(&repos) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetRepositoriesByForkID returns all repositories with given fork ID.
 | // GetRepositoriesByForkID returns all repositories with given fork ID.
 | ||||||
|  | @ -1341,7 +1345,9 @@ func DeleteRepository(uid, repoID int64) error { | ||||||
| 	// Delete comments and attachments.
 | 	// Delete comments and attachments.
 | ||||||
| 	issues := make([]*Issue, 0, 25) | 	issues := make([]*Issue, 0, 25) | ||||||
| 	attachmentPaths := make([]string, 0, len(issues)) | 	attachmentPaths := make([]string, 0, len(issues)) | ||||||
| 	if err = sess.Where("repo_id=?", repoID).Find(&issues); err != nil { | 	if err = sess. | ||||||
|  | 		Where("repo_id=?", repoID). | ||||||
|  | 		Find(&issues); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	for i := range issues { | 	for i := range issues { | ||||||
|  | @ -1350,7 +1356,9 @@ func DeleteRepository(uid, repoID int64) error { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		attachments := make([]*Attachment, 0, 5) | 		attachments := make([]*Attachment, 0, 5) | ||||||
| 		if err = sess.Where("issue_id=?", issues[i].ID).Find(&attachments); err != nil { | 		if err = sess. | ||||||
|  | 			Where("issue_id=?", issues[i].ID). | ||||||
|  | 			Find(&attachments); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		for j := range attachments { | 		for j := range attachments { | ||||||
|  | @ -1450,7 +1458,9 @@ func GetRepositoryByID(id int64) (*Repository, error) { | ||||||
| 
 | 
 | ||||||
| // GetUserRepositories returns a list of repositories of given user.
 | // GetUserRepositories returns a list of repositories of given user.
 | ||||||
| func GetUserRepositories(userID int64, private bool, page, pageSize int) ([]*Repository, error) { | 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("updated_unix") | ||||||
| 	if !private { | 	if !private { | ||||||
| 		sess.And("is_private=?", false) | 		sess.And("is_private=?", false) | ||||||
| 	} | 	} | ||||||
|  | @ -1467,13 +1477,20 @@ func GetUserRepositories(userID int64, private bool, page, pageSize int) ([]*Rep | ||||||
| // GetUserRepositories returns a list of mirror repositories of given user.
 | // GetUserRepositories returns a list of mirror repositories of given user.
 | ||||||
| func GetUserMirrorRepositories(userID int64) ([]*Repository, error) { | func GetUserMirrorRepositories(userID int64) ([]*Repository, error) { | ||||||
| 	repos := make([]*Repository, 0, 10) | 	repos := make([]*Repository, 0, 10) | ||||||
| 	return repos, x.Where("owner_id = ?", userID).And("is_mirror = ?", true).Find(&repos) | 	return repos, x. | ||||||
|  | 		Where("owner_id = ?", userID). | ||||||
|  | 		And("is_mirror = ?", true). | ||||||
|  | 		Find(&repos) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetRecentUpdatedRepositories returns the list of repositories that are recently updated.
 | // GetRecentUpdatedRepositories returns the list of repositories that are recently updated.
 | ||||||
| func GetRecentUpdatedRepositories(page, pageSize int) (repos []*Repository, err error) { | func GetRecentUpdatedRepositories(page, pageSize int) (repos []*Repository, err error) { | ||||||
| 	return repos, x.Limit(pageSize, (page-1)*pageSize). | 	return repos, x. | ||||||
| 		Where("is_private=?", false).Limit(pageSize).Desc("updated_unix").Find(&repos) | 		Limit(pageSize, (page-1)*pageSize). | ||||||
|  | 		Where("is_private=?", false). | ||||||
|  | 		Limit(pageSize). | ||||||
|  | 		Desc("updated_unix"). | ||||||
|  | 		Find(&repos) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getRepositoryCount(e Engine, u *User) (int64, error) { | func getRepositoryCount(e Engine, u *User) (int64, error) { | ||||||
|  | @ -1532,7 +1549,9 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int | ||||||
| 
 | 
 | ||||||
| // DeleteRepositoryArchives deletes all repositories' archives.
 | // DeleteRepositoryArchives deletes all repositories' archives.
 | ||||||
| func DeleteRepositoryArchives() error { | func DeleteRepositoryArchives() error { | ||||||
| 	return x.Where("id > 0").Iterate(new(Repository), | 	return x. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		Iterate(new(Repository), | ||||||
| 			func(idx int, bean interface{}) error { | 			func(idx int, bean interface{}) error { | ||||||
| 				repo := bean.(*Repository) | 				repo := bean.(*Repository) | ||||||
| 				return os.RemoveAll(filepath.Join(repo.RepoPath(), "archives")) | 				return os.RemoveAll(filepath.Join(repo.RepoPath(), "archives")) | ||||||
|  | @ -1541,7 +1560,9 @@ func DeleteRepositoryArchives() error { | ||||||
| 
 | 
 | ||||||
| func gatherMissingRepoRecords() ([]*Repository, error) { | func gatherMissingRepoRecords() ([]*Repository, error) { | ||||||
| 	repos := make([]*Repository, 0, 10) | 	repos := make([]*Repository, 0, 10) | ||||||
| 	if err := x.Where("id > 0").Iterate(new(Repository), | 	if err := x. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		Iterate(new(Repository), | ||||||
| 			func(idx int, bean interface{}) error { | 			func(idx int, bean interface{}) error { | ||||||
| 				repo := bean.(*Repository) | 				repo := bean.(*Repository) | ||||||
| 				if !com.IsDir(repo.RepoPath()) { | 				if !com.IsDir(repo.RepoPath()) { | ||||||
|  | @ -1602,7 +1623,9 @@ func ReinitMissingRepositories() error { | ||||||
| 
 | 
 | ||||||
| // RewriteRepositoryUpdateHook rewrites all repositories' update hook.
 | // RewriteRepositoryUpdateHook rewrites all repositories' update hook.
 | ||||||
| func RewriteRepositoryUpdateHook() error { | func RewriteRepositoryUpdateHook() error { | ||||||
| 	return x.Where("id > 0").Iterate(new(Repository), | 	return x. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		Iterate(new(Repository), | ||||||
| 			func(idx int, bean interface{}) error { | 			func(idx int, bean interface{}) error { | ||||||
| 				repo := bean.(*Repository) | 				repo := bean.(*Repository) | ||||||
| 				return createUpdateHook(repo.RepoPath()) | 				return createUpdateHook(repo.RepoPath()) | ||||||
|  | @ -1628,7 +1651,9 @@ func GitFsck() { | ||||||
| 
 | 
 | ||||||
| 	log.Trace("Doing: GitFsck") | 	log.Trace("Doing: GitFsck") | ||||||
| 
 | 
 | ||||||
| 	if err := x.Where("id>0").Iterate(new(Repository), | 	if err := x. | ||||||
|  | 		Where("id>0"). | ||||||
|  | 		Iterate(new(Repository), | ||||||
| 			func(idx int, bean interface{}) error { | 			func(idx int, bean interface{}) error { | ||||||
| 				repo := bean.(*Repository) | 				repo := bean.(*Repository) | ||||||
| 				repoPath := repo.RepoPath() | 				repoPath := repo.RepoPath() | ||||||
|  | @ -1647,7 +1672,9 @@ func GitFsck() { | ||||||
| 
 | 
 | ||||||
| func GitGcRepos() error { | func GitGcRepos() error { | ||||||
| 	args := append([]string{"gc"}, setting.Git.GCArgs...) | 	args := append([]string{"gc"}, setting.Git.GCArgs...) | ||||||
| 	return x.Where("id > 0").Iterate(new(Repository), | 	return x. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		Iterate(new(Repository), | ||||||
| 			func(idx int, bean interface{}) error { | 			func(idx int, bean interface{}) error { | ||||||
| 				repo := bean.(*Repository) | 				repo := bean.(*Repository) | ||||||
| 				if err := repo.GetOwner(); err != nil { | 				if err := repo.GetOwner(); err != nil { | ||||||
|  | @ -1796,7 +1823,10 @@ func (repos RepositoryList) loadAttributes(e Engine) error { | ||||||
| 		userIDs = append(userIDs, userID) | 		userIDs = append(userIDs, userID) | ||||||
| 	} | 	} | ||||||
| 	users := make([]*User, 0, len(userIDs)) | 	users := make([]*User, 0, len(userIDs)) | ||||||
| 	if err := e.Where("id > 0").In("id", userIDs).Find(&users); err != nil { | 	if err := e. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		In("id", userIDs). | ||||||
|  | 		Find(&users); err != nil { | ||||||
| 		return fmt.Errorf("find users: %v", err) | 		return fmt.Errorf("find users: %v", err) | ||||||
| 	} | 	} | ||||||
| 	for i := range users { | 	for i := range users { | ||||||
|  | @ -1829,7 +1859,10 @@ func (repos MirrorRepositoryList) loadAttributes(e Engine) error { | ||||||
| 		repoIDs = append(repoIDs, repos[i].ID) | 		repoIDs = append(repoIDs, repos[i].ID) | ||||||
| 	} | 	} | ||||||
| 	mirrors := make([]*Mirror, 0, len(repoIDs)) | 	mirrors := make([]*Mirror, 0, len(repoIDs)) | ||||||
| 	if err := e.Where("id > 0").In("repo_id", repoIDs).Find(&mirrors); err != nil { | 	if err := e. | ||||||
|  | 		Where("id > 0"). | ||||||
|  | 		In("repo_id", repoIDs). | ||||||
|  | 		Find(&mirrors); err != nil { | ||||||
| 		return fmt.Errorf("find mirrors: %v", err) | 		return fmt.Errorf("find mirrors: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1910,7 +1943,9 @@ func GetWatchers(repoID int64) ([]*Watch, error) { | ||||||
| // Repository.GetWatchers returns range of users watching given repository.
 | // Repository.GetWatchers returns range of users watching given repository.
 | ||||||
| func (repo *Repository) GetWatchers(page int) ([]*User, error) { | func (repo *Repository) GetWatchers(page int) ([]*User, error) { | ||||||
| 	users := make([]*User, 0, ItemsPerPage) | 	users := make([]*User, 0, ItemsPerPage) | ||||||
| 	sess := x.Limit(ItemsPerPage, (page-1)*ItemsPerPage).Where("watch.repo_id=?", repo.ID) | 	sess := x. | ||||||
|  | 		Limit(ItemsPerPage, (page-1)*ItemsPerPage). | ||||||
|  | 		Where("watch.repo_id=?", repo.ID) | ||||||
| 	if setting.UsePostgreSQL { | 	if setting.UsePostgreSQL { | ||||||
| 		sess = sess.Join("LEFT", "watch", `"user".id=watch.user_id`) | 		sess = sess.Join("LEFT", "watch", `"user".id=watch.user_id`) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -1998,7 +2033,9 @@ func IsStaring(userID, repoID int64) bool { | ||||||
| 
 | 
 | ||||||
| func (repo *Repository) GetStargazers(page int) ([]*User, error) { | func (repo *Repository) GetStargazers(page int) ([]*User, error) { | ||||||
| 	users := make([]*User, 0, ItemsPerPage) | 	users := make([]*User, 0, ItemsPerPage) | ||||||
| 	sess := x.Limit(ItemsPerPage, (page-1)*ItemsPerPage).Where("star.repo_id=?", repo.ID) | 	sess := x. | ||||||
|  | 		Limit(ItemsPerPage, (page-1)*ItemsPerPage). | ||||||
|  | 		Where("star.repo_id=?", repo.ID) | ||||||
| 	if setting.UsePostgreSQL { | 	if setting.UsePostgreSQL { | ||||||
| 		sess = sess.Join("LEFT", "star", `"user".id=star.uid`) | 		sess = sess.Join("LEFT", "star", `"user".id=star.uid`) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -2017,7 +2054,9 @@ func (repo *Repository) GetStargazers(page int) ([]*User, error) { | ||||||
| // HasForkedRepo checks if given user has already forked a repository with given ID.
 | // HasForkedRepo checks if given user has already forked a repository with given ID.
 | ||||||
| func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) { | func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) { | ||||||
| 	repo := new(Repository) | 	repo := new(Repository) | ||||||
| 	has, _ := x.Where("owner_id=? AND fork_id=?", ownerID, repoID).Get(repo) | 	has, _ := x. | ||||||
|  | 		Where("owner_id=? AND fork_id=?", ownerID, repoID). | ||||||
|  | 		Get(repo) | ||||||
| 	return repo, has | 	return repo, has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -131,7 +131,10 @@ func (repo *Repository) ChangeCollaborationAccessMode(uid int64, mode AccessMode | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if _, err = sess.Id(collaboration.ID).AllCols().Update(collaboration); err != nil { | 	if _, err = sess. | ||||||
|  | 		Id(collaboration.ID). | ||||||
|  | 		AllCols(). | ||||||
|  | 		Update(collaboration); err != nil { | ||||||
| 		return fmt.Errorf("update collaboration: %v", err) | 		return fmt.Errorf("update collaboration: %v", err) | ||||||
| 	} else if _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, uid, repo.ID); err != nil { | 	} else if _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, uid, repo.ID); err != nil { | ||||||
| 		return fmt.Errorf("update access table: %v", err) | 		return fmt.Errorf("update access table: %v", err) | ||||||
|  |  | ||||||
|  | @ -387,7 +387,9 @@ func DeleteUploads(uploads ...*Upload) (err error) { | ||||||
| 	for i := 0; i < len(uploads); i++ { | 	for i := 0; i < len(uploads); i++ { | ||||||
| 		ids[i] = uploads[i].ID | 		ids[i] = uploads[i].ID | ||||||
| 	} | 	} | ||||||
| 	if _, err = sess.In("id", ids).Delete(new(Upload)); err != nil { | 	if _, err = sess. | ||||||
|  | 		In("id", ids). | ||||||
|  | 		Delete(new(Upload)); err != nil { | ||||||
| 		return fmt.Errorf("delete uploads: %v", err) | 		return fmt.Errorf("delete uploads: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -199,7 +199,9 @@ func MirrorUpdate() { | ||||||
| 
 | 
 | ||||||
| 	log.Trace("Doing: MirrorUpdate") | 	log.Trace("Doing: MirrorUpdate") | ||||||
| 
 | 
 | ||||||
| 	if err := x.Where("next_update_unix<=?", time.Now().Unix()).Iterate(new(Mirror), func(idx int, bean interface{}) error { | 	if err := x. | ||||||
|  | 		Where("next_update_unix<=?", time.Now().Unix()). | ||||||
|  | 		Iterate(new(Mirror), func(idx int, bean interface{}) error { | ||||||
| 			m := bean.(*Mirror) | 			m := bean.(*Mirror) | ||||||
| 			if m.Repo == nil { | 			if m.Repo == nil { | ||||||
| 				log.Error(4, "Disconnected mirror repository found: %d", m.ID) | 				log.Error(4, "Disconnected mirror repository found: %d", m.ID) | ||||||
|  |  | ||||||
|  | @ -398,7 +398,9 @@ func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Key name of same user cannot be duplicated.
 | 	// Key name of same user cannot be duplicated.
 | ||||||
| 	has, err := x.Where("owner_id = ? AND name = ?", ownerID, name).Get(new(PublicKey)) | 	has, err := x. | ||||||
|  | 		Where("owner_id = ? AND name = ?", ownerID, name). | ||||||
|  | 		Get(new(PublicKey)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if has { | 	} else if has { | ||||||
|  | @ -428,7 +430,9 @@ func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) { | ||||||
| // GetPublicKeyByID returns public key by given ID.
 | // GetPublicKeyByID returns public key by given ID.
 | ||||||
| func GetPublicKeyByID(keyID int64) (*PublicKey, error) { | func GetPublicKeyByID(keyID int64) (*PublicKey, error) { | ||||||
| 	key := new(PublicKey) | 	key := new(PublicKey) | ||||||
| 	has, err := x.Id(keyID).Get(key) | 	has, err := x. | ||||||
|  | 		Id(keyID). | ||||||
|  | 		Get(key) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -441,7 +445,9 @@ func GetPublicKeyByID(keyID int64) (*PublicKey, error) { | ||||||
| // and returns public key found.
 | // and returns public key found.
 | ||||||
| func SearchPublicKeyByContent(content string) (*PublicKey, error) { | func SearchPublicKeyByContent(content string) (*PublicKey, error) { | ||||||
| 	key := new(PublicKey) | 	key := new(PublicKey) | ||||||
| 	has, err := x.Where("content like ?", content+"%").Get(key) | 	has, err := x. | ||||||
|  | 		Where("content like ?", content+"%"). | ||||||
|  | 		Get(key) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -453,7 +459,9 @@ func SearchPublicKeyByContent(content string) (*PublicKey, error) { | ||||||
| // ListPublicKeys returns a list of public keys belongs to given user.
 | // ListPublicKeys returns a list of public keys belongs to given user.
 | ||||||
| func ListPublicKeys(uid int64) ([]*PublicKey, error) { | func ListPublicKeys(uid int64) ([]*PublicKey, error) { | ||||||
| 	keys := make([]*PublicKey, 0, 5) | 	keys := make([]*PublicKey, 0, 5) | ||||||
| 	return keys, x.Where("owner_id = ?", uid).Find(&keys) | 	return keys, x. | ||||||
|  | 		Where("owner_id = ?", uid). | ||||||
|  | 		Find(&keys) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UpdatePublicKey updates given public key.
 | // UpdatePublicKey updates given public key.
 | ||||||
|  | @ -595,14 +603,18 @@ func (k *DeployKey) GetContent() error { | ||||||
| 
 | 
 | ||||||
| func checkDeployKey(e Engine, keyID, repoID int64, name string) error { | func checkDeployKey(e Engine, keyID, repoID int64, name string) error { | ||||||
| 	// Note: We want error detail, not just true or false here.
 | 	// Note: We want error detail, not just true or false here.
 | ||||||
| 	has, err := e.Where("key_id = ? AND repo_id = ?", keyID, repoID).Get(new(DeployKey)) | 	has, err := e. | ||||||
|  | 		Where("key_id = ? AND repo_id = ?", keyID, repoID). | ||||||
|  | 		Get(new(DeployKey)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if has { | 	} else if has { | ||||||
| 		return ErrDeployKeyAlreadyExist{keyID, repoID} | 		return ErrDeployKeyAlreadyExist{keyID, repoID} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	has, err = e.Where("repo_id = ? AND name = ?", repoID, name).Get(new(DeployKey)) | 	has, err = e. | ||||||
|  | 		Where("repo_id = ? AND name = ?", repoID, name). | ||||||
|  | 		Get(new(DeployKey)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if has { | 	} else if has { | ||||||
|  | @ -630,7 +642,9 @@ func addDeployKey(e *xorm.Session, keyID, repoID int64, name, fingerprint string | ||||||
| 
 | 
 | ||||||
| // HasDeployKey returns true if public key is a deploy key of given repository.
 | // HasDeployKey returns true if public key is a deploy key of given repository.
 | ||||||
| func HasDeployKey(keyID, repoID int64) bool { | func HasDeployKey(keyID, repoID int64) bool { | ||||||
| 	has, _ := x.Where("key_id = ? AND repo_id = ?", keyID, repoID).Get(new(DeployKey)) | 	has, _ := x. | ||||||
|  | 		Where("key_id = ? AND repo_id = ?", keyID, repoID). | ||||||
|  | 		Get(new(DeployKey)) | ||||||
| 	return has | 	return has | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -739,7 +753,9 @@ func DeleteDeployKey(doer *User, id int64) error { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Check if this is the last reference to same key content.
 | 	// Check if this is the last reference to same key content.
 | ||||||
| 	has, err := sess.Where("key_id = ?", key.KeyID).Get(new(DeployKey)) | 	has, err := sess. | ||||||
|  | 		Where("key_id = ?", key.KeyID). | ||||||
|  | 		Get(new(DeployKey)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if !has { | 	} else if !has { | ||||||
|  | @ -754,5 +770,7 @@ func DeleteDeployKey(doer *User, id int64) error { | ||||||
| // ListDeployKeys returns all deploy keys by given repository ID.
 | // ListDeployKeys returns all deploy keys by given repository ID.
 | ||||||
| func ListDeployKeys(repoID int64) ([]*DeployKey, error) { | func ListDeployKeys(repoID int64) ([]*DeployKey, error) { | ||||||
| 	keys := make([]*DeployKey, 0, 5) | 	keys := make([]*DeployKey, 0, 5) | ||||||
| 	return keys, x.Where("repo_id = ?", repoID).Find(&keys) | 	return keys, x. | ||||||
|  | 		Where("repo_id = ?", repoID). | ||||||
|  | 		Find(&keys) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -72,7 +72,10 @@ func GetAccessTokenBySHA(sha string) (*AccessToken, error) { | ||||||
| // ListAccessTokens returns a list of access tokens belongs to given user.
 | // ListAccessTokens returns a list of access tokens belongs to given user.
 | ||||||
| func ListAccessTokens(uid int64) ([]*AccessToken, error) { | func ListAccessTokens(uid int64) ([]*AccessToken, error) { | ||||||
| 	tokens := make([]*AccessToken, 0, 5) | 	tokens := make([]*AccessToken, 0, 5) | ||||||
| 	return tokens, x.Where("uid=?", uid).Desc("id").Find(&tokens) | 	return tokens, x. | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		Desc("id"). | ||||||
|  | 		Find(&tokens) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UpdateAccessToken updates information of access token.
 | // UpdateAccessToken updates information of access token.
 | ||||||
|  |  | ||||||
|  | @ -288,7 +288,9 @@ func (u *User) AvatarLink() string { | ||||||
| // User.GetFollwoers returns range of user's followers.
 | // User.GetFollwoers returns range of user's followers.
 | ||||||
| func (u *User) GetFollowers(page int) ([]*User, error) { | func (u *User) GetFollowers(page int) ([]*User, error) { | ||||||
| 	users := make([]*User, 0, ItemsPerPage) | 	users := make([]*User, 0, ItemsPerPage) | ||||||
| 	sess := x.Limit(ItemsPerPage, (page-1)*ItemsPerPage).Where("follow.follow_id=?", u.ID) | 	sess := x. | ||||||
|  | 		Limit(ItemsPerPage, (page-1)*ItemsPerPage). | ||||||
|  | 		Where("follow.follow_id=?", u.ID) | ||||||
| 	if setting.UsePostgreSQL { | 	if setting.UsePostgreSQL { | ||||||
| 		sess = sess.Join("LEFT", "follow", `"user".id=follow.user_id`) | 		sess = sess.Join("LEFT", "follow", `"user".id=follow.user_id`) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -304,7 +306,9 @@ func (u *User) IsFollowing(followID int64) bool { | ||||||
| // GetFollowing returns range of user's following.
 | // GetFollowing returns range of user's following.
 | ||||||
| func (u *User) GetFollowing(page int) ([]*User, error) { | func (u *User) GetFollowing(page int) ([]*User, error) { | ||||||
| 	users := make([]*User, 0, ItemsPerPage) | 	users := make([]*User, 0, ItemsPerPage) | ||||||
| 	sess := x.Limit(ItemsPerPage, (page-1)*ItemsPerPage).Where("follow.user_id=?", u.ID) | 	sess := x. | ||||||
|  | 		Limit(ItemsPerPage, (page-1)*ItemsPerPage). | ||||||
|  | 		Where("follow.user_id=?", u.ID) | ||||||
| 	if setting.UsePostgreSQL { | 	if setting.UsePostgreSQL { | ||||||
| 		sess = sess.Join("LEFT", "follow", `"user".id=follow.follow_id`) | 		sess = sess.Join("LEFT", "follow", `"user".id=follow.follow_id`) | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -416,7 +420,9 @@ func (u *User) IsPublicMember(orgId int64) bool { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (u *User) getOrganizationCount(e Engine) (int64, error) { | func (u *User) getOrganizationCount(e Engine) (int64, error) { | ||||||
| 	return e.Where("uid=?", u.ID).Count(new(OrgUser)) | 	return e. | ||||||
|  | 		Where("uid=?", u.ID). | ||||||
|  | 		Count(new(OrgUser)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetOrganizationCount returns count of membership of organization of user.
 | // GetOrganizationCount returns count of membership of organization of user.
 | ||||||
|  | @ -479,7 +485,9 @@ func IsUserExist(uid int64, name string) (bool, error) { | ||||||
| 	if len(name) == 0 { | 	if len(name) == 0 { | ||||||
| 		return false, nil | 		return false, nil | ||||||
| 	} | 	} | ||||||
| 	return x.Where("id!=?", uid).Get(&User{LowerName: strings.ToLower(name)}) | 	return x. | ||||||
|  | 		Where("id!=?", uid). | ||||||
|  | 		Get(&User{LowerName: strings.ToLower(name)}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetUserSalt returns a ramdom user salt token.
 | // GetUserSalt returns a ramdom user salt token.
 | ||||||
|  | @ -575,7 +583,9 @@ func CreateUser(u *User) (err error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func countUsers(e Engine) int64 { | func countUsers(e Engine) int64 { | ||||||
| 	count, _ := e.Where("type=0").Count(new(User)) | 	count, _ := e. | ||||||
|  | 		Where("type=0"). | ||||||
|  | 		Count(new(User)) | ||||||
| 	return count | 	return count | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -587,7 +597,11 @@ func CountUsers() int64 { | ||||||
| // Users returns number of users in given page.
 | // Users returns number of users in given page.
 | ||||||
| func Users(page, pageSize int) ([]*User, error) { | func Users(page, pageSize int) ([]*User, error) { | ||||||
| 	users := make([]*User, 0, pageSize) | 	users := make([]*User, 0, pageSize) | ||||||
| 	return users, x.Limit(pageSize, (page-1)*pageSize).Where("type=0").Asc("name").Find(&users) | 	return users, x. | ||||||
|  | 		Limit(pageSize, (page-1)*pageSize). | ||||||
|  | 		Where("type=0"). | ||||||
|  | 		Asc("name"). | ||||||
|  | 		Find(&users) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // get user by erify code
 | // get user by erify code
 | ||||||
|  | @ -661,7 +675,9 @@ func ChangeUserName(u *User, newUserName string) (err error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Delete all local copies of repository wiki that user owns.
 | 	// Delete all local copies of repository wiki that user owns.
 | ||||||
| 	if err = x.Where("owner_id=?", u.ID).Iterate(new(Repository), func(idx int, bean interface{}) error { | 	if err = x. | ||||||
|  | 		Where("owner_id=?", u.ID). | ||||||
|  | 		Iterate(new(Repository), func(idx int, bean interface{}) error { | ||||||
| 			repo := bean.(*Repository) | 			repo := bean.(*Repository) | ||||||
| 			RemoveAllWithNotice("Delete repository wiki local copy", repo.LocalWikiPath()) | 			RemoveAllWithNotice("Delete repository wiki local copy", repo.LocalWikiPath()) | ||||||
| 			return nil | 			return nil | ||||||
|  | @ -676,7 +692,11 @@ func updateUser(e Engine, u *User) error { | ||||||
| 	// Organization does not need email
 | 	// Organization does not need email
 | ||||||
| 	if !u.IsOrganization() { | 	if !u.IsOrganization() { | ||||||
| 		u.Email = strings.ToLower(u.Email) | 		u.Email = strings.ToLower(u.Email) | ||||||
| 		has, err := e.Where("id!=?", u.ID).And("type=?", u.Type).And("email=?", u.Email).Get(new(User)) | 		has, err := e. | ||||||
|  | 			Where("id!=?", u.ID). | ||||||
|  | 			And("type=?", u.Type). | ||||||
|  | 			And("email=?", u.Email). | ||||||
|  | 			Get(new(User)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} else if has { | 		} else if has { | ||||||
|  | @ -843,7 +863,9 @@ func DeleteUser(u *User) (err error) { | ||||||
| // DeleteInactivateUsers deletes all inactivate users and email addresses.
 | // DeleteInactivateUsers deletes all inactivate users and email addresses.
 | ||||||
| func DeleteInactivateUsers() (err error) { | func DeleteInactivateUsers() (err error) { | ||||||
| 	users := make([]*User, 0, 10) | 	users := make([]*User, 0, 10) | ||||||
| 	if err = x.Where("is_active = ?", false).Find(&users); err != nil { | 	if err = x. | ||||||
|  | 		Where("is_active = ?", false). | ||||||
|  | 		Find(&users); err != nil { | ||||||
| 		return fmt.Errorf("get all inactive users: %v", err) | 		return fmt.Errorf("get all inactive users: %v", err) | ||||||
| 	} | 	} | ||||||
| 	// FIXME: should only update authorized_keys file once after all deletions.
 | 	// FIXME: should only update authorized_keys file once after all deletions.
 | ||||||
|  | @ -857,7 +879,9 @@ func DeleteInactivateUsers() (err error) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	_, err = x.Where("is_activated = ?", false).Delete(new(EmailAddress)) | 	_, err = x. | ||||||
|  | 		Where("is_activated = ?", false). | ||||||
|  | 		Delete(new(EmailAddress)) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -868,13 +892,10 @@ func UserPath(userName string) string { | ||||||
| 
 | 
 | ||||||
| func GetUserByKeyID(keyID int64) (*User, error) { | func GetUserByKeyID(keyID int64) (*User, error) { | ||||||
| 	user := new(User) | 	user := new(User) | ||||||
| 	has, err := x.SQL("SELECT a.* FROM `user` AS a, public_key AS b WHERE a.id = b.owner_id AND b.id=?", keyID).Get(user) | 	return user, x. | ||||||
| 	if err != nil { | 		Join("INNER", "public_key", "`public_key`.owner_id = `user`.id"). | ||||||
| 		return nil, err | 		Where("`public_key`.id=?", keyID). | ||||||
| 	} else if !has { | 		Find(user) | ||||||
| 		return nil, ErrUserNotKeyOwner |  | ||||||
| 	} |  | ||||||
| 	return user, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getUserByID(e Engine, id int64) (*User, error) { | func getUserByID(e Engine, id int64) (*User, error) { | ||||||
|  | @ -935,7 +956,10 @@ func GetUserEmailsByNames(names []string) []string { | ||||||
| // GetUsersByIDs returns all resolved users from a list of Ids.
 | // GetUsersByIDs returns all resolved users from a list of Ids.
 | ||||||
| func GetUsersByIDs(ids []int64) ([]*User, error) { | func GetUsersByIDs(ids []int64) ([]*User, error) { | ||||||
| 	ous := make([]*User, 0, len(ids)) | 	ous := make([]*User, 0, len(ids)) | ||||||
| 	err := x.In("id", ids).Asc("name").Find(&ous) | 	err := x. | ||||||
|  | 		In("id", ids). | ||||||
|  | 		Asc("name"). | ||||||
|  | 		Find(&ous) | ||||||
| 	return ous, err | 	return ous, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1050,7 +1074,8 @@ func SearchUserByName(opts *SearchUserOptions) (users []*User, _ int64, _ error) | ||||||
| 	searchQuery := "%" + opts.Keyword + "%" | 	searchQuery := "%" + opts.Keyword + "%" | ||||||
| 	users = make([]*User, 0, opts.PageSize) | 	users = make([]*User, 0, opts.PageSize) | ||||||
| 	// Append conditions
 | 	// Append conditions
 | ||||||
| 	sess := x.Where("LOWER(lower_name) LIKE ?", searchQuery). | 	sess := x. | ||||||
|  | 		Where("LOWER(lower_name) LIKE ?", searchQuery). | ||||||
| 		Or("LOWER(full_name) LIKE ?", searchQuery). | 		Or("LOWER(full_name) LIKE ?", searchQuery). | ||||||
| 		And("type = ?", opts.Type) | 		And("type = ?", opts.Type) | ||||||
| 
 | 
 | ||||||
|  | @ -1064,7 +1089,9 @@ func SearchUserByName(opts *SearchUserOptions) (users []*User, _ int64, _ error) | ||||||
| 	if len(opts.OrderBy) > 0 { | 	if len(opts.OrderBy) > 0 { | ||||||
| 		sess.OrderBy(opts.OrderBy) | 		sess.OrderBy(opts.OrderBy) | ||||||
| 	} | 	} | ||||||
| 	return users, count, sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).Find(&users) | 	return users, count, sess. | ||||||
|  | 		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). | ||||||
|  | 		Find(&users) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ___________    .__  .__
 | // ___________    .__  .__
 | ||||||
|  |  | ||||||
|  | @ -22,7 +22,9 @@ type EmailAddress struct { | ||||||
| // GetEmailAddresses returns all email addresses belongs to given user.
 | // GetEmailAddresses returns all email addresses belongs to given user.
 | ||||||
| func GetEmailAddresses(uid int64) ([]*EmailAddress, error) { | func GetEmailAddresses(uid int64) ([]*EmailAddress, error) { | ||||||
| 	emails := make([]*EmailAddress, 0, 5) | 	emails := make([]*EmailAddress, 0, 5) | ||||||
| 	if err := x.Where("uid=?", uid).Find(&emails); err != nil { | 	if err := x. | ||||||
|  | 		Where("uid=?", uid). | ||||||
|  | 		Find(&emails); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -120,7 +122,10 @@ func (email *EmailAddress) Activate() error { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	email.IsActivated = true | 	email.IsActivated = true | ||||||
| 	if _, err := sess.Id(email.ID).AllCols().Update(email); err != nil { | 	if _, err := sess. | ||||||
|  | 		Id(email.ID). | ||||||
|  | 		AllCols(). | ||||||
|  | 		Update(email); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if err = updateUser(sess, user); err != nil { | 	} else if err = updateUser(sess, user); err != nil { | ||||||
| 		return err | 		return err | ||||||
|  | @ -133,7 +138,9 @@ func DeleteEmailAddress(email *EmailAddress) (err error) { | ||||||
| 	if email.ID > 0 { | 	if email.ID > 0 { | ||||||
| 		_, err = x.Id(email.ID).Delete(new(EmailAddress)) | 		_, err = x.Id(email.ID).Delete(new(EmailAddress)) | ||||||
| 	} else { | 	} else { | ||||||
| 		_, err = x.Where("email=?", email.Email).Delete(new(EmailAddress)) | 		_, err = x. | ||||||
|  | 			Where("email=?", email.Email). | ||||||
|  | 			Delete(new(EmailAddress)) | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -276,7 +276,10 @@ func GetWebhooksByOrgID(orgID int64) (ws []*Webhook, err error) { | ||||||
| 
 | 
 | ||||||
| // GetActiveWebhooksByOrgID returns all active webhooks for an organization.
 | // GetActiveWebhooksByOrgID returns all active webhooks for an organization.
 | ||||||
| func GetActiveWebhooksByOrgID(orgID int64) (ws []*Webhook, err error) { | func GetActiveWebhooksByOrgID(orgID int64) (ws []*Webhook, err error) { | ||||||
| 	err = x.Where("org_id=?", orgID).And("is_active=?", true).Find(&ws) | 	err = x. | ||||||
|  | 		Where("org_id=?", orgID). | ||||||
|  | 		And("is_active=?", true). | ||||||
|  | 		Find(&ws) | ||||||
| 	return ws, err | 	return ws, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -413,7 +416,11 @@ func (t *HookTask) SimpleMarshalJSON(v interface{}) string { | ||||||
| // HookTasks returns a list of hook tasks by given conditions.
 | // HookTasks returns a list of hook tasks by given conditions.
 | ||||||
| func HookTasks(hookID int64, page int) ([]*HookTask, error) { | func HookTasks(hookID int64, page int) ([]*HookTask, error) { | ||||||
| 	tasks := make([]*HookTask, 0, setting.Webhook.PagingNum) | 	tasks := make([]*HookTask, 0, setting.Webhook.PagingNum) | ||||||
| 	return tasks, x.Limit(setting.Webhook.PagingNum, (page-1)*setting.Webhook.PagingNum).Where("hook_id=?", hookID).Desc("id").Find(&tasks) | 	return tasks, x. | ||||||
|  | 		Limit(setting.Webhook.PagingNum, (page-1)*setting.Webhook.PagingNum). | ||||||
|  | 		Where("hook_id=?", hookID). | ||||||
|  | 		Desc("id"). | ||||||
|  | 		Find(&tasks) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // CreateHookTask creates a new hook task,
 | // CreateHookTask creates a new hook task,
 | ||||||
|  | @ -580,7 +587,9 @@ func (t *HookTask) deliver() { | ||||||
| // TODO: shoot more hooks at same time.
 | // TODO: shoot more hooks at same time.
 | ||||||
| func DeliverHooks() { | func DeliverHooks() { | ||||||
| 	tasks := make([]*HookTask, 0, 10) | 	tasks := make([]*HookTask, 0, 10) | ||||||
| 	x.Where("is_delivered=?", false).Iterate(new(HookTask), | 	x. | ||||||
|  | 		Where("is_delivered=?", false). | ||||||
|  | 		Iterate(new(HookTask), | ||||||
| 			func(idx int, bean interface{}) error { | 			func(idx int, bean interface{}) error { | ||||||
| 				t := bean.(*HookTask) | 				t := bean.(*HookTask) | ||||||
| 				t.deliver() | 				t.deliver() | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue