github.com/grantbow/bug@v0.3.1/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 var bug bugs.Bug 49 bug = bugs.Bug{ 50 Dir: bugs.GetIssuesDir() + bugs.TitleToDir(strings.Join(Args, " ")), 51 } 52 53 dir := bug.GetDirectory() 54 55 var mode os.FileMode 56 mode = 0775 57 os.Mkdir(string(dir), mode) 58 59 if noDesc { 60 txt := []byte("") 61 ioutil.WriteFile(string(dir)+"/Description", txt, 0644) 62 } else { 63 cmd := exec.Command(getEditor(), string(dir)+"/Description") 64 65 cmd.Stdin = os.Stdin 66 cmd.Stdout = os.Stdout 67 cmd.Stderr = os.Stderr 68 err := cmd.Run() 69 70 if err != nil { 71 log.Fatal(err) 72 } 73 } 74 75 if tag != "" { 76 bug.TagBug(bugs.Tag(tag)) 77 } 78 if status != "" { 79 bug.SetStatus(status) 80 } 81 if priority != "" { 82 bug.SetPriority(priority) 83 } 84 if milestone != "" { 85 bug.SetMilestone(milestone) 86 } 87 if identifier != "" { 88 bug.SetIdentifier(identifier) 89 } 90 fmt.Printf("Created issue: %s\n", bug.Title("")) 91 }