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>
This commit is contained in:
parent
7948cb3149
commit
2ae45cebbf
13 changed files with 235 additions and 3 deletions
24
routers/web/repo/find.go
Normal file
24
routers/web/repo/find.go
Normal file
|
@ -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)
|
||||
}
|
55
routers/web/repo/treelist.go
Normal file
55
routers/web/repo/treelist.go
Normal file
|
@ -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
|
||||
}
|
|
@ -831,6 +831,12 @@ func RegisterRoutes(m *web.Route) {
|
|||
m.Group("/milestone", func() {
|
||||
m.Get("/{id}", repo.MilestoneIssuesAndPulls)
|
||||
}, reqRepoIssuesOrPullsReader, context.RepoRef())
|
||||
m.Get("/find/*", repo.FindFiles)
|
||||
m.Group("/tree-list", func() {
|
||||
m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.TreeList)
|
||||
m.Get("/tag/*", context.RepoRefByType(context.RepoRefTag), repo.TreeList)
|
||||
m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.TreeList)
|
||||
})
|
||||
m.Get("/compare", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists, ignSignIn, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.CompareDiff)
|
||||
m.Combo("/compare/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists).
|
||||
Get(ignSignIn, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.CompareDiff).
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue