From 058c098c8ceb5c0f59b551ce26a187322e555ede Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Wed, 5 Mar 2025 21:30:50 -0800 Subject: [PATCH] history: allow index based inspect of builds Signed-off-by: Tonis Tiigi --- commands/history/inspect.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/commands/history/inspect.go b/commands/history/inspect.go index 0dbfe21e..97fefd5c 100644 --- a/commands/history/inspect.go +++ b/commands/history/inspect.go @@ -173,6 +173,16 @@ func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) } } + var offset *int + if strings.HasPrefix(opts.ref, "^") { + off, err := strconv.Atoi(opts.ref[1:]) + if err != nil { + return errors.Wrapf(err, "invalid offset %q", opts.ref) + } + offset = &off + opts.ref = "" + } + recs, err := queryRecords(ctx, opts.ref, nodes) if err != nil { return err @@ -185,14 +195,26 @@ func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) return errors.Errorf("no record found for ref %q", opts.ref) } + var rec *historyRecord if opts.ref == "" { slices.SortFunc(recs, func(a, b historyRecord) int { return b.CreatedAt.AsTime().Compare(a.CreatedAt.AsTime()) }) + for _, r := range recs { + if offset != nil { + if *offset > 0 { + *offset-- + continue + } + } + rec = &r + break + } + if offset != nil && *offset > 0 { + return errors.Errorf("no completed build found with offset %d", *offset) + } } - rec := &recs[0] - c, err := rec.node.Driver.Client(ctx) if err != nil { return err