github.com/grantbow/bug@v0.3.1/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/driusan/bug/bugapp" 6 "github.com/driusan/bug/bugs" 7 "os" 8 "os/exec" 9 "runtime" 10 // "bytes" 11 // "io" 12 ) 13 14 func main() { 15 if bugs.GetRootDir() == "" { 16 fmt.Printf("Could not find issues directory.\n") 17 fmt.Printf("Make sure either the PMIT environment variable is set, or a parent directory of your working directory has an issues folder.\n") 18 fmt.Printf("Aborting.\n") 19 os.Exit(2) 20 } 21 22 // Create a pipe for a pager to use 23 r, w, err := os.Pipe() 24 if err != nil { 25 fmt.Fprintln(os.Stderr, err) 26 } 27 // Capture STDOUT for the Pager 28 stdout := os.Stdout 29 30 // Don't capture the output on MacOS, because for some reason 31 // it doesn't work and results in nothing getting printed 32 if runtime.GOOS != "darwin" { 33 os.Stdout = w 34 } 35 36 // Invoke less -RF attached to the pipe 37 // we created 38 cmd := exec.Command("less", "-RF") 39 cmd.Stdin = r 40 cmd.Stdout = stdout 41 cmd.Stderr = os.Stderr 42 // Make sure the pipe is closed after we 43 // finish, then restore STDOUT 44 defer func() { 45 w.Close() 46 if err := cmd.Run(); err != nil { 47 fmt.Fprintln(os.Stderr, err) 48 } 49 os.Stdout = stdout 50 }() 51 52 if len(os.Args) > 1 { 53 if len(os.Args) >= 3 && os.Args[2] == "--help" { 54 os.Args[1], os.Args[2] = "help", os.Args[1] 55 } 56 switch os.Args[1] { 57 case "add", "new", "create": 58 os.Stdout = stdout 59 bugapp.Create(os.Args[2:]) 60 case "view", "list": 61 // bug list with no parameters shouldn't autopage, 62 // bug list with bugs to view should. So the original 63 // stdout is passed as a parameter. 64 bugapp.List(os.Args[2:], stdout) 65 case "priority": 66 bugapp.Priority(os.Args[2:]) 67 case "status": 68 bugapp.Status(os.Args[2:]) 69 case "milestone": 70 bugapp.Milestone(os.Args[2:]) 71 case "id", "identifier": 72 bugapp.Identifier(os.Args[2:]) 73 case "tag": 74 bugapp.Tag(os.Args[2:]) 75 case "mv", "rename", "retitle", "relabel": 76 bugapp.Relabel(os.Args[2:]) 77 case "purge": 78 // This shouldn't autopage 79 os.Stdout = stdout 80 bugapp.Purge() 81 case "rm", "close": 82 bugapp.Close(os.Args[2:]) 83 case "edit": 84 // Edit needs the original Stdout since it 85 // invokes an editor 86 os.Stdout = stdout 87 bugapp.Edit(os.Args[2:]) 88 case "--version", "version": 89 bugapp.Version() 90 case "env": 91 bugapp.Env() 92 case "dir", "pwd": 93 bugapp.Pwd() 94 case "commit": 95 bugapp.Commit(os.Args[2:]) 96 case "roadmap": 97 bugapp.Roadmap(os.Args[2:]) 98 case "help": 99 fallthrough 100 default: 101 bugapp.Help(os.Args[1:]...) 102 } 103 } else { 104 bugapp.Help() 105 } 106 }