DockerCLI/cli/command
Sebastiaan van Stijn 4c25f6ce95
implement treewriter
Nothing mergeable here, but this was me playing around; initially to see
if we could print the format such as suggested in https://github.com/docker/cli/issues/5560#issuecomment-2437212303

That output is shown in `TestTree`:

    IMAGE/TAGS ID                                    DISK USAGE          CONTENT SIZE        USED
    alpine:latest                                    beefdbd8a1da        13.6MB              4.09MB
    ├─ linux/amd64                                   33735bd63cf8        0B                  0B
    ├─ linux/arm/v6                                  50f635c8b04d        0B                  0B
    ├─ linux/arm/v7                                  f2f82d424957        0B                  0B
    ├─ linux/arm64/v8                                9cee2b382fe2        13.6MB              4.09MB
    ├─ linux/386                                     b3e87f642f5c        0B                  0B
    ├─ linux/ppc64le                                 c7a6800e3dc5        0B                  0B
    ├─ linux/riscv64                                 80cde017a105        0B                  0B
    └─ linux/s390x                                   2b5b26e09ca2        0B                  0B

    namespace/image                                  beefdbd8a1da        13.6MB              4.09MB
    ├─ namespace/image:1                             beefdbd8a1da        -                   -
    ├─ namespace/image:1.0                           beefdbd8a1da        -                   -
    ├─ namespace/image:1.0.0                         beefdbd8a1da        -                   -
    └─ namespace/image:latest                        beefdbd8a1da        -                   -
       ├─ linux/amd64                                33735bd63cf8        0B                  0B
       ├─ linux/arm/v6                               50f635c8b04d        0B                  0B
       ├─ linux/arm/v7                               f2f82d424957        0B                  0B
       ├─ linux/arm64/v8                             9cee2b382fe2        13.6MB              4.09MB
       ├─ linux/386                                  b3e87f642f5c        0B                  0B
       ├─ linux/ppc64le                              c7a6800e3dc5        0B                  0B
       ├─ linux/riscv64                              80cde017a105        0B                  0B
       └─ linux/s390x                                2b5b26e09ca2        0B                  0B

    internal.example.com/namespace/image             beefdbd8a1da        13.6MB              4.09MB
    ├─ internal.example.com/namespace/image:1        beefdbd8a1da        -                   -
    ├─ internal.example.com/namespace/image:1.0      beefdbd8a1da        -                   -
    ├─ internal.example.com/namespace/image:1.0.0    beefdbd8a1da        -                   -
    └─ internal.example.com/namespace/image:latest   beefdbd8a1da        -                   -
       ├─ linux/amd64                                33735bd63cf8        0B                  0B
       ├─ linux/arm/v6                               50f635c8b04d        0B                  0B
       ├─ linux/arm/v7                               f2f82d424957        0B                  0B
       ├─ linux/arm64/v8                             9cee2b382fe2        13.6MB              4.09MB
       ├─ linux/386                                  b3e87f642f5c        0B                  0B
       ├─ linux/ppc64le                              c7a6800e3dc5        0B                  0B
       ├─ linux/riscv64                              80cde017a105        0B                  0B
       └─ linux/s390x                                2b5b26e09ca2        0B                  0B

And `TestTreeNoTrunc` (non-truncated):

    IMAGE/TAGS ID                                    DISK USAGE                                                                CONTENT SIZE        USED
    alpine:latest                                    sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   13.6MB              4.09MB
    ├─ linux/amd64                                   sha256:33735bd63cf84d7e388d9f6d297d348c523c044410f553bd878c6d7829612735   0B                  0B
    ├─ linux/arm/v6                                  sha256:50f635c8b04d86dde8a02bcd8d667ba287eb8b318c1c0cf547e5a48ddadea1be   0B                  0B
    ├─ linux/arm/v7                                  sha256:f2f82d42495723c4dc508fd6b0978a5d7fe4efcca4282e7aae5e00bcf4057086   0B                  0B
    ├─ linux/arm64/v8                                sha256:9cee2b382fe2412cd77d5d437d15a93da8de373813621f2e4d406e3df0cf0e7c   13.6MB              4.09MB
    ├─ linux/386                                     sha256:b3e87f642f5c48cdc7556c3e03a0d63916bd0055ba6edba7773df3cb1a76f224   0B                  0B
    ├─ linux/ppc64le                                 sha256:c7a6800e3dc569a2d6e90627a2988f2a7339e6f111cdf6a0054ad1ff833e99b0   0B                  0B
    ├─ linux/riscv64                                 sha256:80cde017a10529a18a7274f70c687bb07c4969980ddfb35a1b921fda3a020e5b   0B                  0B
    └─ linux/s390x                                   sha256:2b5b26e09ca2856f50ac88312348d26c1ac4b8af1df9f580e5cf465fd76e3d4d   0B                  0B

    namespace/image                                  sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   13.6MB              4.09MB
    ├─ namespace/image:1                             sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
    ├─ namespace/image:1.0                           sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
    ├─ namespace/image:1.0.0                         sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
    └─ namespace/image:latest                        sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
       ├─ linux/amd64                                sha256:33735bd63cf84d7e388d9f6d297d348c523c044410f553bd878c6d7829612735   0B                  0B
       ├─ linux/arm/v6                               sha256:50f635c8b04d86dde8a02bcd8d667ba287eb8b318c1c0cf547e5a48ddadea1be   0B                  0B
       ├─ linux/arm/v7                               sha256:f2f82d42495723c4dc508fd6b0978a5d7fe4efcca4282e7aae5e00bcf4057086   0B                  0B
       ├─ linux/arm64/v8                             sha256:9cee2b382fe2412cd77d5d437d15a93da8de373813621f2e4d406e3df0cf0e7c   13.6MB              4.09MB
       ├─ linux/386                                  sha256:b3e87f642f5c48cdc7556c3e03a0d63916bd0055ba6edba7773df3cb1a76f224   0B                  0B
       ├─ linux/ppc64le                              sha256:c7a6800e3dc569a2d6e90627a2988f2a7339e6f111cdf6a0054ad1ff833e99b0   0B                  0B
       ├─ linux/riscv64                              sha256:80cde017a10529a18a7274f70c687bb07c4969980ddfb35a1b921fda3a020e5b   0B                  0B
       └─ linux/s390x                                sha256:2b5b26e09ca2856f50ac88312348d26c1ac4b8af1df9f580e5cf465fd76e3d4d   0B                  0B

    internal.example.com/namespace/image             sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   13.6MB              4.09MB
    ├─ internal.example.com/namespace/image:1        sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
    ├─ internal.example.com/namespace/image:1.0      sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
    ├─ internal.example.com/namespace/image:1.0.0    sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
    └─ internal.example.com/namespace/image:latest   sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d   -                   -
       ├─ linux/amd64                                sha256:33735bd63cf84d7e388d9f6d297d348c523c044410f553bd878c6d7829612735   0B                  0B
       ├─ linux/arm/v6                               sha256:50f635c8b04d86dde8a02bcd8d667ba287eb8b318c1c0cf547e5a48ddadea1be   0B                  0B
       ├─ linux/arm/v7                               sha256:f2f82d42495723c4dc508fd6b0978a5d7fe4efcca4282e7aae5e00bcf4057086   0B                  0B
       ├─ linux/arm64/v8                             sha256:9cee2b382fe2412cd77d5d437d15a93da8de373813621f2e4d406e3df0cf0e7c   13.6MB              4.09MB
       ├─ linux/386                                  sha256:b3e87f642f5c48cdc7556c3e03a0d63916bd0055ba6edba7773df3cb1a76f224   0B                  0B
       ├─ linux/ppc64le                              sha256:c7a6800e3dc569a2d6e90627a2988f2a7339e6f111cdf6a0054ad1ff833e99b0   0B                  0B
       ├─ linux/riscv64                              sha256:80cde017a10529a18a7274f70c687bb07c4969980ddfb35a1b921fda3a020e5b   0B                  0B
       └─ linux/s390x                                sha256:2b5b26e09ca2856f50ac88312348d26c1ac4b8af1df9f580e5cf465fd76e3d4d   0B                  0B

The above is all without the nice color-formatting etc, but this would be handled
before this;

The second bit was to see if we could make the tree output more align
with other output formats;

- Most of our commands allow passing a `--format`, including for (e.g.) `table`
- We want the tree view to also support, e.g. `--no-trunc`, which means that
  some columns will be wider.
- If we use a tabwriter for printing, we can have it handle the column-sizing
  for us.
- And if we do, we could let the user pass a custom format, and still print
  it as a tree.

e.g., a format could be;

    --format 'tree {.Image}}\t{{.Digest}}\t{{.InUse}}'

Which would output something like

    IMAGE                   ID             USED
    alpine:latest           beefdbd8a1da    ✔
    ├─ linux/amd64          33735bd63cf8
    ├─ linux/arm/v6         50f635c8b04d
    ├─ linux/arm/v7         f2f82d424957
    ├─ linux/arm64/v8       9cee2b382fe2    ✔
    ├─ linux/386            b3e87f642f5c
    ├─ linux/ppc64le        c7a6800e3dc5
    ├─ linux/riscv64        80cde017a105
    └─ linux/s390x          2b5b26e09ca2

The `TestTree` implementation is really quirky though, as it uses a `[][]string`,
which won't work well if we want to make it more generic (with an "unknown"
depth); probably needs some type defined that has an optional slice for child
rows; those child-rows can be pre-formatted.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-10-28 13:56:38 +01:00
..
builder test spring-cleaning 2024-07-04 01:35:12 +02:00
checkpoint cli: improve argument validation output 2024-07-05 03:35:14 +02:00
commands remove exec, push, pull, ps, images, info from "legacy" commands 2022-04-08 16:55:39 +02:00
completion completion: add test for VolumeNames 2024-10-13 19:08:56 +02:00
config cli: improve argument validation output 2024-07-05 03:35:14 +02:00
container cli/command/container: TestWaitExitOrRemoved use subtests 2024-10-16 12:03:17 +02:00
context Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
formatter implement treewriter 2024-10-28 13:56:38 +01:00
idresolver Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
image image/history: Add `--platform` flag 2024-10-10 17:00:43 +02:00
inspect Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
manifest cli/command: fix n-constant format string in call (govet) 2024-08-26 13:52:49 +02:00
network Check that --ip-range is a CIDR address 2024-09-26 20:38:33 +01:00
node cli: improve argument validation output 2024-07-05 03:35:14 +02:00
plugin cli/command/plugins: use errors.Join instead of custom cli.Errors 2024-10-19 10:32:54 +02:00
registry cli/command/registry: fix minor linting issues 2024-10-20 17:51:12 +02:00
secret cli: improve argument validation output 2024-07-05 03:35:14 +02:00
service cli/command: fix n-constant format string in call (govet) 2024-08-26 13:52:49 +02:00
stack cli/command: fix n-constant format string in call (govet) 2024-08-26 13:52:49 +02:00
swarm cli: improve argument validation output 2024-07-05 03:35:14 +02:00
system docker inspect: add support for swarm configs 2024-10-24 18:32:32 +02:00
task linting: address slice-append issues found by gocritic 2023-11-20 16:02:17 +01:00
testdata Dynamically register kubernetes context store endpoint type. 2019-05-20 13:28:11 +01:00
trust cli: improve argument validation output 2024-07-05 03:35:14 +02:00
volume align "conflicting options" errors for consistency 2024-10-01 12:08:56 +02:00
cli.go align "conflicting options" errors for consistency 2024-10-01 12:08:56 +02:00
cli_options.go add support for DOCKER_CUSTOM_HEADERS env-var (experimental) 2024-07-19 15:04:26 +02:00
cli_options_test.go golangci-lint: enable thelper linter 2023-11-20 16:02:17 +01:00
cli_test.go add support for DOCKER_CUSTOM_HEADERS env-var (experimental) 2024-07-19 15:04:26 +02:00
context.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
context_test.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
defaultcontextstore.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
defaultcontextstore_test.go Update go:build comments to go1.21 2024-06-18 12:17:13 +02:00
registry.go Merge pull request #5550 from thaJeztah/login_minor_refactor 2024-10-21 23:23:06 +02:00
registry_test.go linting: fmt.Sprintf can be replaced with string concatenation (perfsprint) 2024-06-10 21:19:32 +02:00
telemetry.go OTel: implement missing MeterProvider `ForceFlush` 2024-05-15 00:05:31 +01:00
telemetry_docker.go command: change drive to lowercase for wsl path 2024-09-18 10:59:08 +01:00
telemetry_docker_test.go command: change drive to lowercase for wsl path 2024-09-18 10:59:08 +01:00
telemetry_options.go cli: make initializing the global meter- and tracing providers optional 2024-06-24 15:44:20 +02:00
telemetry_utils.go telemetry: pass otel errors to the otel handler for shutdown and force flush 2024-09-17 10:47:04 -05:00
telemetry_utils_test.go cli: Wrap Err stream 2024-06-11 17:59:48 +02:00
trust.go Refactor content_trust cli/flags handling 2018-03-08 15:00:43 -05:00
utils.go cli/command: AddPlatformFlag: suppress unhandled error 2024-10-20 17:51:36 +02:00
utils_test.go fix: ctx cancellation on login prompt 2024-07-02 12:07:16 +02:00