|  |  | @ -5,15 +5,16 @@ import ( | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"io" |  |  |  | 	"io" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"os" |  |  |  | 	"os" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"text/tabwriter" |  |  |  | 	"text/tabwriter" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	"time" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/docker/buildx/build" |  |  |  | 	"github.com/docker/buildx/build" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/docker/cli/cli" |  |  |  | 	"github.com/docker/cli/cli" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/docker/cli/cli/command" |  |  |  | 	"github.com/docker/cli/cli/command" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/docker/cli/opts" |  |  |  | 	"github.com/docker/cli/opts" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	"github.com/docker/go-units" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/moby/buildkit/client" |  |  |  | 	"github.com/moby/buildkit/client" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/moby/buildkit/util/appcontext" |  |  |  | 	"github.com/moby/buildkit/util/appcontext" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/spf13/cobra" |  |  |  | 	"github.com/spf13/cobra" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"github.com/tonistiigi/units" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"golang.org/x/sync/errgroup" |  |  |  | 	"golang.org/x/sync/errgroup" | 
			
		
	
		
		
			
				
					
					|  |  |  | ) |  |  |  | ) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -132,13 +133,13 @@ func printVerbose(tw *tabwriter.Writer, du []*client.UsageInfo) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		printKV(tw, "Mutable", di.Mutable) |  |  |  | 		printKV(tw, "Mutable", di.Mutable) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		printKV(tw, "Reclaimable", !di.InUse) |  |  |  | 		printKV(tw, "Reclaimable", !di.InUse) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		printKV(tw, "Shared", di.Shared) |  |  |  | 		printKV(tw, "Shared", di.Shared) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		printKV(tw, "Size", fmt.Sprintf("%.2f", units.Bytes(di.Size))) |  |  |  | 		printKV(tw, "Size", units.HumanSize(float64(di.Size))) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		if di.Description != "" { |  |  |  | 		if di.Description != "" { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			printKV(tw, "Description", di.Description) |  |  |  | 			printKV(tw, "Description", di.Description) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		printKV(tw, "Usage count", di.UsageCount) |  |  |  | 		printKV(tw, "Usage count", di.UsageCount) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if di.LastUsedAt != nil { |  |  |  | 		if di.LastUsedAt != nil { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			printKV(tw, "Last used", di.LastUsedAt) |  |  |  | 			printKV(tw, "Last used", units.HumanDuration(time.Since(*di.LastUsedAt))+" ago") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if di.RecordType != "" { |  |  |  | 		if di.RecordType != "" { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			printKV(tw, "Type", di.RecordType) |  |  |  | 			printKV(tw, "Type", di.RecordType) | 
			
		
	
	
		
		
			
				
					|  |  | @ -159,11 +160,15 @@ func printTableRow(tw *tabwriter.Writer, di *client.UsageInfo) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if di.Mutable { |  |  |  | 	if di.Mutable { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		id += "*" |  |  |  | 		id += "*" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	size := fmt.Sprintf("%.2f", units.Bytes(di.Size)) |  |  |  | 	size := units.HumanSize(float64(di.Size)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	if di.Shared { |  |  |  | 	if di.Shared { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		size += "*" |  |  |  | 		size += "*" | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	fmt.Fprintf(tw, "%-71s\t%-11v\t%s\t\n", id, !di.InUse, size) |  |  |  | 	lastAccessed := "" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	if di.LastUsedAt != nil { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		lastAccessed = units.HumanDuration(time.Since(*di.LastUsedAt)) + " ago" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	fmt.Fprintf(tw, "%-40s\t%-5v\t%-10s\t%s\n", id, !di.InUse, size, lastAccessed) | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | func printSummary(tw *tabwriter.Writer, dus [][]*client.UsageInfo) { |  |  |  | func printSummary(tw *tabwriter.Writer, dus [][]*client.UsageInfo) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -186,11 +191,11 @@ func printSummary(tw *tabwriter.Writer, dus [][]*client.UsageInfo) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if shared > 0 { |  |  |  | 	if shared > 0 { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		fmt.Fprintf(tw, "Shared:\t%.2f\n", units.Bytes(shared)) |  |  |  | 		fmt.Fprintf(tw, "Shared:\t%s\n", units.HumanSize(float64(shared))) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		fmt.Fprintf(tw, "Private:\t%.2f\n", units.Bytes(total-shared)) |  |  |  | 		fmt.Fprintf(tw, "Private:\t%s\n", units.HumanSize(float64(total-shared))) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	fmt.Fprintf(tw, "Reclaimable:\t%.2f\n", units.Bytes(reclaimable)) |  |  |  | 	fmt.Fprintf(tw, "Reclaimable:\t%s\n", units.HumanSize(float64(reclaimable))) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	fmt.Fprintf(tw, "Total:\t%.2f\n", units.Bytes(total)) |  |  |  | 	fmt.Fprintf(tw, "Total:\t%s\n", units.HumanSize(float64(total))) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	tw.Flush() |  |  |  | 	tw.Flush() | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |