@@ -51,14 +51,25 @@ func CsvOutput(results github.GithubSearchResults, writer io.Writer, options top
51
51
return nil
52
52
}
53
53
54
+ type ContributionsSelector func (github.User ) int
55
+
56
+ func selectCommits (user github.User ) int {
57
+ return user .CommitsCount
58
+ }
59
+
60
+ func selectContributions (user github.User ) int {
61
+ return user .ContributionCount
62
+ }
63
+
64
+ func selectPublicContributions (user github.User ) int {
65
+ return user .PublicContributionCount
66
+ }
67
+
54
68
func YamlOutput (results github.GithubSearchResults , writer io.Writer , options top.Options ) error {
55
69
users := GithubUserList (results .Users )
56
- outputUsers := func (user []github.User , public_only bool ) {
70
+ outputUsers := func (user []github.User , cs ContributionsSelector ) {
57
71
for i , u := range user {
58
- contributionCount := u .ContributionCount
59
- if public_only {
60
- contributionCount = u .PublicContributionCount
61
- }
72
+ contributionCount := cs (u )
62
73
fmt .Fprintf (
63
74
writer ,
64
75
`
@@ -80,13 +91,17 @@ func YamlOutput(results github.GithubSearchResults, writer io.Writer, options to
80
91
}
81
92
}
82
93
83
- topPublic := users .TopPublic (options .Amount )
94
+ topPublic := users .TopCommits (options .Amount )
84
95
fmt .Fprintln (writer , "users:" )
85
- outputUsers (topPublic , true )
96
+ outputUsers (topPublic , selectCommits )
97
+
98
+ topContributions := users .TopPublic (options .Amount )
99
+ fmt .Fprintln (writer , "users_public_contributions:" )
100
+ outputUsers (topContributions , selectPublicContributions )
86
101
87
102
topPrivate := users .TopPrivate (options .Amount )
88
103
fmt .Fprintln (writer , "\n private_users:" )
89
- outputUsers (topPrivate , false )
104
+ outputUsers (topPrivate , selectContributions )
90
105
91
106
outputOrganizations := func (orgs Organizations ) {
92
107
for i , org := range orgs {
@@ -105,6 +120,8 @@ func YamlOutput(results github.GithubSearchResults, writer io.Writer, options to
105
120
106
121
fmt .Fprintln (writer , "\n organizations:" )
107
122
outputOrganizations (topPublic .TopOrgs (10 ))
123
+ fmt .Fprintln (writer , "\n public_contributions_organizations:" )
124
+ outputOrganizations (topContributions .TopOrgs (10 ))
108
125
fmt .Fprintln (writer , "\n private_organizations:" )
109
126
outputOrganizations (topPrivate .TopOrgs (10 ))
110
127
@@ -135,6 +152,12 @@ func clone(users GithubUserList) GithubUserList {
135
152
136
153
type GithubUserList []github.User
137
154
155
+ func (users GithubUserList ) TopCommits (amount int ) GithubUserList {
156
+ u := TopCommitsUsers (clone (users ))
157
+ sort .Sort (u )
158
+ return trim (GithubUserList (u ), amount )
159
+ }
160
+
138
161
func (users GithubUserList ) TopPublic (amount int ) GithubUserList {
139
162
u := TopPublicUsers (clone (users ))
140
163
sort .Sort (u )
@@ -160,6 +183,20 @@ func (slice GithubUserList) MinFollowers() int {
160
183
return followers
161
184
}
162
185
186
+ type TopCommitsUsers GithubUserList
187
+
188
+ func (slice TopCommitsUsers ) Len () int {
189
+ return len (slice )
190
+ }
191
+
192
+ func (slice TopCommitsUsers ) Less (i , j int ) bool {
193
+ return slice [i ].CommitsCount > slice [j ].CommitsCount
194
+ }
195
+
196
+ func (slice TopCommitsUsers ) Swap (i , j int ) {
197
+ slice [i ], slice [j ] = slice [j ], slice [i ]
198
+ }
199
+
163
200
type TopPublicUsers GithubUserList
164
201
165
202
func (slice TopPublicUsers ) Len () int {
0 commit comments