Skip to content

Commit d565d85

Browse files
KN4CK3Rearl-warren
authored andcommitted
Extract linguist code to method (go-gitea#29168)
(cherry picked from commit 94d06be)
1 parent 52ef33b commit d565d85

File tree

3 files changed

+41
-48
lines changed

3 files changed

+41
-48
lines changed

routers/web/repo/blame.go

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"code.gitea.io/gitea/modules/templates"
2020
"code.gitea.io/gitea/modules/timeutil"
2121
"code.gitea.io/gitea/modules/util"
22+
files_service "code.gitea.io/gitea/services/repository/files"
2223
)
2324

2425
type blameRow struct {
@@ -218,31 +219,11 @@ func processBlameParts(ctx *context.Context, blameParts []*git.BlamePart) map[st
218219
func renderBlame(ctx *context.Context, blameParts []*git.BlamePart, commitNames map[string]*user_model.UserCommit) {
219220
repoLink := ctx.Repo.RepoLink
220221

221-
language := ""
222-
223-
indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
224-
if err == nil {
225-
defer deleteTemporaryFile()
226-
227-
filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{
228-
CachedOnly: true,
229-
Attributes: []string{"linguist-language", "gitlab-language"},
230-
Filenames: []string{ctx.Repo.TreePath},
231-
IndexFile: indexFilename,
232-
WorkTree: worktree,
233-
})
234-
if err != nil {
235-
log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
236-
}
237-
238-
language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"]
239-
if language == "" || language == "unspecified" {
240-
language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"]
241-
}
242-
if language == "unspecified" {
243-
language = ""
244-
}
222+
language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
223+
if err != nil {
224+
log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
245225
}
226+
246227
lines := make([]string, 0)
247228
rows := make([]*blameRow, 0)
248229
escapeStatus := &charset.EscapeStatus{}

routers/web/repo/view.go

Lines changed: 5 additions & 24 deletions
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

@@ -557,31 +558,11 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry) {
557558
}
558559
ctx.Data["NumLinesSet"] = true
559560

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

services/repository/files/content.go

Lines changed: 31 additions & 0 deletions
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)