/
uzer_007
/
Rixea
Обзор
Документация
Войти
/
uzer_007
/
Rixea
Код
Запросы
0
Задачи
Вики
Пакеты
5
Релизы
2
CI/CD
Аналитика
Безопасность
master
models/gituser/gituser.go
64 строки
2 KB
uzer_007
feat: первая версия Rixea
02 авг 2026, 22:16
02 авг 2026, 22:16
d4f7504
Код
Авторство
О чём код?
// Copyright 2026 Uzer_007. All rights reserved. // SPDX-License-Identifier: MIT package gituser import ( "context" "net/url" "gitverse.ru/uzer_007/Rixea/models/user" "gitverse.ru/uzer_007/Rixea/modules/container" "gitverse.ru/uzer_007/Rixea/modules/git" ) // CommitParticipant is one participant of a commit (its author or a co-author): // a git identity, optionally matched to a Rixea user. type CommitParticipant struct { GitIdentity *git.CommitIdentity // git identity (name/email), never nil GiteaUser *user.User // matched Rixea user, nil if unmatched } // UserCommit represents a commit with matched of database "author" user. type UserCommit struct { GitCommit *git.Commit AuthorUser *user.User AvatarStackData *AvatarStackData } func RepoCommitSearchByEmailLink(repoLink string, ref git.RefName) string { if curRefWebLinkPath := ref.RefWebLinkPath(); curRefWebLinkPath != "" { return repoLink + "/commits/" + curRefWebLinkPath + "/search?q=" + url.QueryEscape("author:") + "{email}" } return "" } // GetUserCommitsByGitCommits checks if authors' e-mails of commits are corresponding to users. func GetUserCommitsByGitCommits(ctx context.Context, gitCommits []*git.Commit, repoLink string, currentRef git.RefName) ([]*UserCommit, error) { userCommits := make([]*UserCommit, 0, len(gitCommits)) emailSet := make(container.Set[string]) for _, c := range gitCommits { emailSet.Add(c.Author.Email) emailSet.Add(c.Committer.Email) for _, p := range c.AllParticipantIdentities() { emailSet.Add(p.Email) } } emailUserMap, err := user.GetUsersByEmails(ctx, emailSet.Values()) if err != nil { return nil, err } searchByEmailLink := RepoCommitSearchByEmailLink(repoLink, currentRef) for _, c := range gitCommits { uc := &UserCommit{ AuthorUser: emailUserMap.GetByEmail(c.Author.Email), // FIXME: why GetUserCommitsByGitCommits uses "Author", but ParseCommitsWithSignature uses "Committer"? GitCommit: c, AvatarStackData: BuildAvatarStackData(ctx, c.AllParticipantIdentities(), emailUserMap), } uc.AvatarStackData.SearchByEmailLink = searchByEmailLink userCommits = append(userCommits, uc) } return userCommits, nil }