7 "github.com/iotbzh/xds-agent/lib/xaapiv1"
8 "github.com/urfave/cli"
11 func initCmdProjects(cmdDef *[]cli.Command) {
12 *cmdDef = append(*cmdDef, cli.Command{
14 Aliases: []string{"prj"},
16 Usage: "project commands group",
17 Subcommands: []cli.Command{
20 Aliases: []string{"a"},
21 Usage: "Add a new project",
26 Usage: "project label (free form string)",
30 Usage: "project local path",
33 Name: "server-path, sp",
34 Usage: "project server path (only used with pathmap type)",
38 Usage: "project type (pathmap|pm, cloudsync|sc)",
44 Usage: "Get a property of a project",
55 Aliases: []string{"ls"},
56 Usage: "List existing projects",
61 Usage: "display verbose output",
67 Aliases: []string{"rm"},
68 Usage: "Remove an existing project",
69 Action: projectsRemove,
80 Usage: "Force synchronization of project sources",
93 func projectsList(ctx *cli.Context) error {
95 prjs := []xaapiv1.ProjectConfig{}
96 if err := ProjectsListGet(&prjs); err != nil {
97 return cli.NewExitError(err.Error(), 1)
99 _displayProjects(prjs, ctx.Bool("verbose"))
103 func projectsGet(ctx *cli.Context) error {
106 return cli.NewExitError("id parameter or option must be set", 1)
108 prjs := make([]xaapiv1.ProjectConfig, 1)
109 if err := HTTPCli.Get("/projects/"+id, &prjs[0]); err != nil {
110 return cli.NewExitError(err, 1)
112 _displayProjects(prjs, true)
116 func _displayProjects(prjs []xaapiv1.ProjectConfig, verbose bool) {
119 writer := NewTableWriter()
120 for _, folder := range prjs {
125 fmt.Fprintln(writer, "ID:\t", folder.ID)
126 fmt.Fprintln(writer, "Label:\t", folder.Label)
127 fmt.Fprintln(writer, "Path type:\t", folder.Type)
128 fmt.Fprintln(writer, "Local Path:\t", folder.ClientPath)
129 if folder.Type != xaapiv1.TypeCloudSync {
130 fmt.Fprintln(writer, "Server Path:\t", folder.ServerPath)
132 fmt.Fprintln(writer, "Status:\t", folder.Status)
133 fmt.Fprintln(writer, "Is in Sync:\t", folder.IsInSync)
134 ds := folder.DefaultSdk
138 fmt.Fprintln(writer, "Default Sdk:\t", ds)
142 fmt.Fprintln(writer, "ID\t Label\t LocalPath")
144 fmt.Fprintln(writer, folder.ID, "\t", folder.Label, "\t", folder.ClientPath)
151 func projectsAdd(ctx *cli.Context) error {
153 // Decode project type
154 var ptype xaapiv1.ProjectType
155 switch strings.ToLower(ctx.String("type")) {
156 case "pathmap", "pm":
157 ptype = xaapiv1.TypePathMap
158 case "cloudsync", "cs":
159 ptype = xaapiv1.TypeCloudSync
161 return cli.NewExitError("Unknown project type", 1)
164 prj := xaapiv1.ProjectConfig{
165 ServerID: XdsServerIDGet(),
166 Label: ctx.String("label"),
168 ClientPath: ctx.String("path"),
169 ServerPath: ctx.String("server-path"),
172 Log.Infof("POST /project %v", prj)
173 newPrj := xaapiv1.ProjectConfig{}
174 err := HTTPCli.Post("/projects", prj, &newPrj)
176 return cli.NewExitError(err, 1)
179 fmt.Printf("New project '%s' (id %v) successfully created.\n", newPrj.Label, newPrj.ID)
184 func projectsRemove(ctx *cli.Context) error {
185 var res xaapiv1.ProjectConfig
188 return cli.NewExitError("id parameter or option must be set", 1)
191 if err := HTTPCli.Delete("/projects/"+id, &res); err != nil {
192 return cli.NewExitError(err, 1)
195 fmt.Println("Project ID " + res.ID + " successfully deleted.")
199 func projectsSync(ctx *cli.Context) error {
202 return cli.NewExitError("id parameter or option must be set", 1)
204 if err := HTTPCli.Post("/projects/sync/"+id, "", nil); err != nil {
205 return cli.NewExitError(err, 1)
207 fmt.Println("Sync successfully resquested.")