summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/podman/cliconfig/config.go1
-rw-r--r--cmd/podman/diff.go15
-rw-r--r--test/e2e/diff_test.go14
3 files changed, 28 insertions, 2 deletions
diff --git a/cmd/podman/cliconfig/config.go b/cmd/podman/cliconfig/config.go
index 4a4c839cc..e3e2edb95 100644
--- a/cmd/podman/cliconfig/config.go
+++ b/cmd/podman/cliconfig/config.go
@@ -113,6 +113,7 @@ type DiffValues struct {
PodmanCommand
Archive bool
Format string
+ Latest bool
}
type ExecValues struct {
diff --git a/cmd/podman/diff.go b/cmd/podman/diff.go
index 9543113d8..032c0f2c0 100644
--- a/cmd/podman/diff.go
+++ b/cmd/podman/diff.go
@@ -60,8 +60,10 @@ func init() {
flags.BoolVar(&diffCommand.Archive, "archive", true, "Save the diff as a tar archive")
flags.StringVar(&diffCommand.Format, "format", "", "Change the output format")
+ flags.BoolVarP(&diffCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
flags.MarkHidden("archive")
+ markFlagHiddenForRemoteClient("latest", flags)
}
@@ -83,7 +85,7 @@ func formatJSON(output []diffOutputParams) (diffJSONOutput, error) {
}
func diffCmd(c *cliconfig.DiffValues) error {
- if len(c.InputArgs) != 1 {
+ if len(c.InputArgs) != 1 && !c.Latest {
return errors.Errorf("container, image, or layer name must be specified: podman diff [options [...]] ID-NAME")
}
@@ -93,7 +95,16 @@ func diffCmd(c *cliconfig.DiffValues) error {
}
defer runtime.Shutdown(false)
- to := c.InputArgs[0]
+ var to string
+ if c.Latest {
+ ctr, err := runtime.GetLatestContainer()
+ if err != nil {
+ return errors.Wrapf(err, "unable to get latest container")
+ }
+ to = ctr.ID()
+ } else {
+ to = c.InputArgs[0]
+ }
changes, err := runtime.Diff(c, to)
if err != nil {
return errors.Wrapf(err, "could not get changes for %q", to)
diff --git a/test/e2e/diff_test.go b/test/e2e/diff_test.go
index 0f53d9bc8..d273f9463 100644
--- a/test/e2e/diff_test.go
+++ b/test/e2e/diff_test.go
@@ -80,4 +80,18 @@ var _ = Describe("Podman diff", func() {
sort.Strings(imageDiff)
Expect(imageDiff).To(Equal(containerDiff))
})
+
+ It("podman diff latest container", func() {
+ SkipIfRemote()
+ session := podmanTest.Podman([]string{"run", "--name=diff-test", ALPINE, "touch", "/tmp/diff-test"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ session = podmanTest.Podman([]string{"diff", "-l"})
+ session.WaitWithDefaultTimeout()
+ containerDiff := session.OutputToStringArray()
+ sort.Strings(containerDiff)
+ Expect(session.LineInOutputContains("C /tmp")).To(BeTrue())
+ Expect(session.LineInOutputContains("A /tmp/diff-test")).To(BeTrue())
+ Expect(session.ExitCode()).To(Equal(0))
+ })
})