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  }