X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=cmd-exec.go;h=98ceb78948c0dbb9a3bd4bb17e5e7735f07c5495;hb=03e64dc8ad5634c56b5fd7f61b9336fd33e7c3cb;hp=1d121c3aad54fa2465abb9ba80f7db6298cd346d;hpb=b6049d0b616812bc72d0549d88cc59f21d517b7c;p=src%2Fxds%2Fxds-cli.git diff --git a/cmd-exec.go b/cmd-exec.go index 1d121c3..98ceb78 100644 --- a/cmd-exec.go +++ b/cmd-exec.go @@ -1,3 +1,21 @@ +/* + * Copyright (C) 2017-2018 "IoT.bzh" + * Author Sebastien Douheret + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package main import ( @@ -5,7 +23,7 @@ import ( "os" "strings" - "github.com/iotbzh/xds-agent/lib/apiv1" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xaapiv1" "github.com/urfave/cli" ) @@ -13,7 +31,7 @@ func initCmdExec(cmdDef *[]cli.Command) { *cmdDef = append(*cmdDef, cli.Command{ Name: "exec", Usage: "execute a command in XDS", - Action: exec, + Action: execCmd, Flags: []cli.Flag{ cli.StringFlag{ Name: "id", @@ -30,13 +48,19 @@ func initCmdExec(cmdDef *[]cli.Command) { EnvVar: "XDS_SDK_ID", Usage: "Cross Sdk ID to use to build project", }, + cli.BoolFlag{ + Name: "ldlibpath-no-reset", + Hidden: true, + EnvVar: "XDS_LD_LIBRARY_PATH_NO_RESET", + Usage: "Don't reset LD_LIBRARY_PATH before executing command", + }, }, }) } -func exec(ctx *cli.Context) error { +func execCmd(ctx *cli.Context) error { prjID := ctx.String("id") - rPath := ctx.String("rPath") + rPath := ctx.String("rpath") sdkid := ctx.String("sdkid") // Check mandatory args @@ -49,7 +73,7 @@ func exec(ctx *cli.Context) error { Log.Infof("Execute: /exec %v", argsCommand) // Log useful info for debugging - ver := apiv1.XDSVersion{} + ver := xaapiv1.XDSVersion{} XdsVersionGet(&ver) Log.Infof("XDS version: %v", ver) @@ -60,7 +84,8 @@ func exec(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) exitChan <- exitResult{err, 2} }) @@ -77,16 +102,25 @@ func exec(ctx *cli.Context) error { } } - IOsk.On(apiv1.ExecOutEvent, func(ev apiv1.ExecOutMsg) { + IOSkClient.On(xaapiv1.ExecOutEvent, func(ev xaapiv1.ExecOutMsg) { outFunc(ev.Timestamp, ev.Stdout, ev.Stderr) }) - IOsk.On(apiv1.ExecExitEvent, func(ev apiv1.ExecExitMsg) { + IOSkClient.On(xaapiv1.ExecExitEvent, func(ev xaapiv1.ExecExitMsg) { exitChan <- exitResult{ev.Error, ev.Code} }) + IOSkClient.On(xaapiv1.EVTProjectChange, func(ev xaapiv1.EventMsg) { + prj, _ := ev.DecodeProjectConfig() + Log.Infof("Event %v (%v): %v", ev.Type, ev.Time, prj) + }) + evReg := xaapiv1.EventRegisterArgs{Name: xaapiv1.EVTProjectChange} + if err := HTTPCli.Post("/events/register", &evReg, nil); err != nil { + return cli.NewExitError(err, 1) + } + // Retrieve the project definition - prj := apiv1.ProjectConfig{} + prj := xaapiv1.ProjectConfig{} if err := HTTPCli.Get("/projects/"+prjID, &prj); err != nil { return cli.NewExitError(err, 1) } @@ -115,14 +149,15 @@ func exec(ctx *cli.Context) error { } // Send build command - args := apiv1.ExecArgs{ - ID: prjID, - SdkID: sdkid, - Cmd: strings.Trim(argsCommand[0], " "), - Args: argsCommand[1:], - Env: env, - RPath: rPath, - CmdTimeout: 60, + args := xaapiv1.ExecArgs{ + ID: prjID, + SdkID: sdkid, + Cmd: strings.Trim(argsCommand[0], " "), + Args: argsCommand[1:], + Env: env, + RPath: rPath, + LdLibPathNoReset: ctx.Bool("ldlibpath-no-reset"), + CmdTimeout: 60, } LogPost("POST /exec %v", args) @@ -132,6 +167,10 @@ func exec(ctx *cli.Context) error { // Wait exit select { + case res := <-IOSkClient.ServerDiscoChan: + Log.Debugf("XDS Server disconnected %v", res) + return cli.NewExitError(res.error, res.code) + case res := <-exitChan: errStr := "" if res.code == 0 {