From a76480d11216031ea54e804deb48187470abf87c Mon Sep 17 00:00:00 2001 From: Krystian Panek Date: Wed, 8 Feb 2023 14:49:59 +0100 Subject: [PATCH] Repo node children / nice path list sorted --- cmd/aem/repo.go | 2 +- pkg/repo.go | 26 ++++++++++++++++++++++++++ pkg/repo_node.go | 4 ++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/cmd/aem/repo.go b/cmd/aem/repo.go index bc48577b..4fc37e3e 100644 --- a/cmd/aem/repo.go +++ b/cmd/aem/repo.go @@ -68,7 +68,7 @@ func (c *CLI) repoNodeChildrenCmd() *cobra.Command { c.Error(err) return } - c.SetOutput("children", children) + c.SetOutput("children", pkg.NewRepoNodeList(children)) c.Ok("node children read") }, } diff --git a/pkg/repo.go b/pkg/repo.go index 872d7eb8..d94e241d 100644 --- a/pkg/repo.go +++ b/pkg/repo.go @@ -1,14 +1,18 @@ package pkg import ( + "bytes" "fmt" "github.com/go-resty/resty/v2" + "github.com/samber/lo" log "github.com/sirupsen/logrus" "github.com/wttech/aemc/pkg/common/fmtx" "github.com/wttech/aemc/pkg/common/mapsx" "github.com/wttech/aemc/pkg/repo" "net/http" "reflect" + "sort" + "strings" ) // Repo Facade for communicating with JCR repository. @@ -140,3 +144,25 @@ func (r Repo) handleResponse(action string, resp *resty.Response, err error) err } return nil } + +func NewRepoNodeList(nodes []RepoNode) NodeList { + var sortedNodes []RepoNode + sortedNodes = append(sortedNodes, nodes...) + sort.SliceStable(sortedNodes, func(i, j int) bool { return strings.Compare(nodes[i].Name(), nodes[j].Name()) < 0 }) + return NodeList{Nodes: sortedNodes, Total: len(nodes)} +} + +type NodeList struct { + Total int `json:"total" yaml:"total"` + Nodes []RepoNode `json:"nodes" yaml:"nodes"` +} + +func (nl NodeList) MarshalText() string { + bs := bytes.NewBufferString("") + bs.WriteString(fmtx.TblMap("stats", "stat", "value", map[string]any{"total": len(nl.Nodes)})) + bs.WriteString("\n") + bs.WriteString(fmtx.TblRows("list", true, []string{"path"}, lo.Map(nl.Nodes, func(node RepoNode, _ int) map[string]any { + return map[string]any{"path": node.path} + }))) + return bs.String() +} diff --git a/pkg/repo_node.go b/pkg/repo_node.go index c5c34637..5461c1eb 100644 --- a/pkg/repo_node.go +++ b/pkg/repo_node.go @@ -22,7 +22,7 @@ type RepoNode struct { func NewNode(repo Repo, path string) RepoNode { return RepoNode{ repo: repo, - path: path, + path: "/" + strings.Trim(path, "/"), } } @@ -81,7 +81,7 @@ func (n RepoNode) Breadcrumb() []RepoNode { } func (n RepoNode) Child(name string) RepoNode { - return NewNode(n.repo, fmt.Sprintf("%s/%s", strings.TrimPrefix(n.path, "/"), name)) + return NewNode(n.repo, fmt.Sprintf("%s/%s", n.path, name)) } func (n RepoNode) Children() ([]RepoNode, error) {