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