github.com/wmuizelaar/kpt@v0.0.0-20221018115725-bd564717b2ed/thirdparty/cmdconfig/commands/cmdtree/cmdtree.go (about) 1 // Copyright 2019 The Kubernetes Authors. 2 // SPDX-License-Identifier: Apache-2.0 3 4 package cmdtree 5 6 import ( 7 "context" 8 "path/filepath" 9 10 "github.com/GoogleContainerTools/kpt/internal/docs/generated/pkgdocs" 11 "github.com/GoogleContainerTools/kpt/internal/printer" 12 "github.com/GoogleContainerTools/kpt/internal/util/argutil" 13 kptfilev1 "github.com/GoogleContainerTools/kpt/pkg/api/kptfile/v1" 14 "github.com/GoogleContainerTools/kpt/thirdparty/cmdconfig/commands/runner" 15 "github.com/spf13/cobra" 16 "sigs.k8s.io/kustomize/kyaml/kio" 17 "sigs.k8s.io/kustomize/kyaml/kio/filters" 18 ) 19 20 func GetTreeRunner(ctx context.Context, name string) *TreeRunner { 21 r := &TreeRunner{ 22 Ctx: ctx, 23 } 24 c := &cobra.Command{ 25 Use: "tree [DIR]", 26 Short: pkgdocs.TreeShort, 27 Long: pkgdocs.TreeLong, 28 Example: pkgdocs.TreeExamples, 29 RunE: r.runE, 30 Args: cobra.MaximumNArgs(1), 31 } 32 33 r.Command = c 34 return r 35 } 36 37 func NewCommand(ctx context.Context, name string) *cobra.Command { 38 return GetTreeRunner(ctx, name).Command 39 } 40 41 // TreeRunner contains the run function 42 type TreeRunner struct { 43 Command *cobra.Command 44 Ctx context.Context 45 } 46 47 func (r *TreeRunner) runE(c *cobra.Command, args []string) error { 48 var input kio.Reader 49 var root = "." 50 if len(args) == 0 { 51 args = append(args, root) 52 } 53 root = filepath.Clean(args[0]) 54 resolvedPath, err := argutil.ResolveSymlink(r.Ctx, args[0]) 55 if err != nil { 56 return err 57 } 58 input = kio.LocalPackageReader{ 59 PackagePath: resolvedPath, 60 MatchFilesGlob: r.getMatchFilesGlob(), 61 PreserveSeqIndent: true, 62 WrapBareSeqNode: true, 63 } 64 fltrs := []kio.Filter{&filters.IsLocalConfig{ 65 IncludeLocalConfig: true, 66 }} 67 68 return runner.HandleError(r.Ctx, kio.Pipeline{ 69 Inputs: []kio.Reader{input}, 70 Filters: fltrs, 71 Outputs: []kio.Writer{TreeWriter{ 72 Root: root, 73 Writer: printer.FromContextOrDie(r.Ctx).OutStream(), 74 }}, 75 }.Execute()) 76 } 77 78 func (r *TreeRunner) getMatchFilesGlob() []string { 79 return append([]string{kptfilev1.KptFileName}, kio.DefaultMatch...) 80 }