]> source.dussan.org Git - gitea.git/commitdiff
Extract linguist code to method (#29168)
authorKN4CK3R <admin@oldschoolhack.me>
Wed, 14 Feb 2024 18:50:31 +0000 (19:50 +0100)
committerGitHub <noreply@github.com>
Wed, 14 Feb 2024 18:50:31 +0000 (18:50 +0000)
routers/web/repo/blame.go
routers/web/repo/view.go
services/repository/files/content.go

index d414779a14ec7b5057177d2cbcd0047593d21d0a..c7875ea0cb3ba4edc6cd8d6802b015b873d4a9dc 100644 (file)
@@ -20,6 +20,7 @@ import (
        "code.gitea.io/gitea/modules/templates"
        "code.gitea.io/gitea/modules/timeutil"
        "code.gitea.io/gitea/modules/util"
+       files_service "code.gitea.io/gitea/services/repository/files"
 )
 
 type blameRow struct {
@@ -247,31 +248,11 @@ func processBlameParts(ctx *context.Context, blameParts []*git.BlamePart) map[st
 func renderBlame(ctx *context.Context, blameParts []*git.BlamePart, commitNames map[string]*user_model.UserCommit) {
        repoLink := ctx.Repo.RepoLink
 
-       language := ""
-
-       indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
-       if err == nil {
-               defer deleteTemporaryFile()
-
-               filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{
-                       CachedOnly: true,
-                       Attributes: []string{"linguist-language", "gitlab-language"},
-                       Filenames:  []string{ctx.Repo.TreePath},
-                       IndexFile:  indexFilename,
-                       WorkTree:   worktree,
-               })
-               if err != nil {
-                       log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
-               }
-
-               language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"]
-               if language == "" || language == "unspecified" {
-                       language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"]
-               }
-               if language == "unspecified" {
-                       language = ""
-               }
+       language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
+       if err != nil {
+               log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
        }
+
        lines := make([]string, 0)
        rows := make([]*blameRow, 0)
        escapeStatus := &charset.EscapeStatus{}
index af3021da11287381fd71803a75b73b1fe7ccb9b4..75051d199599180f0fe339d3d97ad39d6e669b73 100644 (file)
@@ -49,6 +49,7 @@ import (
        "code.gitea.io/gitea/modules/util"
        "code.gitea.io/gitea/routers/web/feed"
        issue_service "code.gitea.io/gitea/services/issue"
+       files_service "code.gitea.io/gitea/services/repository/files"
 
        "github.com/nektos/act/pkg/model"
 
@@ -553,31 +554,11 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry) {
                        }
                        ctx.Data["NumLinesSet"] = true
 
-                       language := ""
-
-                       indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
-                       if err == nil {
-                               defer deleteTemporaryFile()
-
-                               filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{
-                                       CachedOnly: true,
-                                       Attributes: []string{"linguist-language", "gitlab-language"},
-                                       Filenames:  []string{ctx.Repo.TreePath},
-                                       IndexFile:  indexFilename,
-                                       WorkTree:   worktree,
-                               })
-                               if err != nil {
-                                       log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
-                               }
-
-                               language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"]
-                               if language == "" || language == "unspecified" {
-                                       language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"]
-                               }
-                               if language == "unspecified" {
-                                       language = ""
-                               }
+                       language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
+                       if err != nil {
+                               log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
                        }
+
                        fileContent, lexerName, err := highlight.File(blob.Name(), language, buf)
                        ctx.Data["LexerName"] = lexerName
                        if err != nil {
index c278d7f8355cc150beeeca208e44032c7b826f61..f2a7677688bf2866df07065b032cc5276248a7c6 100644 (file)
@@ -270,3 +270,34 @@ func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git
                Content:  content,
        }, nil
 }
+
+// TryGetContentLanguage tries to get the (linguist) language of the file content
+func TryGetContentLanguage(gitRepo *git.Repository, commitID, treePath string) (string, error) {
+       indexFilename, worktree, deleteTemporaryFile, err := gitRepo.ReadTreeToTemporaryIndex(commitID)
+       if err != nil {
+               return "", err
+       }
+
+       defer deleteTemporaryFile()
+
+       filename2attribute2info, err := gitRepo.CheckAttribute(git.CheckAttributeOpts{
+               CachedOnly: true,
+               Attributes: []string{"linguist-language", "gitlab-language"},
+               Filenames:  []string{treePath},
+               IndexFile:  indexFilename,
+               WorkTree:   worktree,
+       })
+       if err != nil {
+               return "", err
+       }
+
+       language := filename2attribute2info[treePath]["linguist-language"]
+       if language == "" || language == "unspecified" {
+               language = filename2attribute2info[treePath]["gitlab-language"]
+       }
+       if language == "unspecified" {
+               language = ""
+       }
+
+       return language, nil
+}