|
- package repository
-
- import (
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/git"
- )
-
- func GetRepoTopNContributors(repo *models.Repository, N int) ([]*models.ContributorInfo, int) {
- var contributorInfos []*models.ContributorInfo
- branchName := GetDefaultBranchName(repo)
- if branchName == "" {
- return contributorInfos, 0
- }
- contributors, err := git.GetContributors(repo.RepoPath(), branchName)
- if err == nil && contributors != nil {
- contributorInfoHash := make(map[string]*models.ContributorInfo)
- for _, c := range contributors {
- if len(contributorInfos) >= N {
- break
- }
- if c.Email == "" {
- continue
- }
- // get user info from committer email
- user, err := models.GetUserByActivateEmail(c.Email)
- if err == nil {
- // committer is system user, get info through user's primary email
- if existedContributorInfo, ok := contributorInfoHash[user.Email]; ok {
- // existed: same primary email, different committer name
- existedContributorInfo.CommitCnt += c.CommitCnt
- } else {
- // new committer info
- var newContributor = &models.ContributorInfo{
- user, user.RelAvatarLink(), user.Name, user.Email, c.CommitCnt,
- }
- contributorInfos = append(contributorInfos, newContributor)
- contributorInfoHash[user.Email] = newContributor
- }
- } else {
- // committer is not system user
- if existedContributorInfo, ok := contributorInfoHash[c.Email]; ok {
- // existed: same primary email, different committer name
- existedContributorInfo.CommitCnt += c.CommitCnt
- } else {
- var newContributor = &models.ContributorInfo{
- user, "", "", c.Email, c.CommitCnt,
- }
- contributorInfos = append(contributorInfos, newContributor)
- contributorInfoHash[c.Email] = newContributor
- }
- }
- }
- }
- return contributorInfos, len(contributors)
- }
|