func (app app) Run(args []string) (err error) { args = args[1:] configPath, args, err := getConfigPath(args) if err != nil { return } config, err := s3cliclient.NewConfigFromPath(configPath) if err != nil { return } s3Client, err := s3cliclient.New(config) if err != nil { return } cmdFactory := s3clicmd.NewFactory(s3Client) cmdRunner := s3clicmd.NewRunner(cmdFactory) if len(args) < 1 { err = errors.New("Command missing") return } cmdName := args[0] cmdArgs := args[1:] err = cmdRunner.Run(cmdName, cmdArgs) return }
func main() { configPath := flag.String("c", "", "configuration path") showVer := flag.Bool("v", false, "version") flag.Parse() if *showVer { fmt.Printf("version %s\n", version) os.Exit(0) } configFile, err := os.Open(*configPath) if err != nil { log.Fatalln(err) } blobstoreClient, err := client.New(configFile) if err != nil { log.Fatalln(err) } nonFlagArgs := flag.Args() if len(nonFlagArgs) != 3 { log.Fatalf("Expected 3 arguments got %d\n", len(nonFlagArgs)) } cmd, src, dst := nonFlagArgs[0], nonFlagArgs[1], nonFlagArgs[2] switch cmd { case "put": var sourceFile *os.File sourceFile, err = os.Open(src) if err != nil { log.Fatalln(err) } defer sourceFile.Close() err = blobstoreClient.Put(sourceFile, dst) case "get": var dstFile *os.File dstFile, err = os.Create(dst) if err != nil { log.Fatalln(err) } defer dstFile.Close() err = blobstoreClient.Get(src, dstFile) default: log.Fatalf("unknown command: '%s'\n", cmd) } if err != nil { log.Fatalf("performing operation %s: %s\n", cmd, err) } }
func main() { configPath := flag.String("c", "", "configuration path") showVer := flag.Bool("v", false, "version") flag.Parse() if *showVer { fmt.Printf("version %s\n", version) os.Exit(0) } configFile, err := os.Open(*configPath) if err != nil { log.Fatalln(err) } blobstoreClient, err := client.New(configFile) if err != nil { log.Fatalln(err) } nonFlagArgs := flag.Args() if len(nonFlagArgs) < 2 { log.Fatalf("Expected at least two arguments got %d\n", len(nonFlagArgs)) } cmd := nonFlagArgs[0] switch cmd { case "put": if len(nonFlagArgs) != 3 { log.Fatalf("Put method expected 3 arguments got %d\n", len(nonFlagArgs)) } src, dst := nonFlagArgs[1], nonFlagArgs[2] var sourceFile *os.File sourceFile, err = os.Open(src) if err != nil { log.Fatalln(err) } defer sourceFile.Close() err = blobstoreClient.Put(sourceFile, dst) case "get": if len(nonFlagArgs) != 3 { log.Fatalf("Get method expected 3 arguments got %d\n", len(nonFlagArgs)) } src, dst := nonFlagArgs[1], nonFlagArgs[2] var dstFile *os.File dstFile, err = os.Create(dst) if err != nil { log.Fatalln(err) } defer dstFile.Close() err = blobstoreClient.Get(src, dstFile) case "delete": if len(nonFlagArgs) != 2 { log.Fatalf("Delete method expected 2 arguments got %d\n", len(nonFlagArgs)) } err = blobstoreClient.Delete(nonFlagArgs[1]) case "exists": if len(nonFlagArgs) != 2 { log.Fatalf("Exists method expected 2 arguments got %d\n", len(nonFlagArgs)) } var exists bool exists, err = blobstoreClient.Exists(nonFlagArgs[1]) // If the object exists the exit status is 0, otherwise it is 3 // We are using `3` since `1` and `2` have special meanings if err == nil && !exists { os.Exit(3) } default: log.Fatalf("unknown command: '%s'\n", cmd) } if err != nil { log.Fatalf("performing operation %s: %s\n", cmd, err) } }