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"`
}

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

for i, userRecord := range userList {
var dateRecord UserBusinessAnalysis
@@ -151,6 +152,18 @@ func CountData(wikiCountMap map[int64]int) {
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

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)
}

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) {
l := list.New()
if len(logs) == 0 {
@@ -441,7 +460,7 @@ type Contributor struct {
Email string
}

func GetContributors(repoPath string) ([]Contributor, error){
func GetContributors(repoPath string) ([]Contributor, error) {
cmd := NewCommand("shortlog", "-sne", "--all")
stdout, err := cmd.RunInDir(repoPath)
if err != nil {
@@ -458,9 +477,9 @@ func GetContributors(repoPath string) ([]Contributor, error){
}
number := oneCount[0:strings.Index(oneCount, "\t")]
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, " ")
email := oneCount[strings.Index(oneCount, "<")+1:strings.Index(oneCount, ">")]
email := oneCount[strings.Index(oneCount, "<")+1 : strings.Index(oneCount, ">")]
contributorsInfo[i] = Contributor{
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
}

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
var CommitsRangeSize = 50



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

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

import (
"encoding/json"
"time"

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

func TimeingCountData() {
//query wiki 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 {
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