diff --git a/app/package.json b/app/package.json index 5aaab4b7fdc..21b00ed50aa 100644 --- a/app/package.json +++ b/app/package.json @@ -3,7 +3,7 @@ "productName": "GitHub Desktop", "bundleID": "com.github.GitHubClient", "companyName": "GitHub, Inc.", - "version": "2.4.4-beta4", + "version": "2.5.1-beta1", "main": "./main.js", "repository": { "type": "git", diff --git a/app/src/lib/feature-flag.ts b/app/src/lib/feature-flag.ts index 26883aa0788..738a30034c4 100644 --- a/app/src/lib/feature-flag.ts +++ b/app/src/lib/feature-flag.ts @@ -169,7 +169,7 @@ export function enableForkyCreateBranchUI(): boolean { * are new commits upstream.) */ export function enableNDDBBanner(): boolean { - return enableBetaFeatures() + return false } /** diff --git a/app/src/lib/git/tag.ts b/app/src/lib/git/tag.ts index 0fdd0b8a48b..fe883868f2e 100644 --- a/app/src/lib/git/tag.ts +++ b/app/src/lib/git/tag.ts @@ -84,6 +84,7 @@ export async function fetchTagsToPush( branchName, '--follow-tags', '--dry-run', + '--no-verify', '--porcelain', ] diff --git a/app/src/lib/shell.ts b/app/src/lib/shell.ts index 062f762ef14..2420a232bbe 100644 --- a/app/src/lib/shell.ts +++ b/app/src/lib/shell.ts @@ -10,7 +10,7 @@ type IndexLookup = { /** * The names of any env vars that we shouldn't copy from the shell environment. */ -const BlacklistedNames = new Set(['LOCAL_GIT_DIRECTORY']) +const ExcludedEnvironmentVars = new Set(['LOCAL_GIT_DIRECTORY']) /** * Inspect whether the current process needs to be patched to get important @@ -152,7 +152,7 @@ async function getEnvironmentFromShell( */ function mergeEnvironmentVariables(env: IndexLookup) { for (const key in env) { - if (BlacklistedNames.has(key)) { + if (ExcludedEnvironmentVars.has(key)) { continue } diff --git a/app/src/lib/stores/git-store.ts b/app/src/lib/stores/git-store.ts index 797a4e97b03..2a7c137d11a 100644 --- a/app/src/lib/stores/git-store.ts +++ b/app/src/lib/stores/git-store.ts @@ -265,7 +265,15 @@ export class GitStore extends BaseStore { public async refreshTags() { const previousTags = this._localTags - this._localTags = await getAllTags(this.repository) + const newTags = await this.performFailableOperation(() => + getAllTags(this.repository) + ) + + if (newTags === undefined) { + return + } + + this._localTags = newTags if (previousTags !== null) { // We don't await for the emition of updates to finish diff --git a/app/src/ui/dispatcher/error-handlers.ts b/app/src/ui/dispatcher/error-handlers.ts index 1bf3fc70910..026033b1887 100644 --- a/app/src/ui/dispatcher/error-handlers.ts +++ b/app/src/ui/dispatcher/error-handlers.ts @@ -188,7 +188,10 @@ export async function gitAuthenticationErrorHandler( return null } -/** Handle git clone errors to give chance to retry error. */ +/** + * Handle git clone errors to give chance to retry error. + * Doesn't handle auth errors. + */ export async function gitCloneErrorHandler( error: Error, dispatcher: Dispatcher @@ -207,6 +210,12 @@ export async function gitCloneErrorHandler( return error } + const dugiteError = gitError.result.gitError + // don't catch this if this its an auth error + if (dugiteError !== null && AuthenticationErrors.has(dugiteError)) { + return error + } + const repository = e.metadata.repository if (!repository) { return error diff --git a/app/src/ui/history/commit-list-item.tsx b/app/src/ui/history/commit-list-item.tsx index 96d05a43b4d..c02c5cfa105 100644 --- a/app/src/ui/history/commit-list-item.tsx +++ b/app/src/ui/history/commit-list-item.tsx @@ -89,15 +89,30 @@ export class CommitListItem extends React.PureComponent< -
- {enableGitTagsDisplay() && - renderCommitListItemTags(this.props.commit.tags)} - {this.renderUnpushedIndicator()} -
+ {this.renderCommitIndicators()} ) } + private renderCommitIndicators() { + const tagIndicator = enableGitTagsDisplay() + ? renderCommitListItemTags(this.props.commit.tags) + : null + + const unpushedIndicator = this.renderUnpushedIndicator() + + if (tagIndicator || unpushedIndicator) { + return ( +
+ {tagIndicator} + {unpushedIndicator} +
+ ) + } + + return null + } + private renderUnpushedIndicator() { if (!this.props.showUnpushedIndicator) { return null diff --git a/app/src/ui/index.tsx b/app/src/ui/index.tsx index 9287817313c..3e3b5d445cf 100644 --- a/app/src/ui/index.tsx +++ b/app/src/ui/index.tsx @@ -4,6 +4,8 @@ import * as React from 'react' import * as ReactDOM from 'react-dom' import * as Path from 'path' +import * as moment from 'moment' + import { ipcRenderer, remote } from 'electron' import { App } from './app' @@ -86,6 +88,11 @@ process.env['LOCAL_GIT_DIRECTORY'] = Path.resolve(__dirname, 'git') // Focus Ring! -- A11ycasts #16: https://youtu.be/ilj2P5-5CjI require('wicg-focus-ring') +// setup this moment.js plugin so we can use easier +// syntax for formatting time duration +const momentDurationFormatSetup = require('moment-duration-format') +momentDurationFormatSetup(moment) + const startTime = performance.now() if (!process.env.TEST_ENV) { @@ -277,6 +284,7 @@ const dispatcher = new Dispatcher( ) dispatcher.registerErrorHandler(defaultErrorHandler) +dispatcher.registerErrorHandler(gitCloneErrorHandler) dispatcher.registerErrorHandler(upstreamAlreadyExistsHandler) dispatcher.registerErrorHandler(externalEditorErrorHandler) dispatcher.registerErrorHandler(openShellErrorHandler) @@ -292,7 +300,6 @@ dispatcher.registerErrorHandler(missingRepositoryHandler) dispatcher.registerErrorHandler(localChangesOverwrittenHandler) dispatcher.registerErrorHandler(rebaseConflictsHandler) dispatcher.registerErrorHandler(refusedWorkflowUpdate) -dispatcher.registerErrorHandler(gitCloneErrorHandler) document.body.classList.add(`platform-${process.platform}`) diff --git a/app/src/ui/relative-time.tsx b/app/src/ui/relative-time.tsx index 4454efb9ba4..3a709d3c338 100644 --- a/app/src/ui/relative-time.tsx +++ b/app/src/ui/relative-time.tsx @@ -1,9 +1,5 @@ import * as React from 'react' import * as moment from 'moment' -const momentDurationFormatSetup = require('moment-duration-format') - -// setup moment plugin -momentDurationFormatSetup(moment) interface IRelativeTimeProps { /** diff --git a/app/src/ui/tab-bar.tsx b/app/src/ui/tab-bar.tsx index 6e3800809dd..042f43ed27e 100644 --- a/app/src/ui/tab-bar.tsx +++ b/app/src/ui/tab-bar.tsx @@ -160,7 +160,7 @@ class TabBarItem extends React.Component { onClick={this.onClick} role="tab" aria-selected={selected} - tabIndex={selected ? 0 : -1} + tabIndex={selected ? undefined : -1} onKeyDown={this.onKeyDown} type="button" > diff --git a/app/styles/ui/_list.scss b/app/styles/ui/_list.scss index dd1f0d57694..00cf07c9764 100644 --- a/app/styles/ui/_list.scss +++ b/app/styles/ui/_list.scss @@ -51,8 +51,8 @@ // Positioning position: absolute; top: 0px; - right: 3px; - width: 15px; + right: 1px; + width: 12px; // Only support vertical scrolling for now overflow-y: auto; diff --git a/app/styles/ui/_repository-list.scss b/app/styles/ui/_repository-list.scss index a73587e4499..6409b57c0ce 100644 --- a/app/styles/ui/_repository-list.scss +++ b/app/styles/ui/_repository-list.scss @@ -71,6 +71,7 @@ display: flex; justify-content: flex-end; align-items: center; + margin-right: var(--spacing-half); } .change-indicator-wrapper { diff --git a/app/styles/ui/history/_commit-list.scss b/app/styles/ui/history/_commit-list.scss index 2c7b984e402..3e8a0d51130 100644 --- a/app/styles/ui/history/_commit-list.scss +++ b/app/styles/ui/history/_commit-list.scss @@ -16,7 +16,9 @@ border-bottom: var(--base-border); - padding: 0 var(--spacing); + // We need to give a bit more padding to the right to make place for the scrollbar + padding-right: calc(var(--spacing) + var(--spacing-half)); + padding-left: var(--spacing); .info { display: flex; @@ -50,6 +52,7 @@ margin-left: var(--spacing); color: var(--list-item-badge-color); height: 16px; + line-height: 16px; max-width: 50%; .tag-indicator { diff --git a/changelog.json b/changelog.json index 3cd79db4502..9abec30445c 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,20 @@ { "releases": { + "2.5.1-beta1": [ + "[Fixed] Center tags text vertically in History view - #9785", + "[Fixed] Prevent Git authentication errors from prompting to retry clone instead of authentication dialog - #9777", + "[Improved] Avoid executing unwanted Git hooks when fetching unpushed tags - #9793" + ], + "2.5.0": [ + "[New] Add, push, and view Git tags on commit history in Desktop - #9424", + "[Added] Offer option to choose file from one branch or the other when resolving merge conflicts - #9702", + "[Added] Add context menu for highlighted text in diff view - #5100. Thanks @HashimotoYT!", + "[Fixed] Retain default branch option in \"Create Branch\" dialog when user focuses away from Desktop - #9611", + "[Improved] Clean up copy for onboarding sign-in flow - #9715", + "[Improved] Emphasize signing in to GitHub via browser due to username/password deprecation - #9663", + "[Improved] Improve error message when publishing a private repository fails - #9646", + "[Improved] Offer to retry if cloning a repository fails - #926. Thanks @Daniel-McCarthy!" + ], "2.4.4-beta4": [ "[Fixed] Add missing \"Cancel\" button in onboarding sign-in flow - #9715", "[Improved] Update copy for onboarding sign-in flow - #9715" diff --git a/docs/known-issues.md b/docs/known-issues.md index 0b7f1fb6a8e..27beb9c4e33 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -114,7 +114,7 @@ are unable to find another cygwin DLL. Enabling Mandatory ASLR affects the MSYS2 core library, which is relied upon by Git for Windows to emulate process forking. -**Not supported:** this is an upstream limitation of MSYS2, and it is recommend that you either disable Mandatory ASLR or whitelist all executables under `\usr\bin` which depend on MSYS2. +**Not supported:** this is an upstream limitation of MSYS2, and it is recommend that you either disable Mandatory ASLR or explicitly allow all executables under `\usr\bin` which depend on MSYS2. ### I get a black screen when launching Desktop