|
1
|
|
|
// Copyright 2018 Fedir RYKHTIK. All rights reserved. |
|
2
|
|
|
// Use of this source code is governed by the GNU GPL 3.0 |
|
3
|
|
|
// license that can be found in the LICENSE file. |
|
4
|
|
|
|
|
5
|
|
|
package main |
|
6
|
|
|
|
|
7
|
|
|
import ( |
|
8
|
|
|
"fmt" |
|
9
|
|
|
"sync" |
|
10
|
|
|
"time" |
|
11
|
|
|
|
|
12
|
|
|
"github.com/fedir/ghstat/github" |
|
13
|
|
|
) |
|
14
|
|
|
|
|
15
|
|
|
func repositoryData(rKey string, tmpFolder string, debug bool, dataChan chan Repository, wg *sync.WaitGroup) { |
|
16
|
|
|
|
|
17
|
1 |
|
defer wg.Done() |
|
18
|
|
|
|
|
19
|
1 |
|
r := new(Repository) |
|
20
|
|
|
|
|
21
|
1 |
|
repositoryData := github.GetRepositoryStatistics(rKey, tmpFolder, debug) |
|
22
|
|
|
|
|
23
|
1 |
|
r.Name = repositoryData.FullName |
|
24
|
1 |
|
r.URL = fmt.Sprintf("https://github.com/%s", r.Name) |
|
25
|
1 |
|
r.MainLanguage = repositoryData.Language |
|
26
|
1 |
|
r.AllLanguages, r.TotalCodeSize = github.GetRepositoryLanguages(rKey, tmpFolder, debug) |
|
27
|
1 |
|
r.Description = repositoryData.Description |
|
28
|
1 |
|
r.CreatedAt = repositoryData.CreatedAt |
|
29
|
1 |
|
r.Age = int(time.Since(repositoryData.CreatedAt).Seconds() / 86400) |
|
30
|
1 |
|
r.Watchers = repositoryData.Watchers |
|
31
|
1 |
|
r.Forks = repositoryData.Forks |
|
32
|
1 |
|
r.OpenIssues = repositoryData.OpenIssues |
|
33
|
1 |
|
r.License = "[Custom license]" |
|
34
|
1 |
|
if repositoryData.License.SPDXID != "" { |
|
35
|
1 |
|
r.License = repositoryData.License.SPDXID |
|
36
|
|
|
} |
|
37
|
1 |
|
r.Author = "[No GitHub account detected]" |
|
38
|
|
|
|
|
39
|
1 |
|
r.Author, r.LastCommitDate = github.GetRepositoryCommitsData(rKey, tmpFolder, debug) |
|
40
|
|
|
|
|
41
|
1 |
|
r.AuthorsFollowers = 0 |
|
42
|
1 |
|
r.AuthorLocation = "[Unknown]" |
|
43
|
1 |
|
if r.Author != "" { |
|
44
|
1 |
|
r.AuthorsFollowers = github.GetUserFollowers(r.Author, tmpFolder, debug) |
|
45
|
1 |
|
authorData := github.GetUserData(r.Author, tmpFolder, debug) |
|
46
|
1 |
|
if authorData.Location != "" { |
|
47
|
1 |
|
r.AuthorLocation = authorData.Location |
|
48
|
|
|
} |
|
49
|
|
|
} else { |
|
50
|
|
|
r.Author = "[Unknown account]" |
|
51
|
|
|
} |
|
52
|
|
|
|
|
53
|
1 |
|
r.ClosedIssues = 0 |
|
54
|
1 |
|
if repositoryData.HasIssues { |
|
55
|
1 |
|
r.ClosedIssues = github.GetRepositoryClosedIssues(rKey, tmpFolder, debug) |
|
56
|
|
|
} |
|
57
|
1 |
|
r.TotalIssues = r.OpenIssues + r.ClosedIssues |
|
58
|
1 |
|
r.Top10ContributorsFollowers, |
|
59
|
|
|
r.Contributors = github.GetRepositoryContributors(rKey, tmpFolder, debug) |
|
60
|
1 |
|
r.TotalTags = github.GetRepositoryTagsNumber(rKey, tmpFolder, debug) |
|
61
|
1 |
|
r.ActiveForkersPercentage = github.GetActiveForkersPercentage(r.Contributors, r.Forks) |
|
62
|
1 |
|
r.IssueByDay = github.GetIssueByDay(r.ClosedIssues+r.OpenIssues, r.Age) |
|
63
|
1 |
|
r.ClosedIssuesPercentage = github.GetClosedIssuesPercentage(repositoryData.OpenIssues, int(r.ClosedIssues)) |
|
64
|
|
|
|
|
65
|
1 |
|
contributionStatistics := github.GetContributionStatistics(rKey, tmpFolder, debug) |
|
66
|
1 |
|
r.TotalCommits = contributionStatistics.TotalCommits |
|
67
|
1 |
|
r.TotalAdditions = contributionStatistics.TotalAdditions |
|
68
|
1 |
|
r.TotalDeletions = contributionStatistics.TotalDeletions |
|
69
|
1 |
|
r.TotalCodeChanges = contributionStatistics.TotalCodeChanges |
|
70
|
1 |
|
r.AverageContributionPeriod = contributionStatistics.AverageContributionPeriod |
|
71
|
1 |
|
r.ReturningContributors = contributionStatistics.ReturningContributors |
|
72
|
1 |
|
r.MediCommitSize = contributionStatistics.MediumCommitSize |
|
73
|
|
|
|
|
74
|
1 |
|
r.CommitsByDay = github.GetCommitsByDay(contributionStatistics.TotalCommits, r.Age) |
|
75
|
|
|
|
|
76
|
1 |
|
dataChan <- *r |
|
77
|
|
|
} |
|
78
|
|
|
|