From 59887aa865e370c184fd482e408a519efd8ffaba Mon Sep 17 00:00:00 2001 From: avadesian Date: Sun, 26 Sep 2021 14:26:39 +0800 Subject: [PATCH] get user info from email new fucntion GetUserByActiveEmail --- models/user.go | 16 ++++++++++++++++ routers/repo/view.go | 27 +++++++++++++++++---------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/models/user.go b/models/user.go index 83bf1b2c0..38f699740 100755 --- a/models/user.go +++ b/models/user.go @@ -1543,6 +1543,22 @@ func ValidateCommitsWithEmails(oldCommits *list.List) *list.List { return newCommits } +// GetUserByActivateEmail returns the user object by given e-mail if exists. +/*This function will search email table only*/ +func GetUserByActivateEmail(email string) (*User, error) { + ctx := DefaultDBContext() + var users []User + if err := ctx.e.Join("INNER", "email_address", "email_address.uid = \"user\".id"). + Where("email_address.email= ?", email). + Find(&users); err != nil { + return nil,err + } + if len(users) >= 1 { + return &users[0],nil + }else { + return nil, errors.New("cannot find user by email") + } +} // GetUserByEmail returns the user object by given e-mail if exists. func GetUserByEmail(email string) (*User, error) { return GetUserByEmailContext(DefaultDBContext(), email) diff --git a/routers/repo/view.go b/routers/repo/view.go index 1ee47e12e..1546f53b7 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -15,6 +15,7 @@ import ( "net/url" "path" "strings" + "time" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" @@ -588,39 +589,45 @@ func Home(ctx *context.Context) { //get repo contributors info contributors, err := git.GetContributors(ctx.Repo.Repository.RepoPath()) if err == nil && contributors != nil { + startTime := time.Now() var contributorInfos []*ContributorInfo + contributorInfoHash:= make(map[string]*ContributorInfo) for _, c := range contributors { if strings.Compare(c.Email,"") == 0 { continue } // get user info from committer email - user, err := models.GetUserByEmail(c.Email) + user, err := models.GetUserByActivateEmail(c.Email) if err == nil { // committer is system user, get info through user's primary email - existedContributorInfo := getContributorInfo(contributorInfos,user.Email) - if existedContributorInfo != nil { + if existedContributorInfo,ok:=contributorInfoHash[user.Email];ok { // existed: same primary email, different committer name existedContributorInfo.CommitCnt += c.CommitCnt }else{ // new committer info - contributorInfos = append(contributorInfos, &ContributorInfo{ + var newContributor = &ContributorInfo{ user, user.Email,c.CommitCnt, - }) + } + contributorInfos = append(contributorInfos, newContributor ) + contributorInfoHash[user.Email] = newContributor } } else { // committer is not system user - existedContributorInfo := getContributorInfo(contributorInfos,c.Email) - if existedContributorInfo != nil { + if existedContributorInfo,ok:=contributorInfoHash[c.Email];ok { // existed: same primary email, different committer name existedContributorInfo.CommitCnt += c.CommitCnt }else{ - contributorInfos = append(contributorInfos, &ContributorInfo{ - nil, c.Email,c.CommitCnt, - }) + var newContributor = &ContributorInfo{ + user, c.Email,c.CommitCnt, + } + contributorInfos = append(contributorInfos, newContributor) + contributorInfoHash[c.Email] = newContributor } } } ctx.Data["ContributorInfo"] = contributorInfos + var duration = time.Since(startTime) + log.Info("getContributorInfo cost: %v seconds",duration.Seconds()) } if ctx.Repo.Repository.IsBeingCreated() { task, err := models.GetMigratingTask(ctx.Repo.Repository.ID)