func checkPresubmitFlag() bool { for _, t := range gerrit.PresubmitTestTypes() { if presubmitFlag == t { return true } } return false }
// init carries out the package initialization. func init() { cmdCLCleanup.Flags.BoolVar(&forceFlag, "f", false, "Ignore unmerged changes.") cmdCLCleanup.Flags.StringVar(&remoteBranchFlag, "remote-branch", "master", "Name of the remote branch the CL pertains to.") cmdCLMail.Flags.BoolVar(&autosubmitFlag, "autosubmit", false, "Automatically submit the changelist when feasiable.") cmdCLMail.Flags.StringVar(&ccsFlag, "cc", "", "Comma-seperated list of emails or LDAPs to cc.") cmdCLMail.Flags.BoolVar(&draftFlag, "d", false, "Send a draft changelist.") cmdCLMail.Flags.BoolVar(&editFlag, "edit", true, "Open an editor to edit the CL description.") cmdCLMail.Flags.StringVar(&hostFlag, "host", "", "Gerrit host to use. Defaults to gerrit host specified in manifest.") cmdCLMail.Flags.StringVar(&messageFlag, "m", "", "CL description.") cmdCLMail.Flags.StringVar(&presubmitFlag, "presubmit", string(gerrit.PresubmitTestTypeAll), fmt.Sprintf("The type of presubmit tests to run. Valid values: %s.", strings.Join(gerrit.PresubmitTestTypes(), ","))) cmdCLMail.Flags.StringVar(&remoteBranchFlag, "remote-branch", "master", "Name of the remote branch the CL pertains to.") cmdCLMail.Flags.StringVar(&reviewersFlag, "r", "", "Comma-seperated list of emails or LDAPs to request review.") cmdCLMail.Flags.BoolVar(&setTopicFlag, "set-topic", true, "Set Gerrit CL topic.") cmdCLMail.Flags.StringVar(&topicFlag, "topic", "", "CL topic, defaults to <username>-<branchname>.") cmdCLMail.Flags.BoolVar(&uncommittedFlag, "check-uncommitted", true, "Check that no uncommitted changes exist.") cmdCLMail.Flags.BoolVar(&verifyFlag, "verify", true, "Run pre-push git hooks.") cmdCLSync.Flags.StringVar(&remoteBranchFlag, "remote-branch", "master", "Name of the remote branch the CL pertains to.") }
// runCLMail is a wrapper that sets up and runs a review instance. func runCLMail(env *cmdline.Env, _ []string) error { ctx := tool.NewContextFromEnv(env) // Sanity checks for the <presubmitFlag> flag. if !checkPresubmitFlag() { return env.UsageErrorf("invalid value for the -presubmit flag. Valid values: %s.", strings.Join(gerrit.PresubmitTestTypes(), ",")) } host := hostFlag if host == "" { var err error if host, err = project.GerritHost(ctx); err != nil { return err } } // Create and run the review. review, err := newReview(ctx, gerrit.CLOpts{ Autosubmit: autosubmitFlag, Ccs: parseEmails(ccsFlag), Draft: draftFlag, Edit: editFlag, Host: host, Presubmit: gerrit.PresubmitTestType(presubmitFlag), RemoteBranch: remoteBranchFlag, Reviewers: parseEmails(reviewersFlag), Verify: verifyFlag, }) if err != nil { return err } if confirmed, err := review.confirmFlagChanges(); err != nil { return err } else if !confirmed { return nil } return review.run() }
// init carries out the package initialization. func init() { cmdCLMail = newCmdCLMail() cmdCL = newCmdCL() cmdCLCleanup.Flags.BoolVar(&forceFlag, "f", false, `Ignore unmerged changes.`) cmdCLCleanup.Flags.StringVar(&remoteBranchFlag, "remote-branch", "master", `Name of the remote branch the CL pertains to, without the leading "origin/".`) cmdCLMail.Flags.BoolVar(&autosubmitFlag, "autosubmit", false, `Automatically submit the changelist when feasible.`) cmdCLMail.Flags.StringVar(&ccsFlag, "cc", "", `Comma-seperated list of emails or LDAPs to cc.`) cmdCLMail.Flags.BoolVar(&draftFlag, "d", false, `Send a draft changelist.`) cmdCLMail.Flags.BoolVar(&editFlag, "edit", true, `Open an editor to edit the CL description.`) cmdCLMail.Flags.StringVar(&hostFlag, "host", "", `Gerrit host to use. Defaults to gerrit host specified in manifest.`) cmdCLMail.Flags.StringVar(&messageFlag, "m", "", `CL description.`) cmdCLMail.Flags.StringVar(&commitMessageBodyFlag, "commit-message-body-file", "", `file containing the body of the CL description, that is, text without a ChangeID, MultiPart etc.`) cmdCLMail.Flags.StringVar(&presubmitFlag, "presubmit", string(gerrit.PresubmitTestTypeAll), fmt.Sprintf("The type of presubmit tests to run. Valid values: %s.", strings.Join(gerrit.PresubmitTestTypes(), ","))) cmdCLMail.Flags.StringVar(&remoteBranchFlag, "remote-branch", "master", `Name of the remote branch the CL pertains to, without the leading "origin/".`) cmdCLMail.Flags.StringVar(&reviewersFlag, "r", "", `Comma-seperated list of emails or LDAPs to request review.`) cmdCLMail.Flags.BoolVar(&setTopicFlag, "set-topic", true, `Set Gerrit CL topic.`) cmdCLMail.Flags.StringVar(&topicFlag, "topic", "", `CL topic, defaults to <username>-<branchname>.`) cmdCLMail.Flags.BoolVar(&uncommittedFlag, "check-uncommitted", true, `Check that no uncommitted changes exist.`) cmdCLMail.Flags.BoolVar(&verifyFlag, "verify", true, `Run pre-push git hooks.`) cmdCLMail.Flags.BoolVar(¤tProjectFlag, "current-project-only", false, `Run mail in the current project only.`) cmdCLMail.Flags.BoolVar(&cleanupMultiPartFlag, "clean-multipart-metadata", false, `Cleanup the metadata associated with multipart CLs pertaining the MultiPart: x/y message without mailing any CLs.`) cmdCLSync.Flags.StringVar(&remoteBranchFlag, "remote-branch", "master", `Name of the remote branch the CL pertains to, without the leading "origin/".`) }
func runCLMailCurrent(jirix *jiri.X, _ []string) error { // Check that working dir exist on remote branch. Otherwise checking out // remote branch will break the users working dir. git := gitutil.New(jirix.NewSeq()) wd, err := os.Getwd() if err != nil { return err } topLevel, err := git.TopLevel() if err != nil { return err } relWd, err := filepath.Rel(topLevel, wd) if err != nil { return err } if !git.DirExistsOnBranch(relWd, remoteBranchFlag) { return fmt.Errorf("directory %q does not exist on branch %q.\nPlease run 'jiri cl mail' from root directory of this repo.", relWd, remoteBranchFlag) } // Sanity checks for the <presubmitFlag> flag. if !checkPresubmitFlag() { return jirix.UsageErrorf("invalid value for the -presubmit flag. Valid values: %s.", strings.Join(gerrit.PresubmitTestTypes(), ",")) } p, err := currentProject(jirix) if err != nil { return err } host := hostFlag if host == "" { if p.GerritHost == "" { return fmt.Errorf("No gerrit host found. Please use the '--host' flag, or add a 'gerrithost' attribute for project %q.", p.Name) } host = p.GerritHost } hostUrl, err := url.Parse(host) if err != nil { return fmt.Errorf("invalid Gerrit host %q: %v", host, err) } projectRemoteUrl, err := url.Parse(p.Remote) if err != nil { return fmt.Errorf("invalid project remote: %v", p.Remote, err) } gerritRemote := *hostUrl gerritRemote.Path = projectRemoteUrl.Path // Create and run the review. review, err := newReview(jirix, p, gerrit.CLOpts{ Autosubmit: autosubmitFlag, Ccs: parseEmails(ccsFlag), Draft: draftFlag, Edit: editFlag, Remote: gerritRemote.String(), Host: hostUrl, Presubmit: gerrit.PresubmitTestType(presubmitFlag), RemoteBranch: remoteBranchFlag, Reviewers: parseEmails(reviewersFlag), Verify: verifyFlag, }) if err != nil { return err } if confirmed, err := review.confirmFlagChanges(); err != nil { return err } else if !confirmed { return nil } err = review.run() // Ignore the error that is returned when there are no differences // between the local and gerrit branches. if err != nil && noChangesRE.MatchString(err.Error()) { return nil } return err }