Browse Source

提交代码。

Signed-off-by: zouap <zouap@pcl.ac.cn>
tags/v1.21.12.1
zouap 4 years ago
parent
commit
e4f1d0e700
4 changed files with 71 additions and 53 deletions
  1. +14
    -1
      models/user_business_analysis.go
  2. +22
    -3
      modules/git/repo.go
  3. +9
    -0
      modules/git/repo_commit.go
  4. +26
    -49
      routers/repo/user_data_analysis.go

+ 14
- 1
models/user_business_analysis.go View File

@@ -62,7 +62,7 @@ type UserBusinessAnalysis struct {
Name string `xorm:"NOT NULL"` Name string `xorm:"NOT NULL"`
} }


func CountData(wikiCountMap map[int64]int) {
func CountData(wikiCountMap map[string]int) {
log.Info("start to count data") log.Info("start to count data")
sess := x.NewSession() sess := x.NewSession()
defer sess.Close() defer sess.Close()
@@ -93,6 +93,7 @@ func CountData(wikiCountMap map[int64]int) {
StarRepoCountMap := queryStar(start_unix, end_unix) StarRepoCountMap := queryStar(start_unix, end_unix)
WatchedCountMap := queryFollow(start_unix, end_unix) WatchedCountMap := queryFollow(start_unix, end_unix)
CommitDatasetSizeMap := queryDatasetSize(start_unix, end_unix) CommitDatasetSizeMap := queryDatasetSize(start_unix, end_unix)
SolveIssueCountMap := querySolveIssue(start_unix, end_unix)


for i, userRecord := range userList { for i, userRecord := range userList {
var dateRecord UserBusinessAnalysis var dateRecord UserBusinessAnalysis
@@ -151,6 +152,18 @@ func CountData(wikiCountMap map[int64]int) {
dateRecord.CommitDatasetSize = CommitDatasetSizeMap[dateRecord.ID] dateRecord.CommitDatasetSize = CommitDatasetSizeMap[dateRecord.ID]
} }


if _, ok := SolveIssueCountMap[dateRecord.ID]; !ok {
dateRecord.SolveIssueCount = 0
} else {
dateRecord.SolveIssueCount = SolveIssueCountMap[dateRecord.ID]
}

if _, ok := wikiCountMap[dateRecord.Name]; !ok {
dateRecord.EncyclopediasCount = 0
} else {
dateRecord.EncyclopediasCount = wikiCountMap[dateRecord.Name]
}

dateRecord.CommitModelCount = 0 dateRecord.CommitModelCount = 0


sess.Insert(&dateRecord) sess.Insert(&dateRecord)


+ 22
- 3
modules/git/repo.go View File

@@ -52,6 +52,25 @@ func (repo *Repository) GetAllCommitsCount() (int64, error) {
return AllCommitsCount(repo.Path) return AllCommitsCount(repo.Path)
} }


func (repo *Repository) ParsePrettyFormatLogToList(logs []byte) (*list.List, error) {
l := list.New()
if len(logs) == 0 {
return l, nil
}

parts := bytes.Split(logs, []byte{'\n'})

for _, commitID := range parts {
commit, err := repo.GetCommit(string(commitID))
if err != nil {
return nil, err
}
l.PushBack(commit)
}

return l, nil
}

func (repo *Repository) parsePrettyFormatLogToList(logs []byte) (*list.List, error) { func (repo *Repository) parsePrettyFormatLogToList(logs []byte) (*list.List, error) {
l := list.New() l := list.New()
if len(logs) == 0 { if len(logs) == 0 {
@@ -441,7 +460,7 @@ type Contributor struct {
Email string Email string
} }


func GetContributors(repoPath string) ([]Contributor, error){
func GetContributors(repoPath string) ([]Contributor, error) {
cmd := NewCommand("shortlog", "-sne", "--all") cmd := NewCommand("shortlog", "-sne", "--all")
stdout, err := cmd.RunInDir(repoPath) stdout, err := cmd.RunInDir(repoPath)
if err != nil { if err != nil {
@@ -458,9 +477,9 @@ func GetContributors(repoPath string) ([]Contributor, error){
} }
number := oneCount[0:strings.Index(oneCount, "\t")] number := oneCount[0:strings.Index(oneCount, "\t")]
commitCnt, _ := strconv.Atoi(number) commitCnt, _ := strconv.Atoi(number)
committer := oneCount[strings.Index(oneCount, "\t")+1:strings.LastIndex(oneCount, " ")]
committer := oneCount[strings.Index(oneCount, "\t")+1 : strings.LastIndex(oneCount, " ")]
committer = strings.Trim(committer, " ") committer = strings.Trim(committer, " ")
email := oneCount[strings.Index(oneCount, "<")+1:strings.Index(oneCount, ">")]
email := oneCount[strings.Index(oneCount, "<")+1 : strings.Index(oneCount, ">")]
contributorsInfo[i] = Contributor{ contributorsInfo[i] = Contributor{
commitCnt, committer, email, commitCnt, committer, email,
} }


+ 9
- 0
modules/git/repo_commit.go View File

@@ -206,6 +206,15 @@ func (repo *Repository) GetCommitByPath(relpath string) (*Commit, error) {
return commits.Front().Value.(*Commit), nil return commits.Front().Value.(*Commit), nil
} }


func (repo *Repository) GetCommitByPathAndDays(relpath string, days int) (*list.List, error) {
stdout, err := NewCommand("log", "-1", prettyLogFormat, "--", relpath, "--since="+fmt.Sprint(days)+".days").RunInDirBytes(repo.Path)
if err != nil {
return nil, err
}

return repo.parsePrettyFormatLogToList(stdout)
}

// CommitsRangeSize the default commits range size // CommitsRangeSize the default commits range size
var CommitsRangeSize = 50 var CommitsRangeSize = 50




+ 26
- 49
routers/repo/user_data_analysis.go View File

@@ -1,71 +1,48 @@
package repo package repo


import ( import (
"encoding/json"
"time"


"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
wiki_service "code.gitea.io/gitea/services/wiki"
) )


func TimeingCountData() { func TimeingCountData() {
//query wiki data //query wiki data
log.Info("start to time count data") log.Info("start to time count data")
wikiMap := make(map[int64]int)
wikiMap := make(map[string]int)


repoList := models.QueryAllRepo()
currentTimeNow := time.Now()
log.Info("current time:" + currentTimeNow.Format("2006-01-02 15:04:05"))

yesterday := currentTimeNow.AddDate(0, 0, -1)


repoList := models.QueryAllRepo()
log.Info("start to query wiki data")
for _, repoRecord := range repoList { for _, repoRecord := range repoList {
wikiPath := models.WikiPath(repoRecord.OwnerName, repoRecord.Name) wikiPath := models.WikiPath(repoRecord.OwnerName, repoRecord.Name)
wikiRepo, commit, err := FindWikiRepoCommitByWikiPath(wikiPath)
if err != nil {
log.Error("wiki not exist. wikiPath=" + wikiPath)
} else {
log.Info("wiki exist, wikiPath=" + wikiPath)

lastCommit, _ := wikiRepo.GetBranchCommit("master")
lastCommitObj, err := json.Marshal(lastCommit)
if err != nil {
log.Error("convert to json error.")
} else {
log.Info("json=" + string(lastCommitObj))
}
entries, err := commit.ListEntries()
if err != nil {
if wikiRepo != nil {
wikiRepo.Close()
}
} else {
pages := make([]PageMeta, 0, len(entries))
for _, entry := range entries {
if !entry.IsRegular() {
continue
}
wikiName, err := wiki_service.FilenameToName(entry.Name())
if err != nil {
if wikiRepo != nil {
wikiRepo.Close()
time, err := git.GetLatestCommitTime(wikiPath)
if err == nil {
log.Info("last commit time:" + time.Format("2006-01-02 15:04:05") + " wikiPath=" + wikiPath)
if time.After(yesterday) {
wikiRepo, _, err := FindWikiRepoCommitByWikiPath(wikiPath)
if err != nil {
log.Error("wiki not exist. wikiPath=" + wikiPath)
} else {
log.Info("wiki exist, wikiPath=" + wikiPath)
list, _ := wikiRepo.GetCommitByPathAndDays(wikiPath, 1)
for logEntry := list.Front(); logEntry != nil; logEntry = logEntry.Next() {
commit := logEntry.Value.(*git.Commit)
log.Info("commit msg=" + commit.CommitMessage + " time=" + commit.Committer.When.Format("2006-01-02 15:04:05"))
if _, ok := wikiMap[commit.Committer.Name]; !ok {
wikiMap[commit.Committer.Name] = 0
} else {
wikiMap[commit.Committer.Name] += 1
} }
continue
} else if wikiName == "_Sidebar" || wikiName == "_Footer" {
continue
}

jsonObj, err := json.Marshal(entry)
if err != nil {
log.Error("convert to json error.")
} else {
log.Info("json=" + string(jsonObj))
} }
log.Info("wikiName=" + wikiName + " SubURL=" + wiki_service.NameToSubURL(wikiName))
pages = append(pages, PageMeta{
Name: wikiName,
SubURL: wiki_service.NameToSubURL(wikiName),
})
} }

} }

} }
} }




Loading…
Cancel
Save