package app import ( "os" "strings" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/autocomplete" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) var appCpCommand = &cli.Command{ Name: "cp", Aliases: []string{"c"}, ArgsUsage: " ", Usage: "Copy files to/from a running app service", Description: ` This command supports copying files to and from any app service file system. If you want to copy a myfile.txt to the root of the app service: abra app cp myfile.txt app:/ And if you want to copy that file back to your current working directory locally: abra app cp app:/myfile.txt . `, Action: func(c *cli.Context) error { app := internal.ValidateApp(c) src := c.Args().Get(1) dst := c.Args().Get(2) if src == "" { logrus.Fatal("missing argument") } else if dst == "" { logrus.Fatal("missing argument") } parsedSrc := strings.SplitN(src, ":", 2) parsedDst := strings.SplitN(dst, ":", 2) errorMsg := "one of / arguments must take $SERVICE:$PATH form" if len(parsedSrc) == 2 && len(parsedDst) == 2 { logrus.Fatal(errorMsg) } else if len(parsedSrc) != 2 { if len(parsedDst) != 2 { logrus.Fatal(errorMsg) } } else if len(parsedDst) != 2 { if len(parsedSrc) != 2 { logrus.Fatal(errorMsg) } } var service string var srcPath string var dstPath string isToContainer := false // if len(parsedSrc) == 2 { service = parsedSrc[0] srcPath = parsedSrc[1] dstPath = dst logrus.Debugf("assuming transfer is coming FROM the container") } else if len(parsedDst) == 2 { service = parsedDst[0] dstPath = parsedDst[1] srcPath = src isToContainer = true // logrus.Debugf("assuming transfer is going TO the container") } if !isToContainer { if _, err := os.Stat(dstPath); os.IsNotExist(err) { logrus.Fatalf("%s does not exist locally?", dstPath) } } err := internal.ConfigureAndCp(c, app, srcPath, dstPath, service, isToContainer) if err != nil { logrus.Fatal(err) } return nil }, BashComplete: autocomplete.AppNameComplete, }