+1
-1
appview/pages/pages.go
+1
-1
appview/pages/pages.go
+64
-2
appview/repo/index.go
+64
-2
appview/repo/index.go
···
6
"log"
7
"net/http"
8
"slices"
9
"strings"
10
11
"tangled.sh/tangled.sh/core/appview/commitverify"
···
18
"tangled.sh/tangled.sh/core/types"
19
20
"github.com/go-chi/chi/v5"
21
)
22
23
func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) {
···
121
}
122
}
123
124
-
repoLanguages, err := signedClient.RepoLanguages(f.OwnerDid(), f.RepoName, ref)
125
if err != nil {
126
log.Printf("failed to compute language percentages: %s", err)
127
// non-fatal
···
148
BranchesTrunc: branchesTrunc,
149
EmailToDidOrHandle: emailToDidOrHandle(rp, emailToDidMap),
150
VerifiedCommits: vc,
151
-
Languages: repoLanguages,
152
Pipelines: pipelines,
153
})
154
return
155
}
156
157
func getForkInfo(
···
6
"log"
7
"net/http"
8
"slices"
9
+
"sort"
10
"strings"
11
12
"tangled.sh/tangled.sh/core/appview/commitverify"
···
19
"tangled.sh/tangled.sh/core/types"
20
21
"github.com/go-chi/chi/v5"
22
+
"github.com/go-enry/go-enry/v2"
23
)
24
25
func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) {
···
123
}
124
}
125
126
+
languageInfo, err := getLanguageInfo(repoInfo, rp, f, user, signedClient, ref)
127
if err != nil {
128
log.Printf("failed to compute language percentages: %s", err)
129
// non-fatal
···
150
BranchesTrunc: branchesTrunc,
151
EmailToDidOrHandle: emailToDidOrHandle(rp, emailToDidMap),
152
VerifiedCommits: vc,
153
+
Languages: languageInfo,
154
Pipelines: pipelines,
155
})
156
return
157
+
}
158
+
159
+
func getLanguageInfo(
160
+
repoInfo repoinfo.RepoInfo,
161
+
rp *Repo,
162
+
f *reporesolver.ResolvedRepo,
163
+
user *oauth.User,
164
+
signedClient *knotclient.SignedClient,
165
+
ref string,
166
+
) ([]types.RepoLanguageDetails, error) {
167
+
repoLanguages, err := signedClient.RepoLanguages(f.OwnerDid(), f.RepoName, ref)
168
+
if err != nil {
169
+
return []types.RepoLanguageDetails{}, err
170
+
}
171
+
if repoLanguages == nil {
172
+
repoLanguages = &types.RepoLanguageResponse{Languages: make(map[string]int)}
173
+
}
174
+
175
+
totalLanguageFileCount := 0
176
+
for _, fileCount := range repoLanguages.Languages {
177
+
totalLanguageFileCount += fileCount
178
+
}
179
+
180
+
var languageStats []types.RepoLanguageDetails
181
+
var otherLanguageStat *types.RepoLanguageDetails
182
+
var otherPercentage float32 = 0
183
+
184
+
for fileType, fileCount := range repoLanguages.Languages {
185
+
percentage := (float32(fileCount) / float32(totalLanguageFileCount)) * 100
186
+
187
+
if percentage <= 0.1 {
188
+
otherPercentage += percentage
189
+
continue
190
+
}
191
+
192
+
// Exclude languages
193
+
if fileType == "Text" {
194
+
otherPercentage += percentage
195
+
continue
196
+
}
197
+
198
+
color := enry.GetColor(fileType)
199
+
200
+
if fileType == "Other" {
201
+
otherLanguageStat = &types.RepoLanguageDetails{Name: fileType, Percentage: percentage, Color: color}
202
+
} else {
203
+
languageStats = append(languageStats, types.RepoLanguageDetails{Name: fileType, Percentage: percentage, Color: color})
204
+
}
205
+
}
206
+
207
+
sort.Slice(languageStats, func(i, j int) bool {
208
+
return languageStats[i].Percentage > languageStats[j].Percentage
209
+
})
210
+
211
+
if otherLanguageStat != nil {
212
+
otherLanguageStat.Percentage += otherPercentage
213
+
languageStats = append(languageStats, *otherLanguageStat)
214
+
}
215
+
216
+
return languageStats, nil
217
}
218
219
func getForkInfo(
+1
appview/repo/repo.go
+1
appview/repo/repo.go
+4
-1
knotserver/routes.go
+4
-1
knotserver/routes.go
···
784
content, _ := gr.FileContentN(absPath, 1024)
785
if !safe {
786
lang = enry.GetLanguage(absPath, content)
787
+
if len(lang) == 0 {
788
+
lang = "Other"
789
+
}
790
} else {
791
lang, _ = enry.GetLanguageByContent(absPath, content)
792
if len(lang) == 0 {
793
+
lang = "Other"
794
}
795
}
796
}
+7
-1
types/repo.go
+7
-1
types/repo.go