@@ -11,11 +11,10 @@ import (
1111 "bytes"
1212 "context"
1313 "io"
14- "os "
14+ "strings "
1515
1616 "code.gitea.io/gitea/modules/analyze"
1717 "code.gitea.io/gitea/modules/log"
18- "code.gitea.io/gitea/modules/util"
1918
2019 "github.com/go-enry/go-enry/v2"
2120 "github.com/go-git/go-git/v5"
@@ -48,35 +47,28 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
4847 var checker * CheckAttributeReader
4948
5049 if CheckGitVersionAtLeast ("1.7.8" ) == nil {
51- indexFilename , deleteTemporaryFile , err := repo .ReadTreeToTemporaryIndex (commitID )
50+ indexFilename , workTree , deleteTemporaryFile , err := repo .ReadTreeToTemporaryIndex (commitID )
5251 if err == nil {
5352 defer deleteTemporaryFile ()
54- tmpWorkTree , err := os .MkdirTemp ("" , "empty-work-dir" )
55- if err == nil {
56- defer func () {
57- _ = util .RemoveAll (tmpWorkTree )
53+ checker = & CheckAttributeReader {
54+ Attributes : []string {"linguist-vendored" , "linguist-generated" , "linguist-language" , "gitlab-language" },
55+ Repo : repo ,
56+ IndexFile : indexFilename ,
57+ WorkTree : workTree ,
58+ }
59+ ctx , cancel := context .WithCancel (DefaultContext )
60+ if err := checker .Init (ctx ); err != nil {
61+ log .Error ("Unable to open checker for %s. Error: %v" , commitID , err )
62+ } else {
63+ go func () {
64+ err = checker .Run ()
65+ if err != nil {
66+ log .Error ("Unable to open checker for %s. Error: %v" , commitID , err )
67+ cancel ()
68+ }
5869 }()
59-
60- checker = & CheckAttributeReader {
61- Attributes : []string {"linguist-vendored" , "linguist-generated" , "linguist-language" },
62- Repo : repo ,
63- IndexFile : indexFilename ,
64- WorkTree : tmpWorkTree ,
65- }
66- ctx , cancel := context .WithCancel (DefaultContext )
67- if err := checker .Init (ctx ); err != nil {
68- log .Error ("Unable to open checker for %s. Error: %v" , commitID , err )
69- } else {
70- go func () {
71- err = checker .Run ()
72- if err != nil {
73- log .Error ("Unable to open checker for %s. Error: %v" , commitID , err )
74- cancel ()
75- }
76- }()
77- }
78- defer cancel ()
7970 }
71+ defer cancel ()
8072 }
8173 }
8274
@@ -114,6 +106,21 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
114106 sizes [language ] += f .Size
115107
116108 return nil
109+ } else if language , has := attrs ["gitlab-language" ]; has && language != "unspecified" && language != "" {
110+ // strip off a ? if present
111+ if idx := strings .IndexByte (language , '?' ); idx >= 0 {
112+ language = language [:idx ]
113+ }
114+ if len (language ) != 0 {
115+ // group languages, such as Pug -> HTML; SCSS -> CSS
116+ group := enry .GetLanguageGroup (language )
117+ if len (group ) != 0 {
118+ language = group
119+ }
120+
121+ sizes [language ] += f .Size
122+ return nil
123+ }
117124 }
118125 }
119126 }
0 commit comments