Merge pull request #12382 from desktop/squash-merge-via-branch-menu

Squash merge via branch menu
This commit is contained in:
tidy-dev 2021-06-07 10:22:37 -04:00 committed by GitHub
commit 3c4c000b08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 110 additions and 79 deletions

View file

@ -10,6 +10,7 @@ import { TipState } from '../models/tip'
import { updateMenuState as ipcUpdateMenuState } from '../ui/main-process-proxy'
import { AppMenu, MenuItem } from '../models/app-menu'
import { hasConflictedFiles } from './status'
import { enableSquashMerging } from './feature-flag'
export interface IMenuItemState {
readonly enabled?: boolean
@ -101,6 +102,10 @@ function menuItemStateEqual(state: IMenuItemState, menuItem: MenuItem) {
return true
}
const squashAndMergeMenuIds: ReadonlyArray<MenuIDs> = enableSquashMerging()
? ['squash-and-merge-branch']
: []
const allMenuIds: ReadonlyArray<MenuIDs> = [
'rename-branch',
'delete-branch',
@ -133,6 +138,7 @@ const allMenuIds: ReadonlyArray<MenuIDs> = [
'clone-repository',
'about',
'create-pull-request',
...squashAndMergeMenuIds,
]
function getAllMenusDisabledBuilder(): MenuStateBuilder {
@ -258,6 +264,9 @@ function getRepositoryMenuBuilder(state: IAppState): MenuStateBuilder {
onNonDefaultBranch && hasDefaultBranch && !onDetachedHead
)
menuStateBuilder.setEnabled('merge-branch', onBranch)
if (enableSquashMerging()) {
menuStateBuilder.setEnabled('squash-and-merge-branch', onBranch)
}
menuStateBuilder.setEnabled('rebase-branch', onBranch)
menuStateBuilder.setEnabled(
'compare-on-github',
@ -330,6 +339,9 @@ function getRepositoryMenuBuilder(state: IAppState): MenuStateBuilder {
menuStateBuilder.disable('stash-all-changes')
menuStateBuilder.disable('update-branch')
menuStateBuilder.disable('merge-branch')
if (enableSquashMerging()) {
menuStateBuilder.disable('squash-and-merge-branch')
}
menuStateBuilder.disable('rebase-branch')
menuStateBuilder.disable('push')

View file

@ -6,6 +6,7 @@ import { getLogDirectoryPath } from '../../lib/logging/get-log-path'
import { ensureDir } from 'fs-extra'
import { UNSAFE_openDirectory } from '../shell'
import { MenuLabelsEvent } from '../../models/menu-labels'
import { enableSquashMerging } from '../../lib/feature-flag'
const platformDefaultShell = __WIN32__ ? 'Command Prompt' : 'Terminal'
const createPullRequestLabel = __DARWIN__
@ -337,88 +338,102 @@ export function buildDefaultMenu({
],
})
const branchSubmenu = [
{
label: __DARWIN__ ? 'New Branch…' : 'New &branch…',
id: 'create-branch',
accelerator: 'CmdOrCtrl+Shift+N',
click: emit('create-branch'),
},
{
label: __DARWIN__ ? 'Rename…' : '&Rename…',
id: 'rename-branch',
accelerator: 'CmdOrCtrl+Shift+R',
click: emit('rename-branch'),
},
{
label: __DARWIN__ ? 'Delete…' : '&Delete…',
id: 'delete-branch',
accelerator: 'CmdOrCtrl+Shift+D',
click: emit('delete-branch'),
},
separator,
{
label: __DARWIN__ ? 'Discard All Changes…' : 'Discard all changes…',
id: 'discard-all-changes',
accelerator: 'CmdOrCtrl+Shift+Backspace',
click: emit('discard-all-changes'),
},
{
label: askForConfirmationWhenStashingAllChanges
? confirmStashAllChangesLabel
: stashAllChangesLabel,
id: 'stash-all-changes',
accelerator: 'CmdOrCtrl+Shift+S',
click: emit('stash-all-changes'),
},
separator,
{
label: __DARWIN__
? `Update from ${defaultBranchName}`
: `&Update from ${defaultBranchName}`,
id: 'update-branch',
accelerator: 'CmdOrCtrl+Shift+U',
click: emit('update-branch'),
},
{
label: __DARWIN__ ? 'Compare to Branch' : '&Compare to branch',
id: 'compare-to-branch',
accelerator: 'CmdOrCtrl+Shift+B',
click: emit('compare-to-branch'),
},
{
label: __DARWIN__
? 'Merge into Current Branch…'
: '&Merge into current branch…',
id: 'merge-branch',
accelerator: 'CmdOrCtrl+Shift+M',
click: emit('merge-branch'),
},
]
if (enableSquashMerging()) {
branchSubmenu.push({
label: __DARWIN__
? 'Squash and Merge into Current Branch…'
: 'Squas&h and merge into current branch…',
id: 'squash-and-merge-branch',
accelerator: 'CmdOrCtrl+Shift+H',
click: emit('squash-and-merge-branch'),
})
}
branchSubmenu.push(
{
label: __DARWIN__ ? 'Rebase Current Branch…' : 'R&ebase current branch…',
id: 'rebase-branch',
accelerator: 'CmdOrCtrl+Shift+E',
click: emit('rebase-branch'),
},
separator,
{
label: __DARWIN__ ? 'Compare on GitHub' : 'Compare on &GitHub',
id: 'compare-on-github',
accelerator: 'CmdOrCtrl+Shift+C',
click: emit('compare-on-github'),
},
{
label: pullRequestLabel,
id: 'create-pull-request',
accelerator: 'CmdOrCtrl+R',
click: emit('open-pull-request'),
}
)
template.push({
label: __DARWIN__ ? 'Branch' : '&Branch',
id: 'branch',
submenu: [
{
label: __DARWIN__ ? 'New Branch…' : 'New &branch…',
id: 'create-branch',
accelerator: 'CmdOrCtrl+Shift+N',
click: emit('create-branch'),
},
{
label: __DARWIN__ ? 'Rename…' : '&Rename…',
id: 'rename-branch',
accelerator: 'CmdOrCtrl+Shift+R',
click: emit('rename-branch'),
},
{
label: __DARWIN__ ? 'Delete…' : '&Delete…',
id: 'delete-branch',
accelerator: 'CmdOrCtrl+Shift+D',
click: emit('delete-branch'),
},
separator,
{
label: __DARWIN__ ? 'Discard All Changes…' : 'Discard all changes…',
id: 'discard-all-changes',
accelerator: 'CmdOrCtrl+Shift+Backspace',
click: emit('discard-all-changes'),
},
{
label: askForConfirmationWhenStashingAllChanges
? confirmStashAllChangesLabel
: stashAllChangesLabel,
id: 'stash-all-changes',
accelerator: 'CmdOrCtrl+Shift+S',
click: emit('stash-all-changes'),
},
separator,
{
label: __DARWIN__
? `Update from ${defaultBranchName}`
: `&Update from ${defaultBranchName}`,
id: 'update-branch',
accelerator: 'CmdOrCtrl+Shift+U',
click: emit('update-branch'),
},
{
label: __DARWIN__ ? 'Compare to Branch' : '&Compare to branch',
id: 'compare-to-branch',
accelerator: 'CmdOrCtrl+Shift+B',
click: emit('compare-to-branch'),
},
{
label: __DARWIN__
? 'Merge into Current Branch…'
: '&Merge into current branch…',
id: 'merge-branch',
accelerator: 'CmdOrCtrl+Shift+M',
click: emit('merge-branch'),
},
{
label: __DARWIN__
? 'Rebase Current Branch…'
: 'R&ebase current branch…',
id: 'rebase-branch',
accelerator: 'CmdOrCtrl+Shift+E',
click: emit('rebase-branch'),
},
separator,
{
label: __DARWIN__ ? 'Compare on GitHub' : 'Compare on &GitHub',
id: 'compare-on-github',
accelerator: 'CmdOrCtrl+Shift+C',
click: emit('compare-on-github'),
},
{
label: pullRequestLabel,
id: 'create-pull-request',
accelerator: 'CmdOrCtrl+R',
click: emit('open-pull-request'),
},
],
submenu: branchSubmenu,
})
if (__DARWIN__) {

View file

@ -19,6 +19,7 @@ export type MenuEvent =
| 'update-branch'
| 'compare-to-branch'
| 'merge-branch'
| 'squash-and-merge-branch'
| 'rebase-branch'
| 'show-repository-settings'
| 'open-in-shell'

View file

@ -7,6 +7,7 @@ export type MenuIDs =
| 'preferences'
| 'update-branch'
| 'merge-branch'
| 'squash-and-merge-branch'
| 'rebase-branch'
| 'view-repository-on-github'
| 'compare-on-github'

View file

@ -385,6 +385,8 @@ export class App extends React.Component<IAppProps, IAppState> {
case 'merge-branch':
this.props.dispatcher.recordMenuInitiatedMerge()
return this.mergeBranch()
case 'squash-and-merge-branch':
return this.mergeBranch(true)
case 'rebase-branch':
this.props.dispatcher.recordMenuInitiatedRebase()
return this.showRebaseDialog()