summaryrefslogtreecommitdiffstats
path: root/modules/git/repo_language_stats_nogogit.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/git/repo_language_stats_nogogit.go')
-rw-r--r--modules/git/repo_language_stats_nogogit.go35
1 files changed, 26 insertions, 9 deletions
diff --git a/modules/git/repo_language_stats_nogogit.go b/modules/git/repo_language_stats_nogogit.go
index 7388ef403b..baeb114909 100644
--- a/modules/git/repo_language_stats_nogogit.go
+++ b/modules/git/repo_language_stats_nogogit.go
@@ -67,7 +67,16 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
contentBuf := bytes.Buffer{}
var content []byte
+
+ // sizes contains the current calculated size of all files by language
sizes := make(map[string]int64)
+ // by default we will only count the sizes of programming languages or markup languages
+ // unless they are explicitly set using linguist-language
+ includedLanguage := map[string]bool{}
+ // or if there's only one language in the repository
+ firstExcludedLanguage := ""
+ firstExcludedLanguageSize := int64(0)
+
for _, f := range entries {
select {
case <-repo.Ctx.Done():
@@ -107,6 +116,7 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
language = group
}
+ // this language will always be added to the size
sizes[language] += f.Size()
continue
} else if language, has := attrs["gitlab-language"]; has && language != "unspecified" && language != "" {
@@ -121,6 +131,7 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
language = group
}
+ // this language will always be added to the size
sizes[language] += f.Size()
continue
}
@@ -180,18 +191,24 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
language = group
}
- sizes[language] += f.Size()
+ included, checked := includedLanguage[language]
+ if !checked {
+ langtype := enry.GetLanguageType(language)
+ included = langtype == enry.Programming || langtype == enry.Markup
+ includedLanguage[language] = included
+ }
+ if included {
+ sizes[language] += f.Size()
+ } else if len(sizes) == 0 && (firstExcludedLanguage == "" || firstExcludedLanguage == language) {
+ firstExcludedLanguage = language
+ firstExcludedLanguageSize += f.Size()
+ }
continue
}
- // filter special languages unless they are the only language
- if len(sizes) > 1 {
- for language := range sizes {
- langtype := enry.GetLanguageType(language)
- if langtype != enry.Programming && langtype != enry.Markup {
- delete(sizes, language)
- }
- }
+ // If there are no included languages add the first excluded language
+ if len(sizes) == 0 && firstExcludedLanguage != "" {
+ sizes[firstExcludedLanguage] = firstExcludedLanguageSize
}
return sizes, nil