From 2b1a2d361f672fa74e5300114f41feb0744edd9b Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Fri, 28 Dec 2018 23:10:28 -0500 Subject: [PATCH] Use tabwriter with remembered column widths --- pkg/kubectl/cmd/config/BUILD | 1 + pkg/kubectl/cmd/config/get_contexts.go | 2 +- pkg/kubectl/cmd/get/BUILD | 1 + pkg/kubectl/cmd/get/customcolumn.go | 3 ++- pkg/kubectl/cmd/get/get.go | 7 +++++-- pkg/kubectl/cmd/get/get_test.go | 20 ++++++++++---------- pkg/kubectl/util/printers/BUILD | 1 + pkg/kubectl/util/printers/tabwriter.go | 5 +++-- pkg/printers/BUILD | 1 + pkg/printers/humanreadable.go | 3 ++- pkg/printers/tabwriter.go | 5 +++-- 11 files changed, 30 insertions(+), 19 deletions(-) diff --git a/pkg/kubectl/cmd/config/BUILD b/pkg/kubectl/cmd/config/BUILD index 14396a1285..f47fcd00fb 100644 --- a/pkg/kubectl/cmd/config/BUILD +++ b/pkg/kubectl/cmd/config/BUILD @@ -41,6 +41,7 @@ go_library( "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd/api/latest:go_default_library", + "//vendor/github.com/liggitt/tabwriter:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) diff --git a/pkg/kubectl/cmd/config/get_contexts.go b/pkg/kubectl/cmd/config/get_contexts.go index 30f53db794..0e59ac3fc7 100644 --- a/pkg/kubectl/cmd/config/get_contexts.go +++ b/pkg/kubectl/cmd/config/get_contexts.go @@ -21,8 +21,8 @@ import ( "io" "sort" "strings" - "text/tabwriter" + "github.com/liggitt/tabwriter" "github.com/spf13/cobra" utilerrors "k8s.io/apimachinery/pkg/util/errors" diff --git a/pkg/kubectl/cmd/get/BUILD b/pkg/kubectl/cmd/get/BUILD index c63ccad3fd..3f15092e54 100644 --- a/pkg/kubectl/cmd/get/BUILD +++ b/pkg/kubectl/cmd/get/BUILD @@ -55,6 +55,7 @@ go_library( "//staging/src/k8s.io/client-go/tools/watch:go_default_library", "//staging/src/k8s.io/client-go/util/integer:go_default_library", "//staging/src/k8s.io/client-go/util/jsonpath:go_default_library", + "//vendor/github.com/liggitt/tabwriter:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/vbom.ml/util/sortorder:go_default_library", diff --git a/pkg/kubectl/cmd/get/customcolumn.go b/pkg/kubectl/cmd/get/customcolumn.go index 576d4995af..a5f6fa6dad 100644 --- a/pkg/kubectl/cmd/get/customcolumn.go +++ b/pkg/kubectl/cmd/get/customcolumn.go @@ -24,7 +24,8 @@ import ( "reflect" "regexp" "strings" - "text/tabwriter" + + "github.com/liggitt/tabwriter" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" diff --git a/pkg/kubectl/cmd/get/get.go b/pkg/kubectl/cmd/get/get.go index f25c5ef0c6..751b591a0f 100644 --- a/pkg/kubectl/cmd/get/get.go +++ b/pkg/kubectl/cmd/get/get.go @@ -537,6 +537,7 @@ func (o *GetOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e if shouldGetNewPrinterForMapping(printer, lastMapping, mapping) { w.Flush() + w.SetRememberedWidths(nil) // TODO: this doesn't belong here // add linebreak between resource groups (if there is more than one) @@ -654,10 +655,11 @@ func (o *GetOptions) watch(f cmdutil.Factory, cmd *cobra.Command, args []string) } } + writer := utilprinters.GetNewTabWriter(o.Out) + // print the current object if !o.WatchOnly { var objsToPrint []runtime.Object - writer := utilprinters.GetNewTabWriter(o.Out) if isList { objsToPrint, _ = meta.ExtractList(obj) @@ -702,9 +704,10 @@ func (o *GetOptions) watch(f cmdutil.Factory, cmd *cobra.Command, args []string) internalGV := mapping.GroupVersionKind.GroupKind().WithVersion(runtime.APIVersionInternal).GroupVersion() objToPrint = attemptToConvertToInternal(e.Object, legacyscheme.Scheme, internalGV) } - if err := printer.PrintObj(objToPrint, o.Out); err != nil { + if err := printer.PrintObj(objToPrint, writer); err != nil { return false, err } + writer.Flush() return false, nil }) return err diff --git a/pkg/kubectl/cmd/get/get_test.go b/pkg/kubectl/cmd/get/get_test.go index 9d12a89579..bb17fad5c9 100644 --- a/pkg/kubectl/cmd/get/get_test.go +++ b/pkg/kubectl/cmd/get/get_test.go @@ -1211,8 +1211,8 @@ func TestWatchLabelSelector(t *testing.T) { expected := `NAME READY STATUS RESTARTS AGE bar 0/0 0 foo 0/0 0 -foo 0/0 0 -foo 0/0 0 +foo 0/0 0 +foo 0/0 0 ` if e, a := expected, buf.String(); e != a { t.Errorf("expected\n%v\ngot\n%v", e, a) @@ -1262,8 +1262,8 @@ func TestWatchFieldSelector(t *testing.T) { expected := `NAME READY STATUS RESTARTS AGE bar 0/0 0 foo 0/0 0 -foo 0/0 0 -foo 0/0 0 +foo 0/0 0 +foo 0/0 0 ` if e, a := expected, buf.String(); e != a { t.Errorf("expected\n%v\ngot\n%v", e, a) @@ -1305,8 +1305,8 @@ func TestWatchResource(t *testing.T) { expected := `NAME READY STATUS RESTARTS AGE foo 0/0 0 -foo 0/0 0 -foo 0/0 0 +foo 0/0 0 +foo 0/0 0 ` if e, a := expected, buf.String(); e != a { t.Errorf("expected\n%v\ngot\n%v", e, a) @@ -1349,8 +1349,8 @@ func TestWatchResourceIdentifiedByFile(t *testing.T) { expected := `NAME READY STATUS RESTARTS AGE foo 0/0 0 -foo 0/0 0 -foo 0/0 0 +foo 0/0 0 +foo 0/0 0 ` if e, a := expected, buf.String(); e != a { t.Errorf("expected\n%v\ngot\n%v", e, a) @@ -1392,7 +1392,7 @@ func TestWatchOnlyResource(t *testing.T) { expected := `NAME READY STATUS RESTARTS AGE foo 0/0 0 -foo 0/0 0 +foo 0/0 0 ` if e, a := expected, buf.String(); e != a { t.Errorf("expected\n%v\ngot\n%v", e, a) @@ -1437,7 +1437,7 @@ func TestWatchOnlyList(t *testing.T) { expected := `NAME READY STATUS RESTARTS AGE foo 0/0 0 -foo 0/0 0 +foo 0/0 0 ` if e, a := expected, buf.String(); e != a { t.Errorf("expected\n%v\ngot\n%v", e, a) diff --git a/pkg/kubectl/util/printers/BUILD b/pkg/kubectl/util/printers/BUILD index 80a8c446ee..1687a952ea 100644 --- a/pkg/kubectl/util/printers/BUILD +++ b/pkg/kubectl/util/printers/BUILD @@ -5,6 +5,7 @@ go_library( srcs = ["tabwriter.go"], importpath = "k8s.io/kubernetes/pkg/kubectl/util/printers", visibility = ["//visibility:public"], + deps = ["//vendor/github.com/liggitt/tabwriter:go_default_library"], ) filegroup( diff --git a/pkg/kubectl/util/printers/tabwriter.go b/pkg/kubectl/util/printers/tabwriter.go index aadb888b7e..f0ebb5dda0 100644 --- a/pkg/kubectl/util/printers/tabwriter.go +++ b/pkg/kubectl/util/printers/tabwriter.go @@ -18,7 +18,8 @@ package printers import ( "io" - "text/tabwriter" + + "github.com/liggitt/tabwriter" ) const ( @@ -26,7 +27,7 @@ const ( tabwriterWidth = 4 tabwriterPadding = 3 tabwriterPadChar = ' ' - tabwriterFlags = 0 + tabwriterFlags = tabwriter.RememberWidths ) // GetNewTabWriter returns a tabwriter that translates tabbed columns in input into properly aligned text. diff --git a/pkg/printers/BUILD b/pkg/printers/BUILD index 4c9f9e647a..3f1134b1b0 100644 --- a/pkg/printers/BUILD +++ b/pkg/printers/BUILD @@ -23,6 +23,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//vendor/github.com/liggitt/tabwriter:go_default_library", ], ) diff --git a/pkg/printers/humanreadable.go b/pkg/printers/humanreadable.go index bf4a761a4f..5e51fb335c 100644 --- a/pkg/printers/humanreadable.go +++ b/pkg/printers/humanreadable.go @@ -22,7 +22,8 @@ import ( "io" "reflect" "strings" - "text/tabwriter" + + "github.com/liggitt/tabwriter" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/pkg/printers/tabwriter.go b/pkg/printers/tabwriter.go index d1d4cb53fc..21d60e1c41 100644 --- a/pkg/printers/tabwriter.go +++ b/pkg/printers/tabwriter.go @@ -18,7 +18,8 @@ package printers import ( "io" - "text/tabwriter" + + "github.com/liggitt/tabwriter" ) const ( @@ -26,7 +27,7 @@ const ( tabwriterWidth = 4 tabwriterPadding = 3 tabwriterPadChar = ' ' - tabwriterFlags = 0 + tabwriterFlags = tabwriter.RememberWidths ) // GetNewTabWriter returns a tabwriter that translates tabbed columns in input into properly aligned text.