From 4988424fc0c459f5a07ce1cd1d5f39fa6ebf39f1 Mon Sep 17 00:00:00 2001 From: Peng Wang Date: Sun, 14 Jul 2019 07:06:04 -0400 Subject: [PATCH] * fix: view snapshot is deleted before diff Signed-off-by: Peng Wang --- cmd/ctr/commands/snapshots/snapshots.go | 27 +++++++++---------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/cmd/ctr/commands/snapshots/snapshots.go b/cmd/ctr/commands/snapshots/snapshots.go index f8b16bce5..10e1c61bb 100644 --- a/cmd/ctr/commands/snapshots/snapshots.go +++ b/cmd/ctr/commands/snapshots/snapshots.go @@ -150,18 +150,11 @@ var diffCommand = cli.Command{ return err } } else { - var a, b []mount.Mount - ds := client.DiffService() - - a, err = getMounts(ctx, idA, snapshotter) - if err != nil { - return err - } - b, err = getMounts(ctx, idB, snapshotter) - if err != nil { - return err - } - desc, err = ds.Compare(ctx, a, b, opts...) + desc, err = withMounts(ctx, idA, snapshotter, func(a []mount.Mount) (ocispec.Descriptor, error) { + return withMounts(ctx, idB, snapshotter, func(b []mount.Mount) (ocispec.Descriptor, error) { + return client.DiffService().Compare(ctx, a, b, opts...) + }) + }) if err != nil { return err } @@ -177,26 +170,26 @@ var diffCommand = cli.Command{ }, } -func getMounts(ctx gocontext.Context, id string, sn snapshots.Snapshotter) ([]mount.Mount, error) { +func withMounts(ctx gocontext.Context, id string, sn snapshots.Snapshotter, f func(mounts []mount.Mount) (ocispec.Descriptor, error)) (ocispec.Descriptor, error) { var mounts []mount.Mount info, err := sn.Stat(ctx, id) if err != nil { - return nil, err + return ocispec.Descriptor{}, err } if info.Kind == snapshots.KindActive { mounts, err = sn.Mounts(ctx, id) if err != nil { - return nil, err + return ocispec.Descriptor{}, err } } else { key := fmt.Sprintf("%s-view-key", id) mounts, err = sn.View(ctx, key, id) if err != nil { - return nil, err + return ocispec.Descriptor{}, err } defer sn.Remove(ctx, key) } - return mounts, nil + return f(mounts) } var usageCommand = cli.Command{