From 91ff904ac4466ccb71f25375866d409f86c30f1c Mon Sep 17 00:00:00 2001 From: Simon Aquino Date: Sat, 16 Aug 2014 22:13:24 +0000 Subject: [PATCH] Adding filename flag to specify task run filename. Just realised commands can not have any subcommands and therefore consist of single words (for example serve or version). Hence I can't assume that if len(args)==1 then the user has entered the filename. I have created the filename flag so the user is forced to specify it when they wish to run aptly tasks from files. --- cmd/task_run.go | 63 +++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/cmd/task_run.go b/cmd/task_run.go index 8945f9ab..fc8db977 100644 --- a/cmd/task_run.go +++ b/cmd/task_run.go @@ -16,42 +16,17 @@ func aptlyTaskRun(cmd *commander.Command, args []string) error { var err error var cmd_list [][]string - if len(args) == 0 { + if filename := cmd.Flag.Lookup("filename").Value.Get().(string); filename != "" { var text string cmd_args := []string{} - fmt.Println("Please enter one command per line and leave one blank when finished.") - - reader := bufio.NewReader(os.Stdin) - for { - fmt.Printf("> ") - text, _ = reader.ReadString('\n') - if text == "\n" { - break - } else { - text = strings.TrimSpace(text) + "," - parsed_args, _ := shellwords.Parse(text) - cmd_args = append(cmd_args, parsed_args...) - } - } - - if len(cmd_args) == 0 { - return fmt.Errorf("Nothing entered. Exiting...\n") - } - - cmd_list = formatCommands(cmd_args) - - } else if len(args) == 1 { - var text string - cmd_args := []string{} - - if finfo, err := os.Stat(args[0]); os.IsNotExist(err) || finfo.IsDir() { - return fmt.Errorf("No such file, %s\n", args[0]) + if finfo, err := os.Stat(filename); os.IsNotExist(err) || finfo.IsDir() { + return fmt.Errorf("No such file, %s\n", filename) } fmt.Println("Reading file...\n") - file, err := os.Open(args[0]) + file, err := os.Open(filename) if err != nil { return err @@ -76,7 +51,32 @@ func aptlyTaskRun(cmd *commander.Command, args []string) error { cmd_list = formatCommands(cmd_args) - } else if len(args) > 1 { + } else if len(args) == 0 { + var text string + cmd_args := []string{} + + fmt.Println("Please enter one command per line and leave one blank when finished.") + + reader := bufio.NewReader(os.Stdin) + for { + fmt.Printf("> ") + text, _ = reader.ReadString('\n') + if text == "\n" { + break + } else { + text = strings.TrimSpace(text) + "," + parsed_args, _ := shellwords.Parse(text) + cmd_args = append(cmd_args, parsed_args...) + } + } + + if len(cmd_args) == 0 { + return fmt.Errorf("Nothing entered. Exiting...\n") + } + + cmd_list = formatCommands(cmd_args) + + } else { cmd_list = formatCommands(args) } @@ -130,7 +130,7 @@ func formatCommands(args []string) [][]string { func makeCmdTaskRun() *commander.Command { cmd := &commander.Command{ Run: aptlyTaskRun, - UsageLine: "run | , , ...", + UsageLine: "run -filename= | , , ...", Short: "run aptly tasks", Long: ` Command helps origanise multiple aptly commands in one single aptly task, running as single thread. @@ -147,5 +147,6 @@ Example: `, } + cmd.Flag.String("filename", "", "specifies the filename that contains the commands to run") return cmd }