From e22bc12a77694001f0feaddb652f2857ca2dfad2 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 21 Aug 2023 18:20:48 -0400 Subject: [PATCH 01/34] Add Eclipse IDE integration for macOS fixes #16991 add more eclipses --- app/src/lib/editors/darwin.ts | 44 ++++++++++++++++++++++++++++ docs/technical/editor-integration.md | 2 ++ 2 files changed, 46 insertions(+) diff --git a/app/src/lib/editors/darwin.ts b/app/src/lib/editors/darwin.ts index 5ef52e4766..4d313b8380 100644 --- a/app/src/lib/editors/darwin.ts +++ b/app/src/lib/editors/darwin.ts @@ -27,6 +27,50 @@ const editors: IDarwinExternalEditor[] = [ name: 'Aptana Studio', bundleIdentifiers: ['aptana.studio'], }, + { + name: 'Eclipse IDE for Java Developers', + bundleIdentifiers: ['epp.package.java'], + }, + { + name: 'Eclipse IDE for Enterprise Java and Web Developers', + bundleIdentifiers: ['epp.package.jee'], + }, + { + name: 'Eclipse IDE for C/C++ Developers', + bundleIdentifiers: ['epp.package.cpp'], + }, + { + name: 'Eclipse IDE for Eclipse Committers', + bundleIdentifiers: ['epp.package.committers'], + }, + { + name: 'Eclipse IDE for Embedded C/C++ Developers', + bundleIdentifiers: ['epp.package.embedcpp'], + }, + { + name: 'Eclipse IDE for PHP Developers', + bundleIdentifiers: ['epp.package.php'], + }, + { + name: 'Eclipse IDE for Java and DSL Developers', + bundleIdentifiers: ['epp.package.dsl'], + }, + { + name: 'Eclipse IDE for RCP and RAP Developers', + bundleIdentifiers: ['epp.package.rcp'], + }, + { + name: 'Eclipse Modeling Tools', + bundleIdentifiers: ['epp.package.modeling'], + }, + { + name: 'Eclipse IDE for Scientific Computing', + bundleIdentifiers: ['epp.package.parallel'], + }, + { + name: 'Eclipse IDE for Scout Developers', + bundleIdentifiers: ['epp.package.scout'], + }, { name: 'MacVim', bundleIdentifiers: ['org.vim.MacVim'], diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index b365f1613b..702be4a91d 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -247,6 +247,8 @@ The source for the editor integration on macOS is found in These editors are currently supported: - [Atom](https://atom.io/) + - [Eclipse](https://www.eclipse.org/downloads/packages/release/) + - All IDE variants (Java, JavaEE, C/C++, PHP, etc.) are supported. - [MacVim](https://macvim-dev.github.io/macvim/) - [Neovide](https://github.com/neovide/neovide) - [VimR](https://github.com/qvacua/vimr) From 3a03318875382710d71510d471f30a99b6c4d240 Mon Sep 17 00:00:00 2001 From: Jose Cortinas Date: Wed, 6 Sep 2023 11:05:19 -0500 Subject: [PATCH 02/34] Add label and haspopup for button --- app/src/ui/lib/conflicts/unmerged-file.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/ui/lib/conflicts/unmerged-file.tsx b/app/src/ui/lib/conflicts/unmerged-file.tsx index 49c4878011..2e5119adc6 100644 --- a/app/src/ui/lib/conflicts/unmerged-file.tsx +++ b/app/src/ui/lib/conflicts/unmerged-file.tsx @@ -261,6 +261,8 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ From 3ded969a9ba3328a16cce883339e5519a776a851 Mon Sep 17 00:00:00 2001 From: Jose Cortinas Date: Wed, 6 Sep 2023 11:22:04 -0500 Subject: [PATCH 03/34] Use better words --- app/src/ui/lib/conflicts/unmerged-file.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ui/lib/conflicts/unmerged-file.tsx b/app/src/ui/lib/conflicts/unmerged-file.tsx index 2e5119adc6..5e57c0e5cd 100644 --- a/app/src/ui/lib/conflicts/unmerged-file.tsx +++ b/app/src/ui/lib/conflicts/unmerged-file.tsx @@ -261,7 +261,7 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{
@@ -409,21 +418,7 @@ const renderResolvedFileStatusSummary: React.FunctionComponent<{ props.branch ) - return ( -
- {statusString} -   - - Undo - -
- ) + return
{statusString}
} /** returns the name of the branch that corresponds to the chosen manual resolution */ From 44bfc3c1d8bbaafc9505e83e8ffec7564edee217 Mon Sep 17 00:00:00 2001 From: Sergio Padrino Date: Mon, 11 Sep 2023 13:51:46 +0200 Subject: [PATCH 06/34] Fix styling --- app/styles/ui/dialogs/_conflicts.scss | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/styles/ui/dialogs/_conflicts.scss b/app/styles/ui/dialogs/_conflicts.scss index 7c8d402979..a13c2c3c16 100644 --- a/app/styles/ui/dialogs/_conflicts.scss +++ b/app/styles/ui/dialogs/_conflicts.scss @@ -53,8 +53,8 @@ dialog#conflicts-dialog { .column-left { display: flex; flex-flow: column nowrap; + flex-grow: 1; align-items: start; - max-width: 50%; padding-right: var(--spacing); .path-text-component { @@ -76,11 +76,16 @@ dialog#conflicts-dialog { } } + .undo-button { + align-self: center; + margin-right: var(--spacing-half); + } + .green-circle:last-child { margin-left: auto; - margin-top: var(--spacing); flex-shrink: 0; flex: 0 1 auto; + align-self: center; } } From c61bad0f24fc4ca4ce4691f4b754698c625c9eda Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Mon, 11 Sep 2023 17:18:23 -0400 Subject: [PATCH 07/34] move commit message length warning option to prompts --- app/src/ui/preferences/advanced.tsx | 18 ------------------ app/src/ui/preferences/preferences.tsx | 4 ++-- app/src/ui/preferences/prompts.tsx | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index 5cdb6cad92..4eeac8ace8 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -7,11 +7,9 @@ import { isWindowsOpenSSHAvailable } from '../../lib/ssh/ssh' interface IAdvancedPreferencesProps { readonly useWindowsOpenSSH: boolean - readonly showCommitLengthWarning: boolean readonly optOutOfUsageTracking: boolean readonly repositoryIndicatorsEnabled: boolean readonly onUseWindowsOpenSSHChanged: (checked: boolean) => void - readonly onShowCommitLengthWarningChanged: (checked: boolean) => void readonly onOptOutofReportingChanged: (checked: boolean) => void readonly onRepositoryIndicatorsEnabledChanged: (enabled: boolean) => void } @@ -63,12 +61,6 @@ export class Advanced extends React.Component< this.props.onUseWindowsOpenSSHChanged(event.currentTarget.checked) } - private onShowCommitLengthWarningChanged = ( - event: React.FormEvent - ) => { - this.props.onShowCommitLengthWarningChanged(event.currentTarget.checked) - } - private reportDesktopUsageLabel() { return ( @@ -110,16 +102,6 @@ export class Advanced extends React.Component< onChange={this.onReportingOptOutChanged} /> -
-

Style Guides

- -
) } diff --git a/app/src/ui/preferences/preferences.tsx b/app/src/ui/preferences/preferences.tsx index 42370e7ee5..d78741c5bf 100644 --- a/app/src/ui/preferences/preferences.tsx +++ b/app/src/ui/preferences/preferences.tsx @@ -390,6 +390,8 @@ export class Preferences extends React.Component< onUncommittedChangesStrategyChanged={ this.onUncommittedChangesStrategyChanged } + showCommitLengthWarning={this.state.showCommitLengthWarning} + onShowCommitLengthWarningChanged={this.onShowCommitLengthWarningChanged} /> ) break @@ -398,11 +400,9 @@ export class Preferences extends React.Component< View = ( void readonly onConfirmDiscardChangesPermanentlyChanged: (checked: boolean) => void @@ -20,6 +21,7 @@ interface IPromptsPreferencesProps { readonly onConfirmRepositoryRemovalChanged: (checked: boolean) => void readonly onConfirmForcePushChanged: (checked: boolean) => void readonly onConfirmUndoCommitChanged: (checked: boolean) => void + readonly onShowCommitLengthWarningChanged: (checked: boolean) => void readonly onUncommittedChangesStrategyChanged: ( value: UncommittedChangesStrategy ) => void @@ -126,6 +128,12 @@ export class Prompts extends React.Component< this.props.onUncommittedChangesStrategyChanged(value) } + private onShowCommitLengthWarningChanged = ( + event: React.FormEvent + ) => { + this.props.onShowCommitLengthWarningChanged(event.currentTarget.checked) + } + public render() { return ( @@ -226,6 +234,16 @@ export class Prompts extends React.Component< onSelected={this.onUncommittedChangesStrategyChanged} /> +
+

Style Guides

+ +
) } From bc6c82fa5126d3a027608ad5a0565725bd18f030 Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Mon, 11 Sep 2023 17:37:43 -0400 Subject: [PATCH 08/34] clean up showCommitLengthWarning initialization --- app/src/lib/stores/app-store.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index 80324b41a2..99a29fbdd1 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -351,6 +351,7 @@ const pullRequestFileListConfigKey: string = 'pull-request-files-width' const askToMoveToApplicationsFolderDefault: boolean = true const confirmRepoRemovalDefault: boolean = true +const showCommitLengthWarningDefault: boolean = false const confirmDiscardChangesDefault: boolean = true const confirmDiscardChangesPermanentlyDefault: boolean = true const confirmDiscardStashDefault: boolean = true @@ -359,6 +360,7 @@ const askForConfirmationOnForcePushDefault = true const confirmUndoCommitDefault: boolean = true const askToMoveToApplicationsFolderKey: string = 'askToMoveToApplicationsFolder' const confirmRepoRemovalKey: string = 'confirmRepoRemoval' +const showCommitLengthWarningKey: string = 'showCommitLengthWarning' const confirmDiscardChangesKey: string = 'confirmDiscardChanges' const confirmDiscardStashKey: string = 'confirmDiscardStash' const confirmCheckoutCommitKey: string = 'confirmCheckoutCommit' @@ -556,8 +558,6 @@ export class AppStore extends TypedBaseStore { if (__WIN32__) { const useWindowsOpenSSH = getBoolean(UseWindowsOpenSSHKey) - // TODO: is it ok to use a string literal here? - this.showCommitLengthWarning = getBoolean("showCommitLengthWarning") === true // If the user never selected whether to use Windows OpenSSH or not, use it // by default if we have to show the welcome flow (i.e. if it's a new install) @@ -2097,6 +2097,11 @@ export class AppStore extends TypedBaseStore { confirmRepoRemovalDefault ) + this.showCommitLengthWarning = getBoolean( + showCommitLengthWarningKey, + showCommitLengthWarningDefault + ) + this.confirmDiscardChanges = getBoolean( confirmDiscardChangesKey, confirmDiscardChangesDefault From e782f45d6e00456064502a0ace8de63f27929bf7 Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Mon, 11 Sep 2023 18:34:26 -0400 Subject: [PATCH 09/34] fix showCommitLengthWarning property access --- app/src/ui/app.tsx | 2 ++ .../autocompletion/autocompleting-text-input.tsx | 2 ++ app/src/ui/changes/changes-list.tsx | 7 +++++++ app/src/ui/changes/commit-message.tsx | 15 ++++++++------- app/src/ui/changes/sidebar.tsx | 3 +++ .../ui/commit-message/commit-message-dialog.tsx | 9 +++++++++ app/src/ui/repository.tsx | 2 ++ 7 files changed, 33 insertions(+), 7 deletions(-) diff --git a/app/src/ui/app.tsx b/app/src/ui/app.tsx index 57035be214..6ac81a7b2b 100644 --- a/app/src/ui/app.tsx +++ b/app/src/ui/app.tsx @@ -2173,6 +2173,7 @@ export class App extends React.Component { commitAuthor={repositoryState.commitAuthor} commitMessage={popup.commitMessage} commitSpellcheckEnabled={this.state.commitSpellcheckEnabled} + showCommitLengthWarning={this.state.showCommitLengthWarning} dialogButtonText={popup.dialogButtonText} dialogTitle={popup.dialogTitle} dispatcher={this.props.dispatcher} @@ -3268,6 +3269,7 @@ export class App extends React.Component { isShowingFoldout={this.state.currentFoldout !== null} aheadBehindStore={this.props.aheadBehindStore} commitSpellcheckEnabled={this.state.commitSpellcheckEnabled} + showCommitLengthWarning={this.state.showCommitLengthWarning} onCherryPick={this.startCherryPickWithoutBranch} pullRequestSuggestedNextAction={state.pullRequestSuggestedNextAction} /> diff --git a/app/src/ui/autocompletion/autocompleting-text-input.tsx b/app/src/ui/autocompletion/autocompleting-text-input.tsx index 2fc0569fe8..e5616d4cd5 100644 --- a/app/src/ui/autocompletion/autocompleting-text-input.tsx +++ b/app/src/ui/autocompletion/autocompleting-text-input.tsx @@ -51,6 +51,8 @@ interface IAutocompletingTextInputProps { /** Indicates if input field applies spellcheck */ readonly spellcheck?: boolean + readonly showCommitLengthWarning?: boolean + /** Indicates if it should always try to autocomplete. Optional (defaults to false) */ readonly alwaysAutocomplete?: boolean diff --git a/app/src/ui/changes/changes-list.tsx b/app/src/ui/changes/changes-list.tsx index a6fd200a8c..044152f75b 100644 --- a/app/src/ui/changes/changes-list.tsx +++ b/app/src/ui/changes/changes-list.tsx @@ -219,6 +219,8 @@ interface IChangesListProps { readonly shouldNudgeToCommit: boolean readonly commitSpellcheckEnabled: boolean + + readonly showCommitLengthWarning: boolean } interface IChangesState { @@ -818,6 +820,7 @@ export class ChangesList extends React.Component< showNoWriteAccess={fileCount > 0 && !hasWritePermissionForRepository} shouldNudge={this.props.shouldNudgeToCommit} commitSpellcheckEnabled={this.props.commitSpellcheckEnabled} + showCommitLengthWarning={this.props.showCommitLengthWarning} onCoAuthorsUpdated={this.onCoAuthorsUpdated} onShowCoAuthoredByChanged={this.onShowCoAuthoredByChanged} onConfirmCommitWithUnknownCoAuthors={ @@ -829,6 +832,7 @@ export class ChangesList extends React.Component< onShowPopup={this.onShowPopup} onShowFoldout={this.onShowFoldout} onCommitSpellcheckEnabledChanged={this.onCommitSpellcheckEnabledChanged} + onShowCommitLengthWarningChanged={this.onShowCommitLengthWarningChanged} onStopAmending={this.onStopAmending} onShowCreateForkDialog={this.onShowCreateForkDialog} /> @@ -866,6 +870,9 @@ export class ChangesList extends React.Component< private onCommitSpellcheckEnabledChanged = (enabled: boolean) => this.props.dispatcher.setCommitSpellcheckEnabled(enabled) + private onShowCommitLengthWarningChanged = (enabled: boolean) => + this.props.dispatcher.setShowCommitLengthWarning(enabled) + private onStopAmending = () => this.props.dispatcher.stopAmendingRepository(this.props.repository) diff --git a/app/src/ui/changes/commit-message.tsx b/app/src/ui/changes/commit-message.tsx index 5dcc8b377e..28f4d40d60 100644 --- a/app/src/ui/changes/commit-message.tsx +++ b/app/src/ui/changes/commit-message.tsx @@ -117,6 +117,9 @@ interface ICommitMessageProps { readonly commitSpellcheckEnabled: boolean + readonly showCommitLengthWarning: boolean + + /** Optional text to override default commit button text */ readonly commitButtonText?: string @@ -153,6 +156,7 @@ interface ICommitMessageProps { readonly onShowPopup: (popup: Popup) => void readonly onShowFoldout: (foldout: Foldout) => void readonly onCommitSpellcheckEnabledChanged: (enabled: boolean) => void + readonly onShowCommitLengthWarningChanged: (enabled: boolean) => void readonly onStopAmending: () => void readonly onShowCreateForkDialog: () => void } @@ -179,8 +183,6 @@ interface ICommitMessageState { readonly isRuleFailurePopoverOpen: boolean - readonly showCommitLengthWarning: boolean - readonly repoRuleCommitMessageFailures: RepoRulesMetadataFailures readonly repoRuleCommitAuthorFailures: RepoRulesMetadataFailures readonly repoRuleBranchNameFailures: RepoRulesMetadataFailures @@ -237,9 +239,6 @@ export class CommitMessage extends React.Component< isCommittingStatusMessage: '', repoRulesEnabled: false, isRuleFailurePopoverOpen: false, - // TODO: do a proper retrieval rather than pinging localStorage (use AppState?) - // (current solution requires a tab switch to hot reload) - showCommitLengthWarning: localStorage.getItem("showCommitLengthWarning") === "1", repoRuleCommitMessageFailures: new RepoRulesMetadataFailures(), repoRuleCommitAuthorFailures: new RepoRulesMetadataFailures(), repoRuleBranchNameFailures: new RepoRulesMetadataFailures(), @@ -1349,7 +1348,7 @@ export class CommitMessage extends React.Component< this.state.repoRuleCommitMessageFailures.status !== 'pass' const showSummaryLengthHint = - this.state.showCommitLengthWarning && + this.props.showCommitLengthWarning && !showRepoRuleCommitMessageFailureHint && this.state.summary.length > IdealSummaryLength @@ -1365,7 +1364,7 @@ export class CommitMessage extends React.Component< ? this.COMMIT_MSG_ERROR_BTN_ID : undefined - const { placeholder, isCommitting, commitSpellcheckEnabled } = this.props + const { placeholder, isCommitting, commitSpellcheckEnabled, showCommitLengthWarning } = this.props return ( // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions @@ -1394,6 +1393,7 @@ export class CommitMessage extends React.Component< onContextMenu={this.onAutocompletingInputContextMenu} readOnly={isCommitting === true} spellcheck={commitSpellcheckEnabled} + showCommitLengthWarning={showCommitLengthWarning} /> {showRepoRuleCommitMessageFailureHint && this.renderRepoRuleCommitMessageFailureHint()} @@ -1421,6 +1421,7 @@ export class CommitMessage extends React.Component< onContextMenu={this.onAutocompletingInputContextMenu} readOnly={isCommitting === true} spellcheck={commitSpellcheckEnabled} + showCommitLengthWarning={showCommitLengthWarning} /> {this.renderActionBar()} diff --git a/app/src/ui/changes/sidebar.tsx b/app/src/ui/changes/sidebar.tsx index 03c2687fd9..586de02cd2 100644 --- a/app/src/ui/changes/sidebar.tsx +++ b/app/src/ui/changes/sidebar.tsx @@ -78,6 +78,8 @@ interface IChangesSidebarProps { readonly shouldNudgeToCommit: boolean readonly commitSpellcheckEnabled: boolean + + readonly showCommitLengthWarning: boolean } export class ChangesSidebar extends React.Component { @@ -432,6 +434,7 @@ export class ChangesSidebar extends React.Component { currentBranchProtected={currentBranchProtected} shouldNudgeToCommit={this.props.shouldNudgeToCommit} commitSpellcheckEnabled={this.props.commitSpellcheckEnabled} + showCommitLengthWarning={this.props.showCommitLengthWarning} currentRepoRulesInfo={currentRepoRulesInfo} aheadBehind={this.props.aheadBehind} /> diff --git a/app/src/ui/commit-message/commit-message-dialog.tsx b/app/src/ui/commit-message/commit-message-dialog.tsx index ee9b77431d..657382dc27 100644 --- a/app/src/ui/commit-message/commit-message-dialog.tsx +++ b/app/src/ui/commit-message/commit-message-dialog.tsx @@ -54,6 +54,8 @@ interface ICommitMessageDialogProps { */ readonly commitSpellcheckEnabled: boolean + readonly showCommitLengthWarning: boolean + /** Text for the ok button */ readonly dialogButtonText: string @@ -140,6 +142,7 @@ export class CommitMessageDialog extends React.Component< aheadBehind={this.props.aheadBehind} showNoWriteAccess={this.props.showNoWriteAccess} commitSpellcheckEnabled={this.props.commitSpellcheckEnabled} + showCommitLengthWarning={this.props.showCommitLengthWarning} onCoAuthorsUpdated={this.onCoAuthorsUpdated} onShowCoAuthoredByChanged={this.onShowCoAuthorsChanged} onConfirmCommitWithUnknownCoAuthors={ @@ -155,6 +158,9 @@ export class CommitMessageDialog extends React.Component< onCommitSpellcheckEnabledChanged={ this.onCommitSpellcheckEnabledChanged } + onShowCommitLengthWarningChanged={ + this.onShowCommitLengthWarningChanged + } repositoryAccount={this.props.repositoryAccount} onStopAmending={this.onStopAmending} onShowCreateForkDialog={this.onShowCreateForkDialog} @@ -187,6 +193,9 @@ export class CommitMessageDialog extends React.Component< private onCommitSpellcheckEnabledChanged = (enabled: boolean) => this.props.dispatcher.setCommitSpellcheckEnabled(enabled) + private onShowCommitLengthWarningChanged = (enabled: boolean) => + this.props.dispatcher.setShowCommitLengthWarning(enabled) + private onStopAmending = () => this.props.dispatcher.stopAmendingRepository(this.props.repository) diff --git a/app/src/ui/repository.tsx b/app/src/ui/repository.tsx index 01e75ded95..ea25eaabd6 100644 --- a/app/src/ui/repository.tsx +++ b/app/src/ui/repository.tsx @@ -54,6 +54,7 @@ interface IRepositoryViewProps { readonly askForConfirmationOnCheckoutCommit: boolean readonly focusCommitMessage: boolean readonly commitSpellcheckEnabled: boolean + readonly showCommitLengthWarning: boolean readonly accounts: ReadonlyArray /** @@ -250,6 +251,7 @@ export class RepositoryView extends React.Component< this.props.currentTutorialStep === TutorialStep.MakeCommit } commitSpellcheckEnabled={this.props.commitSpellcheckEnabled} + showCommitLengthWarning={this.props.showCommitLengthWarning} /> ) } From 6d91edc5b2f9c64e40d2da5bc9464e31d801e9e8 Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Mon, 11 Sep 2023 18:40:15 -0400 Subject: [PATCH 10/34] run linter (yarn prettier --write) --- app/src/lib/stores/app-store.ts | 10 +++++----- app/src/ui/changes/commit-message.tsx | 8 ++++++-- app/src/ui/commit-message/commit-message-dialog.tsx | 2 +- app/src/ui/preferences/preferences.tsx | 12 +++++++++--- app/src/ui/preferences/prompts.tsx | 12 +++++++----- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index 99a29fbdd1..26f2d483f2 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -517,7 +517,7 @@ export class AppStore extends TypedBaseStore { private useWindowsOpenSSH: boolean = false private showCommitLengthWarning: boolean = false - + private hasUserViewedStash = false private repositoryIndicatorsEnabled: boolean @@ -2097,7 +2097,7 @@ export class AppStore extends TypedBaseStore { confirmRepoRemovalDefault ) - this.showCommitLengthWarning = getBoolean( + this.showCommitLengthWarning = getBoolean( showCommitLengthWarningKey, showCommitLengthWarningDefault ) @@ -3543,9 +3543,9 @@ export class AppStore extends TypedBaseStore { } public _setShowCommitLengthWarning(showCommitLengthWarning: boolean) { - setBoolean("showCommitLengthWarning", showCommitLengthWarning) - this.showCommitLengthWarning = showCommitLengthWarning - this.emitUpdate() + setBoolean('showCommitLengthWarning', showCommitLengthWarning) + this.showCommitLengthWarning = showCommitLengthWarning + this.emitUpdate() } public _setNotificationsEnabled(notificationsEnabled: boolean) { diff --git a/app/src/ui/changes/commit-message.tsx b/app/src/ui/changes/commit-message.tsx index 28f4d40d60..8834f04c49 100644 --- a/app/src/ui/changes/commit-message.tsx +++ b/app/src/ui/changes/commit-message.tsx @@ -119,7 +119,6 @@ interface ICommitMessageProps { readonly showCommitLengthWarning: boolean - /** Optional text to override default commit button text */ readonly commitButtonText?: string @@ -1364,7 +1363,12 @@ export class CommitMessage extends React.Component< ? this.COMMIT_MSG_ERROR_BTN_ID : undefined - const { placeholder, isCommitting, commitSpellcheckEnabled, showCommitLengthWarning } = this.props + const { + placeholder, + isCommitting, + commitSpellcheckEnabled, + showCommitLengthWarning, + } = this.props return ( // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions diff --git a/app/src/ui/commit-message/commit-message-dialog.tsx b/app/src/ui/commit-message/commit-message-dialog.tsx index 657382dc27..b634f172d6 100644 --- a/app/src/ui/commit-message/commit-message-dialog.tsx +++ b/app/src/ui/commit-message/commit-message-dialog.tsx @@ -159,7 +159,7 @@ export class CommitMessageDialog extends React.Component< this.onCommitSpellcheckEnabledChanged } onShowCommitLengthWarningChanged={ - this.onShowCommitLengthWarningChanged + this.onShowCommitLengthWarningChanged } repositoryAccount={this.props.repositoryAccount} onStopAmending={this.onStopAmending} diff --git a/app/src/ui/preferences/preferences.tsx b/app/src/ui/preferences/preferences.tsx index d78741c5bf..94948626e7 100644 --- a/app/src/ui/preferences/preferences.tsx +++ b/app/src/ui/preferences/preferences.tsx @@ -391,7 +391,9 @@ export class Preferences extends React.Component< this.onUncommittedChangesStrategyChanged } showCommitLengthWarning={this.state.showCommitLengthWarning} - onShowCommitLengthWarningChanged={this.onShowCommitLengthWarningChanged} + onShowCommitLengthWarningChanged={ + this.onShowCommitLengthWarningChanged + } /> ) break @@ -436,7 +438,9 @@ export class Preferences extends React.Component< this.setState({ useWindowsOpenSSH }) } - private onShowCommitLengthWarningChanged = (showCommitLengthWarning: boolean) => { + private onShowCommitLengthWarningChanged = ( + showCommitLengthWarning: boolean + ) => { this.setState({ showCommitLengthWarning }) } @@ -583,7 +587,9 @@ export class Preferences extends React.Component< } this.props.dispatcher.setUseWindowsOpenSSH(this.state.useWindowsOpenSSH) - this.props.dispatcher.setShowCommitLengthWarning(this.state.showCommitLengthWarning) + this.props.dispatcher.setShowCommitLengthWarning( + this.state.showCommitLengthWarning + ) this.props.dispatcher.setNotificationsEnabled( this.state.notificationsEnabled ) diff --git a/app/src/ui/preferences/prompts.tsx b/app/src/ui/preferences/prompts.tsx index 4d151b79a6..b80239f0f4 100644 --- a/app/src/ui/preferences/prompts.tsx +++ b/app/src/ui/preferences/prompts.tsx @@ -237,11 +237,13 @@ export class Prompts extends React.Component<

Style Guides

From 72ebde621b89ff5dcc8c2a0f23b2c147f0a491e5 Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Mon, 11 Sep 2023 18:46:49 -0400 Subject: [PATCH 11/34] missed line in showCommitLengthWarning init cleanup --- app/src/lib/stores/app-store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index 26f2d483f2..08eb28b4b4 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -3543,7 +3543,7 @@ export class AppStore extends TypedBaseStore { } public _setShowCommitLengthWarning(showCommitLengthWarning: boolean) { - setBoolean('showCommitLengthWarning', showCommitLengthWarning) + setBoolean(showCommitLengthWarningKey, showCommitLengthWarning) this.showCommitLengthWarning = showCommitLengthWarning this.emitUpdate() } From 130af40bbf8760cc86368813b0798d95d597ffdc Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Mon, 11 Sep 2023 18:51:24 -0400 Subject: [PATCH 12/34] enable showCommitLengthWarning by default --- app/src/lib/stores/app-store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index 08eb28b4b4..391401afd6 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -351,7 +351,7 @@ const pullRequestFileListConfigKey: string = 'pull-request-files-width' const askToMoveToApplicationsFolderDefault: boolean = true const confirmRepoRemovalDefault: boolean = true -const showCommitLengthWarningDefault: boolean = false +const showCommitLengthWarningDefault: boolean = true const confirmDiscardChangesDefault: boolean = true const confirmDiscardChangesPermanentlyDefault: boolean = true const confirmDiscardStashDefault: boolean = true From 5ab3a694f6324eb59c3fcbda932ace64378ef69c Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Thu, 14 Sep 2023 08:50:44 -0400 Subject: [PATCH 13/34] Reword repository indicator fetch setting --- app/src/ui/preferences/advanced.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index 4eeac8ace8..f542382b62 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -76,17 +76,22 @@ export class Advanced extends React.Component<

Background updates

-

- Allows the display of up-to-date status indicators in the repository - list. Disabling this may improve performance with many repositories. +

+ This requires the periodic fetching of repositories that are not + currently open. Turning this off will not stop the periodic fetching + of your open repository.

{this.renderSSHSettings()} From 1315b179f7e6678615242e42396998b75d92998f Mon Sep 17 00:00:00 2001 From: Daeraxa <58074586+Daeraxa@users.noreply.github.com> Date: Fri, 15 Sep 2023 17:04:32 +0100 Subject: [PATCH 14/34] add pulsar editor as an option --- app/src/lib/editors/linux.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts index d7a0308b3c..025b6df0e6 100644 --- a/app/src/lib/editors/linux.ts +++ b/app/src/lib/editors/linux.ts @@ -147,6 +147,10 @@ const editors: ILinuxExternalEditor[] = [ name: 'Mousepad', paths: ['/usr/bin/mousepad'], }, + { + name: 'Pulsar', + paths: ['/usr/bin/pulsar'], + }, ] async function getAvailablePath(paths: string[]): Promise { From bda42ef12d81cc295c5a7f5520083944d93d8468 Mon Sep 17 00:00:00 2001 From: Daeraxa <58074586+Daeraxa@users.noreply.github.com> Date: Fri, 15 Sep 2023 17:07:15 +0100 Subject: [PATCH 15/34] add pulsar to editor list --- docs/technical/editor-integration.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index b365f1613b..9351eadc1a 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -351,6 +351,7 @@ These editors are currently supported: - [JetBrains PHPStorm](https://www.jetbrains.com/phpstorm/) - [JetBrains WebStorm](https://www.jetbrains.com/webstorm/) - [Emacs](https://www.gnu.org/software/emacs/) + - [Pulsar](https://pulsar-edit.dev/) These are defined in a list at the top of the file: From 01cbd487bfa5e2d20e62270991bce902b100a789 Mon Sep 17 00:00:00 2001 From: Markus Olsson Date: Mon, 18 Sep 2023 10:04:07 +0200 Subject: [PATCH 16/34] Only change radius when showing focus outline --- app/styles/ui/_tab-bar.scss | 2 +- app/styles/ui/_vertical-segmented-control.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/styles/ui/_tab-bar.scss b/app/styles/ui/_tab-bar.scss index 77aa5eb717..31b86d5d41 100644 --- a/app/styles/ui/_tab-bar.scss +++ b/app/styles/ui/_tab-bar.scss @@ -126,7 +126,7 @@ border-radius: var(--border-radius); min-width: 150px; - &:focus { + &:focus-visible { border-radius: var(--outlined-border-radius); outline-offset: 3px; } diff --git a/app/styles/ui/_vertical-segmented-control.scss b/app/styles/ui/_vertical-segmented-control.scss index fe86359b7c..f022eac9a8 100644 --- a/app/styles/ui/_vertical-segmented-control.scss +++ b/app/styles/ui/_vertical-segmented-control.scss @@ -77,7 +77,7 @@ fieldset.vertical-segmented-control { } } - &:focus li { + &:focus-visible li { &:first-child { border-top-left-radius: var(--outlined-border-radius); border-top-right-radius: var(--outlined-border-radius); From e404ce075e46e99db8f0e60a4b2a3a88b70aab6e Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:41:24 -0400 Subject: [PATCH 17/34] Add additional async check --- app/src/ui/create-branch/create-branch-dialog.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/ui/create-branch/create-branch-dialog.tsx b/app/src/ui/create-branch/create-branch-dialog.tsx index b0633a8a10..f8d49dab2a 100644 --- a/app/src/ui/create-branch/create-branch-dialog.tsx +++ b/app/src/ui/create-branch/create-branch-dialog.tsx @@ -412,6 +412,12 @@ export class CreateBranch extends React.Component< this.props.repository ) + // Make sure user branch name hasn't changed during parsing of repo rules + // (async due to a config retrieval of users with commit signing repo rules) + if (this.state.branchName !== branchName) { + return + } + const { status } = branchNamePatterns.getFailedRules(branchName) // Only possible kind of failures is branch name pattern failures and creation restriction From b3c5b9c674d6e0aa201e3bf8c3e7a4e8557b1432 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:46:07 -0400 Subject: [PATCH 18/34] sp description --- app/src/ui/preferences/advanced.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index f542382b62..549f7723a4 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -83,10 +83,10 @@ export class Advanced extends React.Component< : CheckboxValue.Off } onChange={this.onRepositoryIndicatorsEnabledChanged} - ariaDescribedBy="periodic-fecth-desription" + ariaDescribedBy="periodic-fecth-description" />

This requires the periodic fetching of repositories that are not From 062790af6a61b714f5deb1100fcfb412f074298b Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:47:13 -0400 Subject: [PATCH 19/34] Selected not open --- app/src/ui/preferences/advanced.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index 549f7723a4..fefed5bc07 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -73,6 +73,7 @@ export class Advanced extends React.Component< public render() { return ( + x

Background updates

This requires the periodic fetching of repositories that are not - currently open. Turning this off will not stop the periodic fetching - of your open repository. + currently selected. Turning this off will not stop the periodic + fetching of your currently selected repository.

{this.renderSSHSettings()} From e6ca62b2a6e38f45e4b68cc273c8a4c8863fe1c8 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:49:03 -0400 Subject: [PATCH 20/34] Add performance note --- app/src/ui/preferences/advanced.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index fefed5bc07..0c02660b9b 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -92,7 +92,8 @@ export class Advanced extends React.Component< > This requires the periodic fetching of repositories that are not currently selected. Turning this off will not stop the periodic - fetching of your currently selected repository. + fetching of your currently selected repository, but may improve + overall performance of the app for users with many repositories.

{this.renderSSHSettings()} From d6af03fd9b3b846b5f16d8e78336d8aea6210e62 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:53:31 -0400 Subject: [PATCH 21/34] Behavior targeted wording Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> --- app/src/ui/preferences/advanced.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index 0c02660b9b..ea3107249a 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -77,7 +77,7 @@ export class Advanced extends React.Component<

Background updates

Date: Mon, 18 Sep 2023 12:53:57 -0400 Subject: [PATCH 22/34] Where did that x come from --- app/src/ui/preferences/advanced.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index ea3107249a..4265726dc6 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -73,7 +73,6 @@ export class Advanced extends React.Component< public render() { return ( - x

Background updates

Date: Mon, 18 Sep 2023 12:56:08 -0400 Subject: [PATCH 23/34] status is redundant --- app/src/ui/preferences/advanced.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index 4265726dc6..3743e160d5 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -76,7 +76,7 @@ export class Advanced extends React.Component<

Background updates

Date: Tue, 19 Sep 2023 15:45:22 +0200 Subject: [PATCH 24/34] Fix regression with comment bubbles in notification dialog --- app/styles/ui/dialogs/_pull-request-comment-like.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/styles/ui/dialogs/_pull-request-comment-like.scss b/app/styles/ui/dialogs/_pull-request-comment-like.scss index e6247a138d..727dabfa2b 100644 --- a/app/styles/ui/dialogs/_pull-request-comment-like.scss +++ b/app/styles/ui/dialogs/_pull-request-comment-like.scss @@ -153,8 +153,8 @@ display: inline-block; content: ''; pointer-events: none; - border: 7.5px solid transparent; - left: 7px; + border: 8px solid transparent; + left: 6px; } &::before { From 2d493e7286fbc8509206cfe86798f070a63b013c Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Tue, 19 Sep 2023 08:32:32 -0400 Subject: [PATCH 25/34] Long description --- app/src/ui/preferences/advanced.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/ui/preferences/advanced.tsx b/app/src/ui/preferences/advanced.tsx index 3743e160d5..37680d487b 100644 --- a/app/src/ui/preferences/advanced.tsx +++ b/app/src/ui/preferences/advanced.tsx @@ -76,7 +76,7 @@ export class Advanced extends React.Component<

Background updates

- This requires the periodic fetching of repositories that are not - currently selected. Turning this off will not stop the periodic - fetching of your currently selected repository, but may improve - overall performance of the app for users with many repositories. +

+ These icons indicate which repositories have local or remote + changes, and require the periodic fetching of repositories that + are not currently selected. +

+

+ Turning this off will not stop the periodic fetching of your + currently selected repository, but may improve overall app + performance for users with many repositories. +

{this.renderSSHSettings()} From 95bdd6653a098ab5fe70a842459643a07bbd3f0e Mon Sep 17 00:00:00 2001 From: Ryan Stillings Date: Wed, 20 Sep 2023 09:08:30 -0400 Subject: [PATCH 26/34] Apply suggestions from code review Co-authored-by: tidy-dev <75402236+tidy-dev@users.noreply.github.com> --- app/src/lib/stores/app-store.ts | 12 ++++++++++-- .../ui/autocompletion/autocompleting-text-input.tsx | 2 -- app/src/ui/changes/changes-list.tsx | 4 ---- app/src/ui/changes/commit-message.tsx | 3 --- app/src/ui/commit-message/commit-message-dialog.tsx | 6 ------ app/src/ui/preferences/prompts.tsx | 2 +- 6 files changed, 11 insertions(+), 18 deletions(-) diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index 391401afd6..d54f2b4e89 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -351,7 +351,7 @@ const pullRequestFileListConfigKey: string = 'pull-request-files-width' const askToMoveToApplicationsFolderDefault: boolean = true const confirmRepoRemovalDefault: boolean = true -const showCommitLengthWarningDefault: boolean = true +const showCommitLengthWarningDefault: boolean = false const confirmDiscardChangesDefault: boolean = true const confirmDiscardChangesPermanentlyDefault: boolean = true const confirmDiscardStashDefault: boolean = true @@ -516,7 +516,7 @@ export class AppStore extends TypedBaseStore { private useWindowsOpenSSH: boolean = false - private showCommitLengthWarning: boolean = false + private showCommitLengthWarning: boolean = showCommitLengthWarningDefault private hasUserViewedStash = false @@ -2097,6 +2097,14 @@ export class AppStore extends TypedBaseStore { confirmRepoRemovalDefault ) + // We're planning to flip the default value to false. As such we'll + // start persisting the current behavior to localstorage, so we + // can change the default in the future without affecting current + // users by removing this if statement. + if (getBoolean(showCommitLengthWarningKey) === undefined) { + setBoolean( showCommitLengthWarningKey, true) + } + this.showCommitLengthWarning = getBoolean( showCommitLengthWarningKey, showCommitLengthWarningDefault diff --git a/app/src/ui/autocompletion/autocompleting-text-input.tsx b/app/src/ui/autocompletion/autocompleting-text-input.tsx index e5616d4cd5..2fc0569fe8 100644 --- a/app/src/ui/autocompletion/autocompleting-text-input.tsx +++ b/app/src/ui/autocompletion/autocompleting-text-input.tsx @@ -51,8 +51,6 @@ interface IAutocompletingTextInputProps { /** Indicates if input field applies spellcheck */ readonly spellcheck?: boolean - readonly showCommitLengthWarning?: boolean - /** Indicates if it should always try to autocomplete. Optional (defaults to false) */ readonly alwaysAutocomplete?: boolean diff --git a/app/src/ui/changes/changes-list.tsx b/app/src/ui/changes/changes-list.tsx index 044152f75b..2eabee6a61 100644 --- a/app/src/ui/changes/changes-list.tsx +++ b/app/src/ui/changes/changes-list.tsx @@ -832,7 +832,6 @@ export class ChangesList extends React.Component< onShowPopup={this.onShowPopup} onShowFoldout={this.onShowFoldout} onCommitSpellcheckEnabledChanged={this.onCommitSpellcheckEnabledChanged} - onShowCommitLengthWarningChanged={this.onShowCommitLengthWarningChanged} onStopAmending={this.onStopAmending} onShowCreateForkDialog={this.onShowCreateForkDialog} /> @@ -870,9 +869,6 @@ export class ChangesList extends React.Component< private onCommitSpellcheckEnabledChanged = (enabled: boolean) => this.props.dispatcher.setCommitSpellcheckEnabled(enabled) - private onShowCommitLengthWarningChanged = (enabled: boolean) => - this.props.dispatcher.setShowCommitLengthWarning(enabled) - private onStopAmending = () => this.props.dispatcher.stopAmendingRepository(this.props.repository) diff --git a/app/src/ui/changes/commit-message.tsx b/app/src/ui/changes/commit-message.tsx index 8834f04c49..2b62a9c810 100644 --- a/app/src/ui/changes/commit-message.tsx +++ b/app/src/ui/changes/commit-message.tsx @@ -155,7 +155,6 @@ interface ICommitMessageProps { readonly onShowPopup: (popup: Popup) => void readonly onShowFoldout: (foldout: Foldout) => void readonly onCommitSpellcheckEnabledChanged: (enabled: boolean) => void - readonly onShowCommitLengthWarningChanged: (enabled: boolean) => void readonly onStopAmending: () => void readonly onShowCreateForkDialog: () => void } @@ -1397,7 +1396,6 @@ export class CommitMessage extends React.Component< onContextMenu={this.onAutocompletingInputContextMenu} readOnly={isCommitting === true} spellcheck={commitSpellcheckEnabled} - showCommitLengthWarning={showCommitLengthWarning} /> {showRepoRuleCommitMessageFailureHint && this.renderRepoRuleCommitMessageFailureHint()} @@ -1425,7 +1423,6 @@ export class CommitMessage extends React.Component< onContextMenu={this.onAutocompletingInputContextMenu} readOnly={isCommitting === true} spellcheck={commitSpellcheckEnabled} - showCommitLengthWarning={showCommitLengthWarning} /> {this.renderActionBar()} diff --git a/app/src/ui/commit-message/commit-message-dialog.tsx b/app/src/ui/commit-message/commit-message-dialog.tsx index b634f172d6..9d0fe97668 100644 --- a/app/src/ui/commit-message/commit-message-dialog.tsx +++ b/app/src/ui/commit-message/commit-message-dialog.tsx @@ -158,9 +158,6 @@ export class CommitMessageDialog extends React.Component< onCommitSpellcheckEnabledChanged={ this.onCommitSpellcheckEnabledChanged } - onShowCommitLengthWarningChanged={ - this.onShowCommitLengthWarningChanged - } repositoryAccount={this.props.repositoryAccount} onStopAmending={this.onStopAmending} onShowCreateForkDialog={this.onShowCreateForkDialog} @@ -193,9 +190,6 @@ export class CommitMessageDialog extends React.Component< private onCommitSpellcheckEnabledChanged = (enabled: boolean) => this.props.dispatcher.setCommitSpellcheckEnabled(enabled) - private onShowCommitLengthWarningChanged = (enabled: boolean) => - this.props.dispatcher.setShowCommitLengthWarning(enabled) - private onStopAmending = () => this.props.dispatcher.stopAmendingRepository(this.props.repository) diff --git a/app/src/ui/preferences/prompts.tsx b/app/src/ui/preferences/prompts.tsx index b80239f0f4..f034f4aafb 100644 --- a/app/src/ui/preferences/prompts.tsx +++ b/app/src/ui/preferences/prompts.tsx @@ -235,7 +235,7 @@ export class Prompts extends React.Component< />
-

Style Guides

+

Commit Length

Date: Wed, 20 Sep 2023 10:52:44 -0400 Subject: [PATCH 27/34] Add ariaExpanded to dropdown button --- app/src/ui/lib/conflicts/unmerged-file.tsx | 20 +++++++++++++++---- .../dialog/conflicts-dialog.tsx | 8 ++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/src/ui/lib/conflicts/unmerged-file.tsx b/app/src/ui/lib/conflicts/unmerged-file.tsx index 5e57c0e5cd..7927433e28 100644 --- a/app/src/ui/lib/conflicts/unmerged-file.tsx +++ b/app/src/ui/lib/conflicts/unmerged-file.tsx @@ -73,6 +73,8 @@ export const renderUnmergedFile: React.FunctionComponent<{ readonly resolvedExternalEditor: string | null readonly openFileInExternalEditor: (path: string) => void readonly dispatcher: Dispatcher + readonly isFileResolutionOptionsMenuOpen: boolean, + readonly setFileResolutionOptionsMenu: (isFileResolutionOptionsMenuOpen: boolean) => void }> = props => { if ( isConflictWithMarkers(props.status) && @@ -88,6 +90,8 @@ export const renderUnmergedFile: React.FunctionComponent<{ dispatcher: props.dispatcher, ourBranch: props.ourBranch, theirBranch: props.theirBranch, + isFileResolutionOptionsMenuOpen: props.isFileResolutionOptionsMenuOpen, + setFileResolutionOptionsMenu: props.setFileResolutionOptionsMenu }) } if ( @@ -223,6 +227,8 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ readonly dispatcher: Dispatcher readonly ourBranch?: string readonly theirBranch?: string + readonly isFileResolutionOptionsMenuOpen: boolean, + readonly setFileResolutionOptionsMenu: (isFileResolutionOptionsMenuOpen: boolean) => void }> = props => { const humanReadableConflicts = calculateConflicts( props.status.conflictMarkerCount @@ -240,7 +246,8 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ props.dispatcher, props.status, props.ourBranch, - props.theirBranch + props.theirBranch, + props.setFileResolutionOptionsMenu ) const content = ( @@ -263,6 +270,7 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ className="small-button button-group-item arrow-menu" ariaLabel="File resolution options" ariaHaspopup="menu" + ariaExpanded={props.isFileResolutionOptionsMenuOpen} > @@ -315,8 +323,9 @@ const makeMarkerConflictDropdownClickHandler = ( repository: Repository, dispatcher: Dispatcher, status: ConflictsWithMarkers, - ourBranch?: string, - theirBranch?: string + ourBranch: string | undefined, + theirBranch: string | undefined, + setFileResolutionOptionsMenu: (isFileResolutionOptionsMenuOpen: boolean) => void ) => { return () => { const absoluteFilePath = join(repository.path, relativeFilePath) @@ -341,7 +350,10 @@ const makeMarkerConflictDropdownClickHandler = ( theirBranch ), ] - showContextualMenu(items) + setFileResolutionOptionsMenu(true) + showContextualMenu(items).then(() => { + setFileResolutionOptionsMenu(false) + }) } } diff --git a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx index e07d996601..3e19069085 100644 --- a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx +++ b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx @@ -45,6 +45,7 @@ interface IConflictsDialogProps { interface IConflictsDialogState { readonly isCommitting: boolean readonly isAborting: boolean + readonly isFileResolutionOptionsMenuOpen: boolean } /** @@ -61,6 +62,7 @@ export class ConflictsDialog extends React.Component< this.state = { isCommitting: false, isAborting: false, + isFileResolutionOptionsMenuOpen: false, } } @@ -116,6 +118,10 @@ export class ConflictsDialog extends React.Component< private openThisRepositoryInShell = () => this.props.openRepositoryInShell(this.props.repository) + private setFileResolutionOptionsMenu = (isFileResolutionOptionsMenuOpen: boolean) => { + this.setState({ isFileResolutionOptionsMenuOpen }) + } + /** * Renders the list of conflicts in the dialog */ @@ -136,6 +142,8 @@ export class ConflictsDialog extends React.Component< manualResolution: this.props.manualResolutions.get(f.path), ourBranch: this.props.ourBranch, theirBranch: this.props.theirBranch, + isFileResolutionOptionsMenuOpen: this.state.isFileResolutionOptionsMenuOpen, + setFileResolutionOptionsMenu: this.setFileResolutionOptionsMenu, }) : null )} From 6b3d555f19d7622f3be674a8fed26199851ad468 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Wed, 20 Sep 2023 10:56:20 -0400 Subject: [PATCH 28/34] Linter.. --- app/src/ui/lib/conflicts/unmerged-file.tsx | 18 ++++++++++++------ .../dialog/conflicts-dialog.tsx | 7 +++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/ui/lib/conflicts/unmerged-file.tsx b/app/src/ui/lib/conflicts/unmerged-file.tsx index 7927433e28..3efc8c98e3 100644 --- a/app/src/ui/lib/conflicts/unmerged-file.tsx +++ b/app/src/ui/lib/conflicts/unmerged-file.tsx @@ -73,8 +73,10 @@ export const renderUnmergedFile: React.FunctionComponent<{ readonly resolvedExternalEditor: string | null readonly openFileInExternalEditor: (path: string) => void readonly dispatcher: Dispatcher - readonly isFileResolutionOptionsMenuOpen: boolean, - readonly setFileResolutionOptionsMenu: (isFileResolutionOptionsMenuOpen: boolean) => void + readonly isFileResolutionOptionsMenuOpen: boolean + readonly setFileResolutionOptionsMenu: ( + isFileResolutionOptionsMenuOpen: boolean + ) => void }> = props => { if ( isConflictWithMarkers(props.status) && @@ -91,7 +93,7 @@ export const renderUnmergedFile: React.FunctionComponent<{ ourBranch: props.ourBranch, theirBranch: props.theirBranch, isFileResolutionOptionsMenuOpen: props.isFileResolutionOptionsMenuOpen, - setFileResolutionOptionsMenu: props.setFileResolutionOptionsMenu + setFileResolutionOptionsMenu: props.setFileResolutionOptionsMenu, }) } if ( @@ -227,8 +229,10 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ readonly dispatcher: Dispatcher readonly ourBranch?: string readonly theirBranch?: string - readonly isFileResolutionOptionsMenuOpen: boolean, - readonly setFileResolutionOptionsMenu: (isFileResolutionOptionsMenuOpen: boolean) => void + readonly isFileResolutionOptionsMenuOpen: boolean + readonly setFileResolutionOptionsMenu: ( + isFileResolutionOptionsMenuOpen: boolean + ) => void }> = props => { const humanReadableConflicts = calculateConflicts( props.status.conflictMarkerCount @@ -325,7 +329,9 @@ const makeMarkerConflictDropdownClickHandler = ( status: ConflictsWithMarkers, ourBranch: string | undefined, theirBranch: string | undefined, - setFileResolutionOptionsMenu: (isFileResolutionOptionsMenuOpen: boolean) => void + setFileResolutionOptionsMenu: ( + isFileResolutionOptionsMenuOpen: boolean + ) => void ) => { return () => { const absoluteFilePath = join(repository.path, relativeFilePath) diff --git a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx index 3e19069085..0a269be53e 100644 --- a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx +++ b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx @@ -118,7 +118,9 @@ export class ConflictsDialog extends React.Component< private openThisRepositoryInShell = () => this.props.openRepositoryInShell(this.props.repository) - private setFileResolutionOptionsMenu = (isFileResolutionOptionsMenuOpen: boolean) => { + private setFileResolutionOptionsMenu = ( + isFileResolutionOptionsMenuOpen: boolean + ) => { this.setState({ isFileResolutionOptionsMenuOpen }) } @@ -142,7 +144,8 @@ export class ConflictsDialog extends React.Component< manualResolution: this.props.manualResolutions.get(f.path), ourBranch: this.props.ourBranch, theirBranch: this.props.theirBranch, - isFileResolutionOptionsMenuOpen: this.state.isFileResolutionOptionsMenuOpen, + isFileResolutionOptionsMenuOpen: + this.state.isFileResolutionOptionsMenuOpen, setFileResolutionOptionsMenu: this.setFileResolutionOptionsMenu, }) : null From 17a1b6247f4b8ef316550acb0f1edd6e468f60cd Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Wed, 20 Sep 2023 11:05:57 -0400 Subject: [PATCH 29/34] More consistent naming --- app/src/ui/lib/conflicts/unmerged-file.tsx | 14 +++++++------- .../dialog/conflicts-dialog.tsx | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/ui/lib/conflicts/unmerged-file.tsx b/app/src/ui/lib/conflicts/unmerged-file.tsx index 3efc8c98e3..e9eb0bdc97 100644 --- a/app/src/ui/lib/conflicts/unmerged-file.tsx +++ b/app/src/ui/lib/conflicts/unmerged-file.tsx @@ -74,7 +74,7 @@ export const renderUnmergedFile: React.FunctionComponent<{ readonly openFileInExternalEditor: (path: string) => void readonly dispatcher: Dispatcher readonly isFileResolutionOptionsMenuOpen: boolean - readonly setFileResolutionOptionsMenu: ( + readonly setIsFileResolutionOptionsMenuOpen: ( isFileResolutionOptionsMenuOpen: boolean ) => void }> = props => { @@ -93,7 +93,7 @@ export const renderUnmergedFile: React.FunctionComponent<{ ourBranch: props.ourBranch, theirBranch: props.theirBranch, isFileResolutionOptionsMenuOpen: props.isFileResolutionOptionsMenuOpen, - setFileResolutionOptionsMenu: props.setFileResolutionOptionsMenu, + setIsFileResolutionOptionsMenuOpen: props.setIsFileResolutionOptionsMenuOpen, }) } if ( @@ -230,7 +230,7 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ readonly ourBranch?: string readonly theirBranch?: string readonly isFileResolutionOptionsMenuOpen: boolean - readonly setFileResolutionOptionsMenu: ( + readonly setIsFileResolutionOptionsMenuOpen: ( isFileResolutionOptionsMenuOpen: boolean ) => void }> = props => { @@ -251,7 +251,7 @@ const renderConflictedFileWithConflictMarkers: React.FunctionComponent<{ props.status, props.ourBranch, props.theirBranch, - props.setFileResolutionOptionsMenu + props.setIsFileResolutionOptionsMenuOpen ) const content = ( @@ -329,7 +329,7 @@ const makeMarkerConflictDropdownClickHandler = ( status: ConflictsWithMarkers, ourBranch: string | undefined, theirBranch: string | undefined, - setFileResolutionOptionsMenu: ( + setIsFileResolutionOptionsMenuOpen: ( isFileResolutionOptionsMenuOpen: boolean ) => void ) => { @@ -356,9 +356,9 @@ const makeMarkerConflictDropdownClickHandler = ( theirBranch ), ] - setFileResolutionOptionsMenu(true) + setIsFileResolutionOptionsMenuOpen(true) showContextualMenu(items).then(() => { - setFileResolutionOptionsMenu(false) + setIsFileResolutionOptionsMenuOpen(false) }) } } diff --git a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx index 0a269be53e..0408146d73 100644 --- a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx +++ b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx @@ -118,7 +118,7 @@ export class ConflictsDialog extends React.Component< private openThisRepositoryInShell = () => this.props.openRepositoryInShell(this.props.repository) - private setFileResolutionOptionsMenu = ( + private setIsFileResolutionOptionsMenuOpen = ( isFileResolutionOptionsMenuOpen: boolean ) => { this.setState({ isFileResolutionOptionsMenuOpen }) @@ -146,7 +146,7 @@ export class ConflictsDialog extends React.Component< theirBranch: this.props.theirBranch, isFileResolutionOptionsMenuOpen: this.state.isFileResolutionOptionsMenuOpen, - setFileResolutionOptionsMenu: this.setFileResolutionOptionsMenu, + setIsFileResolutionOptionsMenuOpen: this.setIsFileResolutionOptionsMenuOpen, }) : null )} From 3d7466ae07e5900a1d7531c762a5b8d7f251a563 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Wed, 20 Sep 2023 11:09:27 -0400 Subject: [PATCH 30/34] Linter... again... got to fix my ide --- app/src/ui/lib/conflicts/unmerged-file.tsx | 3 ++- app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/ui/lib/conflicts/unmerged-file.tsx b/app/src/ui/lib/conflicts/unmerged-file.tsx index e9eb0bdc97..109587a84b 100644 --- a/app/src/ui/lib/conflicts/unmerged-file.tsx +++ b/app/src/ui/lib/conflicts/unmerged-file.tsx @@ -93,7 +93,8 @@ export const renderUnmergedFile: React.FunctionComponent<{ ourBranch: props.ourBranch, theirBranch: props.theirBranch, isFileResolutionOptionsMenuOpen: props.isFileResolutionOptionsMenuOpen, - setIsFileResolutionOptionsMenuOpen: props.setIsFileResolutionOptionsMenuOpen, + setIsFileResolutionOptionsMenuOpen: + props.setIsFileResolutionOptionsMenuOpen, }) } if ( diff --git a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx index 0408146d73..3f03383a44 100644 --- a/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx +++ b/app/src/ui/multi-commit-operation/dialog/conflicts-dialog.tsx @@ -146,7 +146,8 @@ export class ConflictsDialog extends React.Component< theirBranch: this.props.theirBranch, isFileResolutionOptionsMenuOpen: this.state.isFileResolutionOptionsMenuOpen, - setIsFileResolutionOptionsMenuOpen: this.setIsFileResolutionOptionsMenuOpen, + setIsFileResolutionOptionsMenuOpen: + this.setIsFileResolutionOptionsMenuOpen, }) : null )} From 96020f28d52ea3ff7001f3d0a27719c6fee9d5f2 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Wed, 20 Sep 2023 11:14:01 -0400 Subject: [PATCH 31/34] `yarn lint:fix` --- app/src/lib/stores/app-store.ts | 2 +- app/src/ui/changes/commit-message.tsx | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index d54f2b4e89..77efa794cc 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -2102,7 +2102,7 @@ export class AppStore extends TypedBaseStore { // can change the default in the future without affecting current // users by removing this if statement. if (getBoolean(showCommitLengthWarningKey) === undefined) { - setBoolean( showCommitLengthWarningKey, true) + setBoolean(showCommitLengthWarningKey, true) } this.showCommitLengthWarning = getBoolean( diff --git a/app/src/ui/changes/commit-message.tsx b/app/src/ui/changes/commit-message.tsx index 2b62a9c810..18910c1467 100644 --- a/app/src/ui/changes/commit-message.tsx +++ b/app/src/ui/changes/commit-message.tsx @@ -1362,12 +1362,7 @@ export class CommitMessage extends React.Component< ? this.COMMIT_MSG_ERROR_BTN_ID : undefined - const { - placeholder, - isCommitting, - commitSpellcheckEnabled, - showCommitLengthWarning, - } = this.props + const { placeholder, isCommitting, commitSpellcheckEnabled } = this.props return ( // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions From 62758adc3a12e40e54d88852ddc3346772ab89d9 Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Wed, 20 Sep 2023 12:54:52 -0400 Subject: [PATCH 32/34] Release 3.3.3-beta1 --- app/package.json | 2 +- changelog.json | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/package.json b/app/package.json index a83811ea91..bc1bb548ba 100644 --- a/app/package.json +++ b/app/package.json @@ -3,7 +3,7 @@ "productName": "GitHub Desktop", "bundleID": "com.github.GitHubClient", "companyName": "GitHub, Inc.", - "version": "3.3.2", + "version": "3.3.3-beta1", "main": "./main.js", "repository": { "type": "git", diff --git a/changelog.json b/changelog.json index 354828d479..c66999df22 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,13 @@ { "releases": { + "3.3.3-beta1": [ + "[Added] Add support for Pulsar code editor on Linux - #17397. Thanks @Daeraxa!", + "[Added] Add Eclipse IDE integrations for macOS - #16991. Thanks @yuzawa-san!", + "[Improved] Added a setting to allow toggling the availability of the commit message length warning - #17370. Thanks @rystills!", + "[Improved] Clarified the outcome of toggling the setting under \"Background Updates\" in the \"Advanced\" settings - #17389", + "[Fixed] Tip of comment bubbles in Pull Request notifications is rendered correctly - #17411", + "[Improved] Undo link when resolving conflicts is now a button - #17373" + ], "3.3.2": [ "[Fixed] Use forked repository when checking repo rules on forks - #17382. Thanks @vaindil!", "[Fixed] On macOs, the scroll bar only present when scrolling no longer overlaps conflict resolution buttons - #17374", From a1bd41a156c856092f5634399aeed48a3b1708ce Mon Sep 17 00:00:00 2001 From: Sergio Padrino Date: Thu, 21 Sep 2023 09:36:45 +0200 Subject: [PATCH 33/34] Bump electron to v24.8.3 --- app/.npmrc | 2 +- package.json | 2 +- script/validate-electron-version.ts | 2 +- yarn.lock | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/.npmrc b/app/.npmrc index 69d015300c..0138fba765 100644 --- a/app/.npmrc +++ b/app/.npmrc @@ -1,3 +1,3 @@ runtime = electron disturl = https://electronjs.org/headers -target = 24.4.0 +target = 24.8.3 diff --git a/package.json b/package.json index 64a8d678d7..27e6f3c100 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "@types/webpack-hot-middleware": "^2.25.6", "@types/webpack-merge": "^5.0.0", "@types/xml2js": "^0.4.11", - "electron": "24.4.0", + "electron": "24.8.3", "electron-packager": "^17.1.1", "electron-winstaller": "^5.0.0", "eslint-plugin-github": "^4.3.7", diff --git a/script/validate-electron-version.ts b/script/validate-electron-version.ts index 4289f57926..0764d52c95 100644 --- a/script/validate-electron-version.ts +++ b/script/validate-electron-version.ts @@ -16,7 +16,7 @@ type ChannelToValidate = 'production' | 'beta' */ const ValidElectronVersions: Record = { production: '24.4.0', - beta: '24.4.0', + beta: '24.8.3', } const channel = getChannelToValidate() diff --git a/yarn.lock b/yarn.lock index 15215702ef..fff14ef3f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3404,10 +3404,10 @@ electron-winstaller@*, electron-winstaller@^5.0.0: lodash.template "^4.2.2" temp "^0.9.0" -electron@24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-24.4.0.tgz#48d05561dab6a5835ec1a3a96852797f69824eea" - integrity sha512-A9YzLHRUA+HfYVf2daNv0jPXNCWShgcgcTaGntrZRGynQLEhDTbti9Lfmq2tjRKoEgXZ7qj+aJFw+tJZsT/Cfw== +electron@24.8.3: + version "24.8.3" + resolved "https://registry.yarnpkg.com/electron/-/electron-24.8.3.tgz#ea842167eaf0323961ff3bcce7237bdaf4f1317d" + integrity sha512-6YTsEOIMIQNnOz0Fj5gAWtwCuDd66iYKkuRJGyc80jKKYI49jBeH+R7ZZry9uiVu4T4bZgBN2FAN24XfCioQZA== dependencies: "@electron/get" "^2.0.0" "@types/node" "^18.11.18" From b7e88ca81aaca7a038332cabf5e8abb2dcb6ce7c Mon Sep 17 00:00:00 2001 From: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Date: Thu, 21 Sep 2023 07:55:43 -0400 Subject: [PATCH 34/34] Release 3.3.3-beta2 --- app/package.json | 2 +- changelog.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/package.json b/app/package.json index bc1bb548ba..330dda0dc0 100644 --- a/app/package.json +++ b/app/package.json @@ -3,7 +3,7 @@ "productName": "GitHub Desktop", "bundleID": "com.github.GitHubClient", "companyName": "GitHub, Inc.", - "version": "3.3.3-beta1", + "version": "3.3.3-beta2", "main": "./main.js", "repository": { "type": "git", diff --git a/changelog.json b/changelog.json index c66999df22..f66c810bef 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,6 @@ { "releases": { + "3.3.3-beta2": ["[Improved] Upgrade to Electron v24.8.3 - #17416"], "3.3.3-beta1": [ "[Added] Add support for Pulsar code editor on Linux - #17397. Thanks @Daeraxa!", "[Added] Add Eclipse IDE integrations for macOS - #16991. Thanks @yuzawa-san!",