github.com/driusan/bug@v0.3.2-0.20190306121946-d7f4e7f33fea/bugapp/Create.go (about) 1 package bugapp 2 3 import ( 4 "fmt" 5 "github.com/driusan/bug/bugs" 6 "io/ioutil" 7 "log" 8 "os" 9 "os/exec" 10 "strings" 11 ) 12 13 func Create(Args ArgumentList) { 14 if len(Args) < 1 || (len(Args) < 2 && Args[0] == "-n") { 15 fmt.Fprintf(os.Stderr, "Usage: %s create [-n] Bug Description\n", os.Args[0]) 16 fmt.Fprintf(os.Stderr, "\nNo Bug Description provided.\n") 17 return 18 } 19 var noDesc bool = false 20 21 if Args.HasArgument("-n") { 22 noDesc = true 23 Args = Args[1:] 24 } 25 26 Args, argVals := Args.GetAndRemoveArguments([]string{"--tag", "--status", "--priority", "--milestone", "--identifier"}) 27 tag := argVals[0] 28 status := argVals[1] 29 priority := argVals[2] 30 milestone := argVals[3] 31 identifier := argVals[4] 32 33 if Args.HasArgument("--generate-id") { 34 for i, token := range Args { 35 if token == "--generate-id" { 36 if i+1 < len(Args) { 37 Args = append(Args[:i], Args[i+1:]...) 38 break 39 } else { 40 Args = Args[:i] 41 break 42 } 43 } 44 } 45 identifier = generateID(strings.Join(Args, " ")) 46 } 47 48 // It's possible there were arguments provided, but still no title 49 // included. Do another check before trying to create the bug. 50 if strings.TrimSpace(strings.Join(Args, " ")) == "" { 51 fmt.Fprintf(os.Stderr, "Usage: %s create [-n] Bug Description\n", os.Args[0]) 52 fmt.Fprintf(os.Stderr, "\nNo Bug Description provided.\n") 53 return 54 } 55 var bug bugs.Bug 56 bug = bugs.Bug{ 57 Dir: bugs.GetIssuesDir() + bugs.TitleToDir(strings.Join(Args, " ")), 58 } 59 60 dir := bug.GetDirectory() 61 62 var mode os.FileMode 63 mode = 0775 64 err := os.Mkdir(string(dir), mode) 65 if err != nil { 66 fmt.Fprintf(os.Stderr, "\n%s error: mkdir\n", os.Args[0]) 67 log.Fatal(err) 68 } 69 70 if noDesc { 71 txt := []byte("") 72 ioutil.WriteFile(string(dir)+"/Description", txt, 0644) 73 } else { 74 cmd := exec.Command(getEditor(), string(dir)+"/Description") 75 76 cmd.Stdin = os.Stdin 77 cmd.Stdout = os.Stdout 78 cmd.Stderr = os.Stderr 79 err := cmd.Run() 80 81 if err != nil { 82 log.Fatal(err) 83 } 84 } 85 86 if tag != "" { 87 bug.TagBug(bugs.Tag(tag)) 88 } 89 if status != "" { 90 bug.SetStatus(status) 91 } 92 if priority != "" { 93 bug.SetPriority(priority) 94 } 95 if milestone != "" { 96 bug.SetMilestone(milestone) 97 } 98 if identifier != "" { 99 bug.SetIdentifier(identifier) 100 } 101 fmt.Printf("Created issue: %s\n", bug.Title("")) 102 }