Skip to content

Commit 4db35ba

Browse files
committed
fix
1 parent 4145d5d commit 4db35ba

File tree

11 files changed

+70
-37
lines changed

11 files changed

+70
-37
lines changed

modules/fileicon/basic.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ import (
1010
"code.gitea.io/gitea/modules/svg"
1111
)
1212

13+
type FileIcon struct {
14+
Name string
15+
Entry git.TreeEntry
16+
EntryMode git.EntryMode
17+
}
18+
1319
func BasicThemeFolderIconName(isOpen bool) string {
1420
if isOpen {
1521
return "octicon-file-directory-open-fill"
@@ -21,17 +27,17 @@ func BasicThemeFolderIcon(isOpen bool) template.HTML {
2127
return svg.RenderHTML(BasicThemeFolderIconName(isOpen))
2228
}
2329

24-
func BasicThemeIcon(entry *git.TreeEntry) template.HTML {
30+
func BasicThemeIcon(file *FileIcon) template.HTML {
2531
svgName := "octicon-file"
2632
switch {
27-
case entry.IsLink():
33+
case file.EntryMode.IsLink():
2834
svgName = "octicon-file-symlink-file"
29-
if te, err := entry.FollowLink(); err == nil && te.IsDir() {
35+
if te, err := file.Entry.FollowLink(); err == nil && te.IsDir() {
3036
svgName = "octicon-file-directory-symlink"
3137
}
32-
case entry.IsDir():
38+
case file.EntryMode.IsDir():
3339
svgName = BasicThemeFolderIconName(false)
34-
case entry.IsSubModule():
40+
case file.EntryMode.IsSubModule():
3541
svgName = "octicon-file-submodule"
3642
}
3743
return svg.RenderHTML(svgName)

modules/fileicon/material.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"strings"
1010
"sync"
1111

12-
"code.gitea.io/gitea/modules/git"
1312
"code.gitea.io/gitea/modules/json"
1413
"code.gitea.io/gitea/modules/log"
1514
"code.gitea.io/gitea/modules/options"
@@ -89,20 +88,20 @@ func (m *MaterialIconProvider) FolderIcon(ctx reqctx.RequestContext, isOpen bool
8988
return svg.RenderHTML("material-folder-generic", 16, BasicThemeFolderIconName(isOpen))
9089
}
9190

92-
func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.TreeEntry) template.HTML {
91+
func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, file *FileIcon) template.HTML {
9392
if m.rules == nil {
94-
return BasicThemeIcon(entry)
93+
return BasicThemeIcon(file)
9594
}
9695

97-
if entry.IsLink() {
98-
if te, err := entry.FollowLink(); err == nil && te.IsDir() {
96+
if file.EntryMode.IsLink() {
97+
if te, err := file.Entry.FollowLink(); err == nil && te.IsDir() {
9998
// keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
10099
return svg.RenderHTML("material-folder-symlink", 16, "octicon-file-directory-symlink")
101100
}
102101
return svg.RenderHTML("octicon-file-symlink-file") // TODO: find some better icons for them
103102
}
104103

105-
name := m.findIconNameByGit(entry)
104+
name := m.findIconNameByGit(file)
106105
if name == "folder" {
107106
// the material icon pack's "folder" icon doesn't look good, so use our built-in one
108107
// keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
@@ -112,9 +111,9 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
112111
// keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
113112
extraClass := "octicon-file"
114113
switch {
115-
case entry.IsDir():
114+
case file.EntryMode.IsDir():
116115
extraClass = BasicThemeFolderIconName(false)
117-
case entry.IsSubModule():
116+
case file.EntryMode.IsSubModule():
118117
extraClass = "octicon-file-submodule"
119118
}
120119
return m.renderFileIconSVG(ctx, name, iconSVG, extraClass)
@@ -163,9 +162,9 @@ func (m *MaterialIconProvider) FindIconName(name string, isDir bool) string {
163162
return "file"
164163
}
165164

166-
func (m *MaterialIconProvider) findIconNameByGit(entry *git.TreeEntry) string {
167-
if entry.IsSubModule() {
165+
func (m *MaterialIconProvider) findIconNameByGit(file *FileIcon) string {
166+
if file.EntryMode.IsSubModule() {
168167
return "folder-git"
169168
}
170-
return m.FindIconName(entry.Name(), entry.IsDir())
169+
return m.FindIconName(file.Name, file.EntryMode.IsDir())
171170
}

modules/git/tree_entry_mode.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,26 @@ func (e EntryMode) String() string {
3434
return strconv.FormatInt(int64(e), 8)
3535
}
3636

37+
func (e EntryMode) IsSubModule() bool {
38+
return e == EntryModeCommit
39+
}
40+
41+
func (e EntryMode) IsDir() bool {
42+
return e == EntryModeTree
43+
}
44+
45+
func (e EntryMode) IsLink() bool {
46+
return e == EntryModeSymlink
47+
}
48+
49+
func (e EntryMode) IsRegular() bool {
50+
return e == EntryModeBlob
51+
}
52+
53+
func (e EntryMode) IsExecutable() bool {
54+
return e == EntryModeExec
55+
}
56+
3757
// ToEntryMode converts a string to an EntryMode
3858
func ToEntryMode(value string) EntryMode {
3959
v, _ := strconv.ParseInt(value, 8, 32)

modules/git/tree_entry_nogogit.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,27 @@ func (te *TreeEntry) Size() int64 {
5959

6060
// IsSubModule if the entry is a sub module
6161
func (te *TreeEntry) IsSubModule() bool {
62-
return te.entryMode == EntryModeCommit
62+
return te.entryMode.IsSubModule()
6363
}
6464

6565
// IsDir if the entry is a sub dir
6666
func (te *TreeEntry) IsDir() bool {
67-
return te.entryMode == EntryModeTree
67+
return te.entryMode.IsDir()
6868
}
6969

7070
// IsLink if the entry is a symlink
7171
func (te *TreeEntry) IsLink() bool {
72-
return te.entryMode == EntryModeSymlink
72+
return te.entryMode.IsLink()
7373
}
7474

7575
// IsRegular if the entry is a regular file
7676
func (te *TreeEntry) IsRegular() bool {
77-
return te.entryMode == EntryModeBlob
77+
return te.entryMode.IsRegular()
7878
}
7979

8080
// IsExecutable if the entry is an executable file (not necessarily binary)
8181
func (te *TreeEntry) IsExecutable() bool {
82-
return te.entryMode == EntryModeExec
82+
return te.entryMode.IsExecutable()
8383
}
8484

8585
// Blob returns the blob object the entry

modules/templates/util_render.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,19 @@ func (ut *RenderUtils) RenderFolderIconByExpansionState(isOpen bool) template.HT
196196
return fileicon.BasicThemeFolderIcon(isOpen)
197197
}
198198

199-
func (ut *RenderUtils) RenderFileIcon(entry *git.TreeEntry) template.HTML {
199+
func (ut *RenderUtils) RenderFileIconByGitTreeEntry(entry *git.TreeEntry) template.HTML {
200+
return ut.RenderFileIcon(&fileicon.FileIcon{
201+
Name: entry.Name(),
202+
Entry: *entry,
203+
EntryMode: entry.Mode(),
204+
})
205+
}
206+
207+
func (ut *RenderUtils) RenderFileIcon(file *fileicon.FileIcon) template.HTML {
200208
if setting.UI.FileIconTheme == "material" {
201-
return fileicon.DefaultMaterialIconProvider().FileIcon(ut.ctx, entry)
209+
return fileicon.DefaultMaterialIconProvider().FileIcon(ut.ctx, file)
202210
}
203-
return fileicon.BasicThemeIcon(entry)
211+
return fileicon.BasicThemeIcon(file)
204212
}
205213

206214
// RenderEmoji renders html text with emoji post processors

routers/web/repo/commit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ func Diff(ctx *context.Context) {
370370
return
371371
}
372372

373-
ctx.PageData["DiffFiles"] = transformDiffTreeForUI(ctx, parentCommit, commit, diffTree, nil)
373+
ctx.PageData["DiffFiles"] = transformDiffTreeForUI(ctx, diffTree, nil)
374374
}
375375

376376
statuses, _, err := git_model.GetLatestCommitStatus(ctx, ctx.Repo.Repository.ID, commitID, db.ListOptionsAll)

routers/web/repo/compare.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ func PrepareCompareDiff(
659659
return false
660660
}
661661

662-
ctx.PageData["DiffFiles"] = transformDiffTreeForUI(ctx, beforeCommit, headCommit, diffTree, nil)
662+
ctx.PageData["DiffFiles"] = transformDiffTreeForUI(ctx, diffTree, nil)
663663
}
664664

665665
commits, err := processGitCommits(ctx, ci.CompareInfo.Commits)

routers/web/repo/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -846,7 +846,7 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
846846
}
847847
}
848848

849-
ctx.PageData["DiffFiles"] = transformDiffTreeForUI(ctx, baseCommit, commit, diffTree, filesViewedState)
849+
ctx.PageData["DiffFiles"] = transformDiffTreeForUI(ctx, diffTree, filesViewedState)
850850
}
851851

852852
ctx.Data["Diff"] = diff

routers/web/repo/treelist.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
pull_model "code.gitea.io/gitea/models/pull"
1111
"code.gitea.io/gitea/modules/base"
12+
"code.gitea.io/gitea/modules/fileicon"
1213
"code.gitea.io/gitea/modules/git"
1314
"code.gitea.io/gitea/modules/reqctx"
1415
"code.gitea.io/gitea/modules/templates"
@@ -70,22 +71,21 @@ type FileDiffFile struct {
7071

7172
// transformDiffTreeForUI transforms a DiffTree into a slice of FileDiffFile for UI rendering
7273
// it also takes a map of file names to their viewed state, which is used to mark files as viewed
73-
func transformDiffTreeForUI(ctx *context.Context, baseCommit, headCommit *git.Commit, diffTree *gitdiff.DiffTree, filesViewedState map[string]pull_model.ViewedState) []FileDiffFile {
74+
func transformDiffTreeForUI(ctx *context.Context, diffTree *gitdiff.DiffTree, filesViewedState map[string]pull_model.ViewedState) []FileDiffFile {
7475
files := make([]FileDiffFile, 0, len(diffTree.Files))
7576
renderUtils := templates.NewRenderUtils(reqctx.FromContext(ctx))
7677
for _, file := range diffTree.Files {
7778
nameHash := git.HashFilePathForWebUI(file.HeadPath)
7879
isSubmodule := file.HeadMode == git.EntryModeCommit
7980
isViewed := filesViewedState[file.HeadPath] == pull_model.Viewed
80-
entry, _ := headCommit.GetTreeEntryByPath(file.HeadPath)
81-
if entry == nil {
82-
entry, _ = baseCommit.GetTreeEntryByPath(file.HeadPath)
83-
}
8481

8582
files = append(files, FileDiffFile{
86-
Name: file.HeadPath,
87-
NameHash: nameHash,
88-
FileIcon: renderUtils.RenderFileIcon(entry),
83+
Name: file.HeadPath,
84+
NameHash: nameHash,
85+
FileIcon: renderUtils.RenderFileIcon(&fileicon.FileIcon{
86+
Name: file.HeadPath,
87+
EntryMode: file.HeadMode,
88+
}),
8989
IsSubmodule: isSubmodule,
9090
IsViewed: isViewed,
9191
Status: file.Status,

services/repository/files/tree.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func listTreeNodes(ctx context.Context, renderUtils *templates.RenderUtils, comm
195195
nodes := make([]*TreeViewNode, 0, len(entries))
196196
for _, entry := range entries {
197197
node := newTreeViewNodeFromEntry(ctx, commit, treePath, entry)
198-
node.FileIcon = renderUtils.RenderFileIcon(entry)
198+
node.FileIcon = renderUtils.RenderFileIconByGitTreeEntry(entry)
199199
nodes = append(nodes, node)
200200
if entry.IsDir() && subPathDirName == entry.Name() {
201201
subTreePath := treePath + "/" + node.EntryName

0 commit comments

Comments
 (0)