mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Extract linguist code to method (#29168)
This commit is contained in:
		| @@ -20,6 +20,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 { | ||||||
| @@ -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) { | 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" | ||||||
|  |  | ||||||
| @@ -553,31 +554,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 | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user