func createPullRequestMessage(base, head, fullBase, fullHead string) (string, error) { var ( defaultMsg string commitLogs string err error ) commits, _ := git.RefList(base, head) if len(commits) == 1 { defaultMsg, err = git.Show(commits[0]) if err != nil { return "", err } } else if len(commits) > 1 { commitLogs, err = git.Log(base, head) if err != nil { return "", err } } workdir, err := git.WorkdirName() if err != nil { return "", err } template, err := github.ReadTemplate(github.PullRequestTemplate, workdir) if err != nil { return "", err } else if template != "" { if defaultMsg == "" { defaultMsg = "\n\n" + template } else { parts := strings.SplitN(defaultMsg, "\n\n", 2) defaultMsg = parts[0] + "\n\n" + template if len(parts) > 1 && parts[1] != "" { defaultMsg = defaultMsg + "\n\n" + parts[1] } } } cs := git.CommentChar() return renderPullRequestTpl(defaultMsg, cs, fullBase, fullHead, commitLogs) }
func createIssue(cmd *Command, args *Args) { localRepo, err := github.LocalRepo() utils.Check(err) project, err := localRepo.MainProject() utils.Check(err) gh := github.NewClient(project.Host) var title string var body string var editor *github.Editor if cmd.FlagPassed("message") { title, body = readMsg(flagIssueMessage) } else if cmd.FlagPassed("file") { title, body, editor, err = readMsgFromFile(flagIssueFile, flagIssueEdit, "ISSUE", "issue") utils.Check(err) } else { cs := git.CommentChar() message := strings.Replace(fmt.Sprintf(` # Creating an issue for %s # # Write a message for this issue. The first block of # text is the title and the rest is the description. `, project), "#", cs, -1) workdir, err := git.WorkdirName() utils.Check(err) template, err := github.ReadTemplate(github.IssueTemplate, workdir) utils.Check(err) if template != "" { message = template + "\n" + message } editor, err := github.NewEditor("ISSUE", "issue", message) utils.Check(err) title, body, err = editor.EditTitleAndBody() utils.Check(err) } if editor != nil { defer editor.DeleteFile() } if title == "" { utils.Check(fmt.Errorf("Aborting creation due to empty issue title")) } params := map[string]interface{}{ "title": title, "body": body, } if len(flagIssueLabels) > 0 { params["labels"] = flagIssueLabels } if len(flagIssueAssignees) > 0 { params["assignees"] = flagIssueAssignees } if flagIssueMilestone > 0 { params["milestone"] = flagIssueMilestone } args.NoForward() if args.Noop { ui.Printf("Would create issue `%s' for %s\n", params["title"], project) } else { issue, err := gh.CreateIssue(project, params) utils.Check(err) printBrowseOrCopy(args, issue.HtmlUrl, flagIssueBrowse, flagIssueCopy) } }