diff options
author | Roger Luo <rogerluo410@gmail.com> | 2022-06-09 19:15:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-09 14:15:08 +0300 |
commit | 2ae45cebbf2ec839bf2280765f958eb60d1f6374 (patch) | |
tree | 7e5a81f11ceebcbaf7c71cf9853a4c21fe28eeaf /routers/web/repo | |
parent | 7948cb3149ab64484a8d4c6644f53f9f39accbef (diff) | |
download | gitea-2ae45cebbf2ec839bf2280765f958eb60d1f6374.tar.gz gitea-2ae45cebbf2ec839bf2280765f958eb60d1f6374.zip |
Feature: Find files in repo (#15028)
* Create finding files page ui in repo page
* Get tree entries for find repo files.
* Move find files JS to individual file.
* gen swagger.
* Add enry.IsVendor to exclude entries
Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'routers/web/repo')
-rw-r--r-- | routers/web/repo/find.go | 24 | ||||
-rw-r--r-- | routers/web/repo/treelist.go | 55 |
2 files changed, 79 insertions, 0 deletions
diff --git a/routers/web/repo/find.go b/routers/web/repo/find.go new file mode 100644 index 0000000000..7117c00076 --- /dev/null +++ b/routers/web/repo/find.go @@ -0,0 +1,24 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package repo + +import ( + "net/http" + + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" +) + +const ( + tplFindFiles base.TplName = "repo/find/files" +) + +// FindFiles render the page to find repository files +func FindFiles(ctx *context.Context) { + path := ctx.Params("*") + ctx.Data["TreeLink"] = ctx.Repo.RepoLink + "/src/" + path + ctx.Data["DataLink"] = ctx.Repo.RepoLink + "/tree-list/" + path + ctx.HTML(http.StatusOK, tplFindFiles) +} diff --git a/routers/web/repo/treelist.go b/routers/web/repo/treelist.go new file mode 100644 index 0000000000..35ac0d507f --- /dev/null +++ b/routers/web/repo/treelist.go @@ -0,0 +1,55 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package repo + +import ( + "net/http" + + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/git" + + "github.com/go-enry/go-enry/v2" +) + +// TreeList get all files' entries of a repository +func TreeList(ctx *context.Context) { + tree, err := ctx.Repo.Commit.SubTree("/") + if err != nil { + ctx.ServerError("Repo.Commit.SubTree", err) + return + } + + entries, err := tree.ListEntriesRecursive() + if err != nil { + ctx.ServerError("ListEntriesRecursive", err) + return + } + entries.CustomSort(base.NaturalSortLess) + + files := make([]string, 0, len(entries)) + for _, entry := range entries { + if !isExcludedEntry(entry) { + files = append(files, entry.Name()) + } + } + ctx.JSON(http.StatusOK, files) +} + +func isExcludedEntry(entry *git.TreeEntry) bool { + if entry.IsDir() { + return true + } + + if entry.IsSubModule() { + return true + } + + if enry.IsVendor(entry.Name()) { + return true + } + + return false +} |