mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 10:03:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package commands
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"log"
 | 
						|
	"os"
 | 
						|
 | 
						|
	"github.com/docker/buildx/build"
 | 
						|
	"github.com/docker/docker/api/types/versions"
 | 
						|
	"github.com/moby/buildkit/frontend/subrequests"
 | 
						|
	"github.com/moby/buildkit/frontend/subrequests/outline"
 | 
						|
	"github.com/moby/buildkit/frontend/subrequests/targets"
 | 
						|
)
 | 
						|
 | 
						|
func printResult(f *build.PrintFunc, res map[string]string) error {
 | 
						|
	switch f.Name {
 | 
						|
	case "outline":
 | 
						|
		return printValue(outline.PrintOutline, outline.SubrequestsOutlineDefinition.Version, f.Format, res)
 | 
						|
	case "targets":
 | 
						|
		return printValue(targets.PrintTargets, targets.SubrequestsTargetsDefinition.Version, f.Format, res)
 | 
						|
	case "subrequests.describe":
 | 
						|
		return printValue(subrequests.PrintDescribe, subrequests.SubrequestsDescribeDefinition.Version, f.Format, res)
 | 
						|
	default:
 | 
						|
		if dt, ok := res["result.txt"]; ok {
 | 
						|
			fmt.Print(dt)
 | 
						|
		} else {
 | 
						|
			log.Printf("%s %+v", f, res)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
type printFunc func([]byte, io.Writer) error
 | 
						|
 | 
						|
func printValue(printer printFunc, version string, format string, res map[string]string) error {
 | 
						|
	if format == "json" {
 | 
						|
		fmt.Fprintln(os.Stdout, res["result.json"])
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
 | 
						|
	if res["version"] != "" && versions.LessThan(version, res["version"]) && res["result.txt"] != "" {
 | 
						|
		// structure is too new and we don't know how to print it
 | 
						|
		fmt.Fprint(os.Stdout, res["result.txt"])
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
	return printer([]byte(res["result.json"]), os.Stdout)
 | 
						|
}
 |