diff --git a/cmd/podman/artifact/list.go b/cmd/podman/artifact/list.go index 31a4d40001a..d5787486c63 100644 --- a/cmd/podman/artifact/list.go +++ b/cmd/podman/artifact/list.go @@ -35,6 +35,7 @@ type listFlagType struct { format string noHeading bool noTrunc bool + quiet bool } type artifactListOutput struct { @@ -76,6 +77,7 @@ func init() { _ = listCmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(&artifactListOutput{})) flags.BoolVarP(&listFlag.noHeading, "noheading", "n", false, "Do not print column headings") flags.BoolVar(&listFlag.noTrunc, "no-trunc", false, "Do not truncate output") + flags.BoolVarP(&listFlag.quiet, "quiet", "q", false, "Display only artifact digests") } func list(cmd *cobra.Command, _ []string) error { @@ -137,6 +139,13 @@ func outputTemplate(cmd *cobra.Command, lrs []*entities.ArtifactListReport) erro }) } + if listFlag.quiet && !cmd.Flags().Changed("format") { + for _, a := range artifacts { + fmt.Println(a.Digest) + } + return nil + } + headers := report.Headers(artifactListOutput{}, map[string]string{ "REPOSITORY": "REPOSITORY", "Tag": "TAG", diff --git a/docs/source/markdown/podman-artifact-ls.1.md.in b/docs/source/markdown/podman-artifact-ls.1.md.in index 541d51ba5cc..b37fe0df9a1 100644 --- a/docs/source/markdown/podman-artifact-ls.1.md.in +++ b/docs/source/markdown/podman-artifact-ls.1.md.in @@ -30,6 +30,10 @@ Print results with a Go template. @@option noheading +#### **--quiet**, **-q** + +Lists only the artifact digests. + ## EXAMPLES List artifacts in the local store @@ -62,6 +66,13 @@ ab609fad386d 2.097GB cd734b558ceb 12.58MB ``` +List only artifact digests +``` +$ podman artifact ls --quiet +ab609fad386d +cd734b558ceb +``` + ## SEE ALSO diff --git a/test/e2e/artifact_test.go b/test/e2e/artifact_test.go index 4eb4f96abe5..d5488dfd02d 100644 --- a/test/e2e/artifact_test.go +++ b/test/e2e/artifact_test.go @@ -68,6 +68,16 @@ var _ = Describe("Podman artifact", func() { Expect(noHeaderOutput).To(HaveLen(2)) Expect(noHeaderOutput).ToNot(ContainElement("REPOSITORY")) + // check with --quiet and verify only the (truncated) digests are printed + quietSession := podmanTest.PodmanExitCleanly("artifact", "ls", "--quiet") + quietOutput := quietSession.OutputToStringArray() + Expect(quietOutput).To(HaveLen(2)) + Expect(quietOutput).ToNot(ContainElement("REPOSITORY")) + Expect(quietOutput).To(ContainElement(defaultOutput)) + for _, digest := range quietOutput { + Expect(digest).To(HaveLen(12)) + } + // Check if .VirtualSize is reported correctly virtualSizeFormatSession := podmanTest.PodmanExitCleanly("artifact", "ls", "--format", "{{.VirtualSize}}") virtualSizes := virtualSizeFormatSession.OutputToStringArray()