X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fxds%2Fxds-cli.git;a=blobdiff_plain;f=cmd-sdks.go;h=00052156b498ac157aec5272a1bda2f2fcb1ed5d;hp=066e1dd531a65588aa54f56754c6549d22a4de3d;hb=3b5e82b55433fd49cfe0cd0349756e0c2e9a9c12;hpb=93f0511c5e5a215d27025510cf430c49ecf506cc diff --git a/cmd-sdks.go b/cmd-sdks.go index 066e1dd..0005215 100644 --- a/cmd-sdks.go +++ b/cmd-sdks.go @@ -22,6 +22,7 @@ import ( "fmt" "os" "regexp" + "sort" "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xaapiv1" "github.com/urfave/cli" @@ -89,6 +90,10 @@ func initCmdSdks(cmdDef *[]cli.Command) { Name: "force", Usage: "force SDK installation when already installed", }, + cli.BoolFlag{ + Name: "short, s", + Usage: "short output, only print create sdk id (useful from scripting)", + }, }, }, { @@ -137,7 +142,7 @@ func sdksList(ctx *cli.Context) error { } func sdksGet(ctx *cli.Context) error { - id := GetID(ctx) + id := GetID(ctx, "XDS_SDK_ID") if id == "" { return cli.NewExitError("id parameter or option must be set", 1) } @@ -182,7 +187,8 @@ func _displaySdks(sdks []xaapiv1.SDK, verbose bool, all bool, filter string) { fmt.Fprintln(writer, "Version\t"+s.Version) fmt.Fprintln(writer, "Status\t"+s.Status) fmt.Fprintln(writer, "Path\t"+s.Path) - fmt.Fprintln(writer, "Url\t"+s.URL) + fmt.Fprintln(writer, "Url\t"+formatURL(s.URL)) + fmt.Fprintln(writer, "Image Url\t"+formatURL(s.ImageURL)) } else { if first { @@ -200,6 +206,14 @@ func _displaySdks(sdks []xaapiv1.SDK, verbose bool, all bool, filter string) { writer.Flush() } +// Sort SDKs by ID +type _SdkByID []xaapiv1.SDK + +func (s _SdkByID) Len() int { return len(s) } +func (s _SdkByID) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s _SdkByID) Less(i, j int) bool { return s[i].ID < s[j].ID } + +// _sdksListGet Get the list of existing sdks func _sdksListGet(sdks *[]xaapiv1.SDK) error { url := XdsServerComputeURL("/sdks") if err := HTTPCli.Get(url, &sdks); err != nil { @@ -207,13 +221,16 @@ func _sdksListGet(sdks *[]xaapiv1.SDK) error { } Log.Debugf("Result of %s: %v", url, sdks) + sort.Sort(_SdkByID(*sdks)) + return nil } func sdksInstall(ctx *cli.Context) error { - id := GetID(ctx) + id := GetID(ctx, "XDS_SDK_ID") file := ctx.String("file") force := ctx.Bool("force") + shortOut := ctx.Bool("short") if id == "" && file == "" { return cli.NewExitError("id or file parameter or option must be set", 1) @@ -226,7 +243,7 @@ func sdksInstall(ctx *cli.Context) error { } exitChan := make(chan exitResult, 1) - IOsk.On("disconnection", func(err error) { + IOSkClient.On("disconnection", func(err error) { Log.Debugf("WS disconnection event with err: %v\n", err) errMsg := "" if err != nil { @@ -235,14 +252,19 @@ func sdksInstall(ctx *cli.Context) error { exitChan <- exitResult{errMsg, 2} }) - IOsk.On(xaapiv1.EVTSDKInstall, func(ev xaapiv1.EventMsg) { - sdkEvt, _ := ev.DecodeSDKMsg() + IOSkClient.On(xaapiv1.EVTSDKManagement, func(ev xaapiv1.EventMsg) { + sdkEvt, _ := ev.DecodeSDKMgtMsg() + + if sdkEvt.Action != xaapiv1.SdkMgtActionInstall { + Log.Debugf("EVTSDKManagement (action %s) IGNORED", sdkEvt.Action) + return + } - if sdkEvt.Stdout != "" { - fmt.Printf("%s", sdkEvt.Stdout) + if !shortOut && len(sdkEvt.Stdout) > 0 { + os.Stdout.Write([]byte(sdkEvt.Stdout)) } - if sdkEvt.Stderr != "" { - fmt.Fprintf(os.Stderr, "%s", sdkEvt.Stderr) + if !shortOut && len(sdkEvt.Stderr) > 0 { + os.Stderr.Write([]byte(sdkEvt.Stderr)) } if sdkEvt.Exited { @@ -250,7 +272,12 @@ func sdksInstall(ctx *cli.Context) error { } }) - evReg := xaapiv1.EventRegisterArgs{Name: xaapiv1.EVTSDKInstall} + IOSkClient.On(xaapiv1.EVTSDKStateChange, func(ev xaapiv1.EventMsg) { + sdk, _ := ev.DecodeSDKEvent() + Log.Debugf("EVTSDKStateChange: %v", sdk) + }) + + evReg := xaapiv1.EventRegisterArgs{Name: xaapiv1.EVTAll} if err := HTTPCli.Post("/events/register", &evReg, nil); err != nil { return cli.NewExitError(err, 1) } @@ -271,16 +298,26 @@ func sdksInstall(ctx *cli.Context) error { return cli.NewExitError(err, 1) } Log.Debugf("Result of %s: %v", url, newSdk) - fmt.Printf("Installation of '%s' SDK successfully started.\n", newSdk.Name) + if !shortOut { + fmt.Printf("Installation of '%s' SDK successfully started.\n", newSdk.Name) + } // TODO: trap CTRL+C and print question: "Installation of xxx is in progress, press 'a' to abort, 'b' to continue in background or 'c' to continue installation" // Wait exit select { + case res := <-IOSkClient.ServerDiscoChan: + Log.Debugf("XDS Server disconnected %v", res) + return cli.NewExitError(res.error, res.code) + case res := <-exitChan: if res.code == 0 { Log.Debugln("Exit successfully") - fmt.Println("SDK ID " + newSdk.ID + " successfully installed.") + if shortOut { + fmt.Println(newSdk.ID) + } else { + fmt.Println("SDK ID " + newSdk.ID + " successfully installed.") + } } if res.error != "" { Log.Debugln("Exit with ERROR: ", res.error) @@ -290,7 +327,7 @@ func sdksInstall(ctx *cli.Context) error { } func sdksUnInstall(ctx *cli.Context) error { - id := GetID(ctx) + id := GetID(ctx, "XDS_SDK_ID") if id == "" { return cli.NewExitError("id parameter or option must be set", 1) } @@ -314,7 +351,7 @@ func sdksUnInstall(ctx *cli.Context) error { } func sdksAbort(ctx *cli.Context) error { - id := GetID(ctx) + id := GetID(ctx, "XDS_SDK_ID") if id == "" { return cli.NewExitError("id parameter or option must be set", 1) } @@ -329,3 +366,10 @@ func sdksAbort(ctx *cli.Context) error { Log.Debugf("Result of %s: %v", url, newSdk) return nil } + +func formatURL(u string) string { + if u == "" { + return "-" + } + return u +}