Skip to content

Commit 94d06be

Browse files
authored
Extract linguist code to method (#29168)
1 parent a346a8c commit 94d06be

File tree

3 files changed

+41
-48
lines changed

3 files changed

+41
-48
lines changed

routers/web/repo/blame.go

+5-24
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"code.gitea.io/gitea/modules/templates"
2121
"code.gitea.io/gitea/modules/timeutil"
2222
"code.gitea.io/gitea/modules/util"
23+
files_service "code.gitea.io/gitea/services/repository/files"
2324
)
2425

2526
type blameRow struct {
@@ -247,31 +248,11 @@ func processBlameParts(ctx *context.Context, blameParts []*git.BlamePart) map[st
247248
func renderBlame(ctx *context.Context, blameParts []*git.BlamePart, commitNames map[string]*user_model.UserCommit) {
248249
repoLink := ctx.Repo.RepoLink
249250

250-
language := ""
251-
252-
indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
253-
if err == nil {
254-
defer deleteTemporaryFile()
255-
256-
filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{
257-
CachedOnly: true,
258-
Attributes: []string{"linguist-language", "gitlab-language"},
259-
Filenames: []string{ctx.Repo.TreePath},
260-
IndexFile: indexFilename,
261-
WorkTree: worktree,
262-
})
263-
if err != nil {
264-
log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
265-
}
266-
267-
language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"]
268-
if language == "" || language == "unspecified" {
269-
language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"]
270-
}
271-
if language == "unspecified" {
272-
language = ""
273-
}
251+
language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
252+
if err != nil {
253+
log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
274254
}
255+
275256
lines := make([]string, 0)
276257
rows := make([]*blameRow, 0)
277258
escapeStatus := &charset.EscapeStatus{}

routers/web/repo/view.go

+5-24
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
"code.gitea.io/gitea/modules/util"
5050
"code.gitea.io/gitea/routers/web/feed"
5151
issue_service "code.gitea.io/gitea/services/issue"
52+
files_service "code.gitea.io/gitea/services/repository/files"
5253

5354
"github.com/nektos/act/pkg/model"
5455

@@ -553,31 +554,11 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry) {
553554
}
554555
ctx.Data["NumLinesSet"] = true
555556

556-
language := ""
557-
558-
indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
559-
if err == nil {
560-
defer deleteTemporaryFile()
561-
562-
filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{
563-
CachedOnly: true,
564-
Attributes: []string{"linguist-language", "gitlab-language"},
565-
Filenames: []string{ctx.Repo.TreePath},
566-
IndexFile: indexFilename,
567-
WorkTree: worktree,
568-
})
569-
if err != nil {
570-
log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
571-
}
572-
573-
language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"]
574-
if language == "" || language == "unspecified" {
575-
language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"]
576-
}
577-
if language == "unspecified" {
578-
language = ""
579-
}
557+
language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
558+
if err != nil {
559+
log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
580560
}
561+
581562
fileContent, lexerName, err := highlight.File(blob.Name(), language, buf)
582563
ctx.Data["LexerName"] = lexerName
583564
if err != nil {

services/repository/files/content.go

+31
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,34 @@ func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git
270270
Content: content,
271271
}, nil
272272
}
273+
274+
// TryGetContentLanguage tries to get the (linguist) language of the file content
275+
func TryGetContentLanguage(gitRepo *git.Repository, commitID, treePath string) (string, error) {
276+
indexFilename, worktree, deleteTemporaryFile, err := gitRepo.ReadTreeToTemporaryIndex(commitID)
277+
if err != nil {
278+
return "", err
279+
}
280+
281+
defer deleteTemporaryFile()
282+
283+
filename2attribute2info, err := gitRepo.CheckAttribute(git.CheckAttributeOpts{
284+
CachedOnly: true,
285+
Attributes: []string{"linguist-language", "gitlab-language"},
286+
Filenames: []string{treePath},
287+
IndexFile: indexFilename,
288+
WorkTree: worktree,
289+
})
290+
if err != nil {
291+
return "", err
292+
}
293+
294+
language := filename2attribute2info[treePath]["linguist-language"]
295+
if language == "" || language == "unspecified" {
296+
language = filename2attribute2info[treePath]["gitlab-language"]
297+
}
298+
if language == "unspecified" {
299+
language = ""
300+
}
301+
302+
return language, nil
303+
}

0 commit comments

Comments
 (0)