summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorKN4CK3R <admin@oldschoolhack.me>2022-10-29 09:04:21 +0200
committerGitHub <noreply@github.com>2022-10-29 15:04:21 +0800
commit49436c2c6205b610fab6b810add52a5c92711b4d (patch)
treea896451f575a7875d6f3a4d44b2abdcf894c849e /modules
parent434622ab6f40b2afc6c60ca7158173077932d94e (diff)
downloadgitea-49436c2c6205b610fab6b810add52a5c92711b4d.tar.gz
gitea-49436c2c6205b610fab6b810add52a5c92711b4d.zip
Keep languages defined in .gitattributes (#21403)
Fixes #21377 This marks all "defined" languages in the `.gitattributes` file so they are not removed if they are not of type `programming` or `markup`. ![grafik](https://user-images.githubusercontent.com/1666336/194942021-1e641b60-bb8a-49c6-9a1c-413e7c4ba17d.png) Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'modules')
-rw-r--r--modules/git/repo_language_stats_gogit.go35
-rw-r--r--modules/git/repo_language_stats_nogogit.go35
2 files changed, 51 insertions, 19 deletions
diff --git a/modules/git/repo_language_stats_gogit.go b/modules/git/repo_language_stats_gogit.go
index 34b0dc45d3..503e774e7a 100644
--- a/modules/git/repo_language_stats_gogit.go
+++ b/modules/git/repo_language_stats_gogit.go
@@ -44,7 +44,15 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
checker, deferable := repo.CheckAttributeReader(commitID)
defer deferable()
+ // 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)
+
err = tree.Files().ForEach(func(f *object.File) error {
if f.Size == 0 {
return nil
@@ -75,8 +83,8 @@ 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
-
return nil
} else if language, has := attrs["gitlab-language"]; has && language != "unspecified" && language != "" {
// strip off a ? if present
@@ -90,6 +98,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
return nil
}
@@ -124,7 +133,18 @@ 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
+ }
return nil
})
@@ -132,14 +152,9 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
return nil, err
}
- // 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
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