mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-28 02:40:38 +00:00
Extract linguist code to method (#29168)
(cherry picked from commit 94d06be035bac468129903c9f32e785baf3c1c3b)
This commit is contained in:
parent
52ef33b931
commit
d565d85160
3 changed files with 41 additions and 48 deletions
|
@ -19,6 +19,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/templates"
|
"code.gitea.io/gitea/modules/templates"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
files_service "code.gitea.io/gitea/services/repository/files"
|
||||||
)
|
)
|
||||||
|
|
||||||
type blameRow struct {
|
type blameRow struct {
|
||||||
|
@ -218,31 +219,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) {
|
func renderBlame(ctx *context.Context, blameParts []*git.BlamePart, commitNames map[string]*user_model.UserCommit) {
|
||||||
repoLink := ctx.Repo.RepoLink
|
repoLink := ctx.Repo.RepoLink
|
||||||
|
|
||||||
language := ""
|
language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
|
||||||
|
if err != nil {
|
||||||
indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
|
log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
|
||||||
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 = ""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lines := make([]string, 0)
|
lines := make([]string, 0)
|
||||||
rows := make([]*blameRow, 0)
|
rows := make([]*blameRow, 0)
|
||||||
escapeStatus := &charset.EscapeStatus{}
|
escapeStatus := &charset.EscapeStatus{}
|
||||||
|
|
|
@ -49,6 +49,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
"code.gitea.io/gitea/routers/web/feed"
|
"code.gitea.io/gitea/routers/web/feed"
|
||||||
issue_service "code.gitea.io/gitea/services/issue"
|
issue_service "code.gitea.io/gitea/services/issue"
|
||||||
|
files_service "code.gitea.io/gitea/services/repository/files"
|
||||||
|
|
||||||
"github.com/nektos/act/pkg/model"
|
"github.com/nektos/act/pkg/model"
|
||||||
|
|
||||||
|
@ -557,31 +558,11 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry) {
|
||||||
}
|
}
|
||||||
ctx.Data["NumLinesSet"] = true
|
ctx.Data["NumLinesSet"] = true
|
||||||
|
|
||||||
language := ""
|
language, err := files_service.TryGetContentLanguage(ctx.Repo.GitRepo, ctx.Repo.CommitID, ctx.Repo.TreePath)
|
||||||
|
if err != nil {
|
||||||
indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID)
|
log.Error("Unable to get file language for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err)
|
||||||
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 = ""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fileContent, lexerName, err := highlight.File(blob.Name(), language, buf)
|
fileContent, lexerName, err := highlight.File(blob.Name(), language, buf)
|
||||||
ctx.Data["LexerName"] = lexerName
|
ctx.Data["LexerName"] = lexerName
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -270,3 +270,34 @@ func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git
|
||||||
Content: content,
|
Content: content,
|
||||||
}, nil
|
}, 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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue