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  }