@@ -51,14 +51,25 @@ func CsvOutput(results github.GithubSearchResults, writer io.Writer, options top
5151 return nil
5252}
5353
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+
5468func YamlOutput (results github.GithubSearchResults , writer io.Writer , options top.Options ) error {
5569 users := GithubUserList (results .Users )
56- outputUsers := func (user []github.User , public_only bool ) {
70+ outputUsers := func (user []github.User , cs ContributionsSelector ) {
5771 for i , u := range user {
58- contributionCount := u .ContributionCount
59- if public_only {
60- contributionCount = u .PublicContributionCount
61- }
72+ contributionCount := cs (u )
6273 fmt .Fprintf (
6374 writer ,
6475 `
@@ -80,13 +91,17 @@ func YamlOutput(results github.GithubSearchResults, writer io.Writer, options to
8091 }
8192 }
8293
83- topPublic := users .TopPublic (options .Amount )
94+ topPublic := users .TopCommits (options .Amount )
8495 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 )
86101
87102 topPrivate := users .TopPrivate (options .Amount )
88103 fmt .Fprintln (writer , "\n private_users:" )
89- outputUsers (topPrivate , false )
104+ outputUsers (topPrivate , selectContributions )
90105
91106 outputOrganizations := func (orgs Organizations ) {
92107 for i , org := range orgs {
@@ -105,6 +120,8 @@ func YamlOutput(results github.GithubSearchResults, writer io.Writer, options to
105120
106121 fmt .Fprintln (writer , "\n organizations:" )
107122 outputOrganizations (topPublic .TopOrgs (10 ))
123+ fmt .Fprintln (writer , "\n public_contributions_organizations:" )
124+ outputOrganizations (topContributions .TopOrgs (10 ))
108125 fmt .Fprintln (writer , "\n private_organizations:" )
109126 outputOrganizations (topPrivate .TopOrgs (10 ))
110127
@@ -135,6 +152,12 @@ func clone(users GithubUserList) GithubUserList {
135152
136153type GithubUserList []github.User
137154
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+
138161func (users GithubUserList ) TopPublic (amount int ) GithubUserList {
139162 u := TopPublicUsers (clone (users ))
140163 sort .Sort (u )
@@ -160,6 +183,20 @@ func (slice GithubUserList) MinFollowers() int {
160183 return followers
161184}
162185
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+
163200type TopPublicUsers GithubUserList
164201
165202func (slice TopPublicUsers ) Len () int {
0 commit comments