mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-18 23:53:11 +02:00
finish submodule support
This commit is contained in:
parent
b1193e0291
commit
61be52be5d
@ -13,6 +13,7 @@ import (
|
|||||||
|
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
@ -142,9 +143,49 @@ type TreeViewNode struct {
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Path string `json:"path"`
|
Path string `json:"path"`
|
||||||
|
SubModuleURL string `json:"sub_module_url,omitempty"`
|
||||||
Children []*TreeViewNode `json:"children,omitempty"`
|
Children []*TreeViewNode `json:"children,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (node *TreeViewNode) sortLevel() int {
|
||||||
|
switch node.Type {
|
||||||
|
case "tree", "commit":
|
||||||
|
return 0
|
||||||
|
default:
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTreeViewNodeFromEntry(ctx context.Context, commit *git.Commit, parentDir string, entry *git.TreeEntry) *TreeViewNode {
|
||||||
|
node := &TreeViewNode{
|
||||||
|
Name: entry.Name(),
|
||||||
|
Type: entryModeString(entry.Mode()),
|
||||||
|
Path: path.Join(parentDir, entry.Name()),
|
||||||
|
}
|
||||||
|
|
||||||
|
if node.Type == "commit" {
|
||||||
|
if subModule, err := commit.GetSubModule(node.Path); err != nil {
|
||||||
|
log.Error("GetSubModule: %v", err)
|
||||||
|
} else if subModule != nil {
|
||||||
|
submoduleFile := git.NewCommitSubmoduleFile(subModule.URL, entry.ID.String())
|
||||||
|
webLink := submoduleFile.SubmoduleWebLink(ctx)
|
||||||
|
node.SubModuleURL = webLink.CommitWebLink
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// sortTreeViewNodes list directory first and with alpha sequence
|
||||||
|
func sortTreeViewNodes(nodes []*TreeViewNode) {
|
||||||
|
sort.Slice(nodes, func(i, j int) bool {
|
||||||
|
if nodes[i].sortLevel() != nodes[j].sortLevel() {
|
||||||
|
return nodes[i].sortLevel() < nodes[j].sortLevel()
|
||||||
|
}
|
||||||
|
return nodes[i].Name < nodes[j].Name
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Example 1: (path: /)
|
Example 1: (path: /)
|
||||||
|
|
||||||
@ -429,11 +470,7 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, gitRep
|
|||||||
fields := strings.Split(dir, "/")
|
fields := strings.Split(dir, "/")
|
||||||
var parentNode *TreeViewNode
|
var parentNode *TreeViewNode
|
||||||
for _, entry := range rootEntries {
|
for _, entry := range rootEntries {
|
||||||
node := &TreeViewNode{
|
node := newTreeViewNodeFromEntry(ctx, commit, "", entry)
|
||||||
Name: entry.Name(),
|
|
||||||
Type: entryModeString(entry.Mode()),
|
|
||||||
Path: entry.Name(),
|
|
||||||
}
|
|
||||||
treeViewNodes = append(treeViewNodes, node)
|
treeViewNodes = append(treeViewNodes, node)
|
||||||
if dir != "" && fields[0] == entry.Name() {
|
if dir != "" && fields[0] == entry.Name() {
|
||||||
parentNode = node
|
parentNode = node
|
||||||
@ -466,23 +503,8 @@ func GetTreeInformation(ctx context.Context, repo *repo_model.Repository, gitRep
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
parentNode.Children = append(parentNode.Children, &TreeViewNode{
|
parentNode.Children = append(parentNode.Children, newTreeViewNodeFromEntry(ctx, commit, dir, entry))
|
||||||
Name: entry.Name(),
|
|
||||||
Type: entryModeString(entry.Mode()),
|
|
||||||
Path: path.Join(dir, entry.Name()),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
sortTreeViewNodes(parentNode.Children)
|
sortTreeViewNodes(parentNode.Children)
|
||||||
return treeViewNodes, nil
|
return treeViewNodes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// sortTreeViewNodes list directory first and with alpha sequence
|
|
||||||
func sortTreeViewNodes(nodes []*TreeViewNode) {
|
|
||||||
sort.Slice(nodes, func(i, j int) bool {
|
|
||||||
if nodes[i].Type != nodes[j].Type {
|
|
||||||
// folder and submodule first
|
|
||||||
return nodes[i].Type == "tree" || nodes[i].Type == "commit"
|
|
||||||
}
|
|
||||||
return nodes[i].Name < nodes[j].Name
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
@ -6,6 +6,7 @@ type Item = {
|
|||||||
name: string;
|
name: string;
|
||||||
path: string;
|
path: string;
|
||||||
htmlUrl: string;
|
htmlUrl: string;
|
||||||
|
sub_module_url?: string;
|
||||||
type: string;
|
type: string;
|
||||||
children?: Item[];
|
children?: Item[];
|
||||||
};
|
};
|
||||||
@ -41,7 +42,7 @@ const doLoadFileContent = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const doGotoSubModule = () => {
|
const doGotoSubModule = () => {
|
||||||
// TOTO: redirect to submodule
|
location.href = props.item.sub_module_url;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ async function loadChildren(item, recursive?: boolean) {
|
|||||||
name: i.name,
|
name: i.name,
|
||||||
type: i.type,
|
type: i.type,
|
||||||
path: i.path,
|
path: i.path,
|
||||||
|
sub_module_url: i.sub_module_url,
|
||||||
children: i.children,
|
children: i.children,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user