-
-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Feature: Find files in repo #15028
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Feature: Find files in repo #15028
Changes from all commits
Commits
Show all changes
36 commits
Select commit
Hold shift + click to select a range
d83aecd
Create finding files page ui in repo page
rogerluo410 efe69d4
Modify router
rogerluo410 c4e3195
Get tree entries for find repo files.
rogerluo410 ea4110f
Conplete find files in repo.
rogerluo410 2d6a36b
Make fmt
rogerluo410 bbf1b6d
Merge branch 'master' into dev-find-file
rogerluo410 5ce4a6d
Update comment.
rogerluo410 5239d40
Move find files JS to individual file.
rogerluo410 09fe0f4
Fix go lint
rogerluo410 c7f622d
Update find repo files.
rogerluo410 6878f15
Merge branch 'master' into dev-find-file
rogerluo410 7d32375
gen swagger.
rogerluo410 ba6b069
gen swagger
rogerluo410 224c5d9
Add comment to redo ci
rogerluo410 4b90809
Add enry.IsVendor to exclude entries
rogerluo410 6661746
Merge branch 'master' into dev-find-file
rogerluo410 4e52afb
Make lint
rogerluo410 58802bd
Fix histroy conflicts
rogerluo410 1c5866d
Missing file
rogerluo410 a338737
Change HTML id naming style
rogerluo410 48dbb92
Merge branch 'master' into dev-find-file
rogerluo410 c34cd2f
Fix jquery $ variable not found issue
rogerluo410 22e79f5
Fix break too early when filtering.
rogerluo410 a1188ba
Fix id naming
rogerluo410 28951f9
revert package-lock.json
wxiaoguang 12a9b8a
Merge branch 'main' into dev-find-file
wxiaoguang 110afce
refactor
wxiaoguang 02e17eb
fmt
wxiaoguang 77ddc4d
fine tune HTML layout
wxiaoguang eaef506
Merge branch 'main' into dev-find-file
wxiaoguang c3b4e22
fine tune
wxiaoguang 86116fe
Merge branch 'main' into dev-find-file
lunny 7ac1f66
Apply suggestions from code review
wxiaoguang 20b7325
add some comments
wxiaoguang 65b69f2
use hidden instead of style, optimize strSubMatch for remaining chars
wxiaoguang 5758ba3
Merge branch 'main' into dev-find-file
wxiaoguang File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() | ||
lunny marked this conversation as resolved.
Show resolved
Hide resolved
|
||
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 | ||
wxiaoguang marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{{template "base/head" .}} | ||
<div class="page-content repository"> | ||
{{template "repo/header" .}} | ||
<div class="ui container"> | ||
<div class="df ac"> | ||
<a href="{{$.RepoLink}}">{{.RepoName}}</a> | ||
<span class="mx-3">/</span> | ||
<div class="ui input f1"> | ||
<input id="repo-file-find-input" type="text" autofocus data-url-data-link="{{.DataLink}}" data-url-tree-link="{{.TreeLink}}"> | ||
wxiaoguang marked this conversation as resolved.
Show resolved
Hide resolved
|
||
</div> | ||
</div> | ||
<table id="repo-find-file-table" class="ui single line table"> | ||
<tbody> | ||
</tbody> | ||
</table> | ||
<div id="repo-find-file-no-result" class="ui row center mt-5" hidden> | ||
<h3>{{.i18n.Tr "repo.find_file.no_matching"}}</h3> | ||
</div> | ||
</div> | ||
</div> | ||
{{template "base/footer" .}} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
import $ from 'jquery'; | ||
|
||
import {svg} from '../svg.js'; | ||
import {strSubMatch} from '../utils.js'; | ||
const {csrf} = window.config; | ||
|
||
const threshold = 50; | ||
let files = []; | ||
let $repoFindFileInput, $repoFindFileTableBody, $repoFindFileNoResult; | ||
|
||
function filterRepoFiles(filter) { | ||
wxiaoguang marked this conversation as resolved.
Show resolved
Hide resolved
|
||
const treeLink = $repoFindFileInput.attr('data-url-tree-link'); | ||
$repoFindFileTableBody.empty(); | ||
|
||
const fileRes = []; | ||
if (filter) { | ||
for (let i = 0; i < files.length && fileRes.length < threshold; i++) { | ||
const subMatch = strSubMatch(files[i], filter); | ||
if (subMatch.length > 1) { | ||
fileRes.push(subMatch); | ||
} | ||
} | ||
} else { | ||
for (let i = 0; i < files.length && i < threshold; i++) { | ||
fileRes.push([files[i]]); | ||
} | ||
} | ||
|
||
const tmplRow = `<tr><td><a></a></td></tr>`; | ||
|
||
$repoFindFileNoResult.toggle(fileRes.length === 0); | ||
for (const matchRes of fileRes) { | ||
const $row = $(tmplRow); | ||
const $a = $row.find('a'); | ||
$a.attr('href', `${treeLink}/${matchRes.join('')}`); | ||
const $octiconFile = $(svg('octicon-file')).addClass('mr-3'); | ||
$a.append($octiconFile); | ||
// if the target file path is "abc/xyz", to search "bx", then the matchRes is ['a', 'b', 'c/', 'x', 'yz'] | ||
// the matchRes[odd] is matched and highlighted to red. | ||
for (let j = 0; j < matchRes.length; j++) { | ||
if (!matchRes[j]) continue; | ||
const $span = $('<span>').text(matchRes[j]); | ||
if (j % 2 === 1) $span.addClass('ui text red'); | ||
$a.append($span); | ||
} | ||
$repoFindFileTableBody.append($row); | ||
} | ||
} | ||
|
||
async function loadRepoFiles() { | ||
files = await $.ajax({ | ||
url: $repoFindFileInput.attr('data-url-data-link'), | ||
headers: {'X-Csrf-Token': csrf} | ||
}); | ||
filterRepoFiles($repoFindFileInput.val()); | ||
} | ||
|
||
export function initFindFileInRepo() { | ||
$repoFindFileInput = $('#repo-file-find-input'); | ||
if (!$repoFindFileInput.length) return; | ||
|
||
$repoFindFileTableBody = $('#repo-find-file-table tbody'); | ||
$repoFindFileNoResult = $('#repo-find-file-no-result'); | ||
$repoFindFileInput.on('input', () => filterRepoFiles($repoFindFileInput.val())); | ||
|
||
loadRepoFiles(); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.