Merge pull request #10363 from iamazeem/8320-gh-edit-repo-merge-defaults
[gh repo edit] Allow setting commit message defaults
This commit is contained in:
commit
353799bc89
2 changed files with 199 additions and 18 deletions
|
|
@ -70,23 +70,27 @@ type EditRepositoryInput struct {
|
|||
enableSecretScanning *bool
|
||||
enableSecretScanningPushProtection *bool
|
||||
|
||||
AllowForking *bool `json:"allow_forking,omitempty"`
|
||||
AllowUpdateBranch *bool `json:"allow_update_branch,omitempty"`
|
||||
DefaultBranch *string `json:"default_branch,omitempty"`
|
||||
DeleteBranchOnMerge *bool `json:"delete_branch_on_merge,omitempty"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
EnableAutoMerge *bool `json:"allow_auto_merge,omitempty"`
|
||||
EnableIssues *bool `json:"has_issues,omitempty"`
|
||||
EnableMergeCommit *bool `json:"allow_merge_commit,omitempty"`
|
||||
EnableProjects *bool `json:"has_projects,omitempty"`
|
||||
EnableDiscussions *bool `json:"has_discussions,omitempty"`
|
||||
EnableRebaseMerge *bool `json:"allow_rebase_merge,omitempty"`
|
||||
EnableSquashMerge *bool `json:"allow_squash_merge,omitempty"`
|
||||
EnableWiki *bool `json:"has_wiki,omitempty"`
|
||||
Homepage *string `json:"homepage,omitempty"`
|
||||
IsTemplate *bool `json:"is_template,omitempty"`
|
||||
SecurityAndAnalysis *SecurityAndAnalysisInput `json:"security_and_analysis,omitempty"`
|
||||
Visibility *string `json:"visibility,omitempty"`
|
||||
AllowForking *bool `json:"allow_forking,omitempty"`
|
||||
AllowUpdateBranch *bool `json:"allow_update_branch,omitempty"`
|
||||
DefaultBranch *string `json:"default_branch,omitempty"`
|
||||
DeleteBranchOnMerge *bool `json:"delete_branch_on_merge,omitempty"`
|
||||
Description *string `json:"description,omitempty"`
|
||||
EnableAutoMerge *bool `json:"allow_auto_merge,omitempty"`
|
||||
EnableIssues *bool `json:"has_issues,omitempty"`
|
||||
EnableMergeCommit *bool `json:"allow_merge_commit,omitempty"`
|
||||
MergeCommitTitle string `json:"merge_commit_title,omitempty"`
|
||||
MergeCommitMessage string `json:"merge_commit_message,omitempty"`
|
||||
EnableSquashMerge *bool `json:"allow_squash_merge,omitempty"`
|
||||
SquashMergeCommitTitle string `json:"squash_merge_commit_title,omitempty"`
|
||||
SquashMergeCommitMessage string `json:"squash_merge_commit_message,omitempty"`
|
||||
EnableRebaseMerge *bool `json:"allow_rebase_merge,omitempty"`
|
||||
EnableProjects *bool `json:"has_projects,omitempty"`
|
||||
EnableDiscussions *bool `json:"has_discussions,omitempty"`
|
||||
EnableWiki *bool `json:"has_wiki,omitempty"`
|
||||
Homepage *string `json:"homepage,omitempty"`
|
||||
IsTemplate *bool `json:"is_template,omitempty"`
|
||||
SecurityAndAnalysis *SecurityAndAnalysisInput `json:"security_and_analysis,omitempty"`
|
||||
Visibility *string `json:"visibility,omitempty"`
|
||||
}
|
||||
|
||||
func NewCmdEdit(f *cmdutil.Factory, runF func(options *EditOptions) error) *cobra.Command {
|
||||
|
|
@ -120,6 +124,22 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(options *EditOptions) error) *cobr
|
|||
When the %[1]s--visibility%[1]s flag is used, %[1]s--accept-visibility-change-consequences%[1]s flag is required.
|
||||
|
||||
For information on all the potential consequences, see <https://gh.io/setting-repository-visibility>
|
||||
|
||||
For merge commit (%[1]s--enable-merge-commit%[1]s) and squash merge (%[1]s--enable-squash-merge%[1]s),
|
||||
following are the valid combinations to set their respective default title and message options:
|
||||
|
||||
- Merge commit (%[1]s--merge-commit-title%[1]s and %[1]s--merge-commit-message%[1]s respectively):
|
||||
- MERGE_MESSAGE and PR_TITLE (default message)
|
||||
- PR_TITLE and BLANK (pull request title)
|
||||
- PR_TITLE and PR_BODY (pull request title and description)
|
||||
|
||||
- Squash merge (%[1]s--squash-merge-commit-title%[1]s and %[1]s--squash-merge-commit-message%[1]s respectively):
|
||||
- COMMIT_OR_PR_TITLE and COMMIT_MESSAGES (default message)
|
||||
- PR_TITLE and BLANK (pull request title)
|
||||
- PR_TITLE and PR_BODY (pull request title and description)
|
||||
- PR_TITLE and COMMIT_MESSAGES (pull request title and commit details)
|
||||
|
||||
Note: To set the message option, its respective title is required to be set also.
|
||||
`, "`"),
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
Example: heredoc.Doc(`
|
||||
|
|
@ -128,6 +148,12 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(options *EditOptions) error) *cobr
|
|||
|
||||
# disable projects
|
||||
gh repo edit --enable-projects=false
|
||||
|
||||
# Set merge commit default commit message (pull request title and description)
|
||||
$ gh repo edit --merge-commit-title=PR_TITLE --merge-commit-message=PR_BODY
|
||||
|
||||
# Set squash merge commit default message (pull request title and commit details)
|
||||
$ gh repo edit --squash-merge-commit-title=PR_TITLE --squash-merge-commit-message=COMMIT_MESSAGES
|
||||
`),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if len(args) > 0 {
|
||||
|
|
@ -166,6 +192,14 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(options *EditOptions) error) *cobr
|
|||
opts.Edits.SecurityAndAnalysis = transformSecurityAndAnalysisOpts(opts)
|
||||
}
|
||||
|
||||
if opts.Edits.MergeCommitMessage != "" && opts.Edits.MergeCommitTitle == "" {
|
||||
return cmdutil.FlagErrorf("`--merge-commit-message` must be used in conjunction with `--merge-commit-title`")
|
||||
}
|
||||
|
||||
if opts.Edits.SquashMergeCommitMessage != "" && opts.Edits.SquashMergeCommitTitle == "" {
|
||||
return cmdutil.FlagErrorf("`--squash-merge-commit-message` must be used in conjunction with `--squash-merge-commit-title`")
|
||||
}
|
||||
|
||||
if runF != nil {
|
||||
return runF(opts)
|
||||
}
|
||||
|
|
@ -182,8 +216,15 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(options *EditOptions) error) *cobr
|
|||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableProjects, "enable-projects", "", "Enable projects in the repository")
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableWiki, "enable-wiki", "", "Enable wiki in the repository")
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableDiscussions, "enable-discussions", "", "Enable discussions in the repository")
|
||||
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableMergeCommit, "enable-merge-commit", "", "Enable merging pull requests via merge commit")
|
||||
cmdutil.StringEnumFlag(cmd, &opts.Edits.MergeCommitTitle, "merge-commit-title", "", "", []string{"PR_TITLE", "MERGE_MESSAGE"}, "Default value for a merge commit title")
|
||||
cmdutil.StringEnumFlag(cmd, &opts.Edits.MergeCommitMessage, "merge-commit-message", "", "", []string{"PR_BODY", "PR_TITLE", "BLANK"}, "Default value for a merge commit message")
|
||||
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableSquashMerge, "enable-squash-merge", "", "Enable merging pull requests via squashed commit")
|
||||
cmdutil.StringEnumFlag(cmd, &opts.Edits.SquashMergeCommitTitle, "squash-merge-commit-title", "", "", []string{"PR_TITLE", "COMMIT_OR_PR_TITLE"}, "Default value for a squash merge commit title")
|
||||
cmdutil.StringEnumFlag(cmd, &opts.Edits.SquashMergeCommitMessage, "squash-merge-commit-message", "", "", []string{"PR_BODY", "COMMIT_MESSAGES", "BLANK"}, "Default value for a squash merge commit message")
|
||||
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableRebaseMerge, "enable-rebase-merge", "", "Enable merging pull requests via rebase")
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.EnableAutoMerge, "enable-auto-merge", "", "Enable auto-merge functionality")
|
||||
cmdutil.NilBoolFlag(cmd, &opts.Edits.enableAdvancedSecurity, "enable-advanced-security", "", "Enable advanced security in the repository")
|
||||
|
|
|
|||
|
|
@ -91,6 +91,145 @@ func TestNewCmdEdit(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "enable merge commit",
|
||||
args: "--enable-merge-commit=true",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
EnableMergeCommit: bp(true),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "disable merge commit",
|
||||
args: "--enable-merge-commit=false",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
EnableMergeCommit: bp(false),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set merge commit default commit message (default message)",
|
||||
args: "--merge-commit-title=MERGE_MESSAGE --merge-commit-message=PR_TITLE",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
MergeCommitTitle: "MERGE_MESSAGE",
|
||||
MergeCommitMessage: "PR_TITLE",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set merge commit default commit message (pull request title)",
|
||||
args: "--merge-commit-title=PR_TITLE --merge-commit-message=BLANK",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
MergeCommitTitle: "PR_TITLE",
|
||||
MergeCommitMessage: "BLANK",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set merge commit default commit message (pull request title and description)",
|
||||
args: "--merge-commit-title=PR_TITLE --merge-commit-message=PR_BODY",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
MergeCommitTitle: "PR_TITLE",
|
||||
MergeCommitMessage: "PR_BODY",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set merge commit default commit message (message flag only)",
|
||||
args: "--merge-commit-message=BLANK",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
MergeCommitMessage: "BLANK",
|
||||
},
|
||||
},
|
||||
wantErr: "`--merge-commit-message` must be used in conjunction with `--merge-commit-title`",
|
||||
},
|
||||
{
|
||||
name: "enable squash merge commit",
|
||||
args: "--enable-squash-merge=true",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
EnableSquashMerge: bp(true),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "disable squash merge commit",
|
||||
args: "--enable-squash-merge=false",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
EnableSquashMerge: bp(false),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set squash merge commit default commit message (default message)",
|
||||
args: "--squash-merge-commit-title=COMMIT_OR_PR_TITLE --squash-merge-commit-message=COMMIT_MESSAGES",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
SquashMergeCommitTitle: "COMMIT_OR_PR_TITLE",
|
||||
SquashMergeCommitMessage: "COMMIT_MESSAGES",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set squash merge commit default commit message (pull request title)",
|
||||
args: "--squash-merge-commit-title=PR_TITLE --squash-merge-commit-message=BLANK",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
SquashMergeCommitTitle: "PR_TITLE",
|
||||
SquashMergeCommitMessage: "BLANK",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set squash merge commit default commit message (pull request title and description)",
|
||||
args: "--squash-merge-commit-title=PR_TITLE --squash-merge-commit-message=PR_BODY",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
SquashMergeCommitTitle: "PR_TITLE",
|
||||
SquashMergeCommitMessage: "PR_BODY",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set squash merge commit default commit message (pull request title and commit details)",
|
||||
args: "--squash-merge-commit-title=PR_TITLE --squash-merge-commit-message=COMMIT_MESSAGES",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
SquashMergeCommitTitle: "PR_TITLE",
|
||||
SquashMergeCommitMessage: "COMMIT_MESSAGES",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "set squash merge commit default commit message (message flag only)",
|
||||
args: "--squash-merge-commit-message=COMMIT_MESSAGES",
|
||||
wantOpts: EditOptions{
|
||||
Repository: ghrepo.NewWithHost("OWNER", "REPO", "github.com"),
|
||||
Edits: EditRepositoryInput{
|
||||
SquashMergeCommitMessage: "COMMIT_MESSAGES",
|
||||
},
|
||||
},
|
||||
wantErr: "`--squash-merge-commit-message` must be used in conjunction with `--squash-merge-commit-title`",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
|
@ -300,7 +439,8 @@ func Test_editRun_interactive(t *testing.T) {
|
|||
"Template Repository",
|
||||
"Topics",
|
||||
"Visibility",
|
||||
"Wikis"}
|
||||
"Wikis",
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue