github.com/komosa/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  }