diff --git a/webui/configs/playwright.config.ts b/webui/configs/playwright.config.ts index 7ec00eb9f..88e10e191 100644 --- a/webui/configs/playwright.config.ts +++ b/webui/configs/playwright.config.ts @@ -5,7 +5,6 @@ import { SmokeTestOptions } from "./smoke-test.options"; * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - testDir: "../test/e2e", /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ @@ -17,18 +16,31 @@ export default defineConfig({ /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: "html", /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: "https://open-vsx.org", - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "on-first-retry", - }, - + use: { ...devices["Desktop Chrome"] }, projects: [ { - name: "chromium", - use: { ...devices["Desktop Chrome"] }, + name: "smoke-test", + testDir: "../test/e2e", + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: "https://open-vsx.org", + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + } + }, + { + name: "api-test", + testDir: "../test/api", + use: { + baseURL: "http://localhost:3000", + } } ], - + // can't define webServer for a project: https://github.com/microsoft/playwright/issues/22496 + webServer: { + command: 'yarn prepare && yarn build:default && yarn start:default', + url: 'http://localhost:3000', + reuseExistingServer: !process.env.CI, + timeout: 60 * 1000 + } }); diff --git a/webui/package.json b/webui/package.json index 29766b09c..4e9322732 100644 --- a/webui/package.json +++ b/webui/package.json @@ -84,6 +84,7 @@ "@types/react-infinite-scroller": "^1.2.3", "@types/react-router-dom": "^5.3.3", "@types/react-transition-group": "^4.4.6", + "@types/regex-escape": "^3", "@typescript-eslint/eslint-plugin": "^8.15.0", "@typescript-eslint/parser": "^8.15.0", "chai": "^4.3.7", @@ -93,6 +94,7 @@ "express": "^4.21.2", "express-rate-limit": "^7.4.0", "mocha": "^11.7.5", + "regex-escape": "^3.4.11", "rimraf": "^6.1.2", "source-map-loader": "^4.0.1", "style-loader": "^3.3.3", @@ -106,7 +108,8 @@ "clean": "rimraf lib", "build": "tsc -p ./tsconfig.json && tsc -p ./configs/server.tsconfig.json && yarn run lint", "test": "ts-mocha --project ./configs/test.tsconfig.json --config ./configs/mocharc.json", - "smoke-tests": "playwright install && playwright test --config=./configs/playwright.config.ts", + "api-tests": "playwright install && playwright test --config=./configs/playwright.config.ts --project=api-test", + "smoke-tests": "playwright install && playwright test --config=./configs/playwright.config.ts --project=smoke-test", "lint": "eslint -c ./configs/eslintrc.mjs src", "watch": "tsc -w -p ./tsconfig.json --preserveWatchOutput", "prepare": "yarn run clean && yarn run build", diff --git a/webui/test/api/admin-dashboard/extension-admin.spec.tsx b/webui/test/api/admin-dashboard/extension-admin.spec.tsx new file mode 100644 index 000000000..6fa15d13e --- /dev/null +++ b/webui/test/api/admin-dashboard/extension-admin.spec.tsx @@ -0,0 +1,167 @@ +/** ****************************************************************************** + * Copyright (c) 2025 Precies. Software OU and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * ****************************************************************************** */ +import { expect, test } from "@playwright/test"; +import path from "path" +import user from "../fixtures/admin.json" +import extension from "../fixtures/extension-admin.json" +import RegexEscape from "regex-escape"; + +test.beforeEach(async ({ page }) => { + await page.goto('/') + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await page.getByRole('button', { name: 'User Info' }).click(); + await page.getByRole('link', { name: 'Admin Dashboard' }).click(); + await page.getByRole('button', { name: 'Extensions', exact: true }).click() +}) + +test('extension admin', async ({ page }) => { + await test.step('get extension', async () => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ json: extension })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByRole('heading', { name: extension.name, exact: true })).toBeVisible() + await expect(page.getByText(extension.description)).toBeVisible() + for (const targetPlatformVersion of extension.allTargetPlatformVersions) { + const version = targetPlatformVersion.version + await expect(page.getByRole('checkbox', { name: version, exact: true })).toBeVisible() + for (const targetPlatform of targetPlatformVersion.targetPlatforms) { + await expect(page.locator(`input[name="${targetPlatform}/${version}"]`)).toBeVisible() + } + } + }) + await test.step('remove extension', async () => { + const tokens = ['delete-extension-csrf', 'forbidden-csrf', 'delete-extension-csrf'] + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: tokens.pop() } })) + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer/delete', async (route) => { + const csrfToken = await route.request().headerValue('x-csrf-token') + if (csrfToken !== 'delete-extension-csrf') { + route.fulfill({ status: 403 }) + return + } + + const json = route.request().postDataJSON()[0].version === '0.4.2712' ? { success: 'Extension version removed' } : { error: 'Extension not found' } + route.fulfill({ json }) + }) + + await page.getByRole('checkbox', { name: '0.4.2601', exact: true }).click() + await expect(page.getByRole('checkbox', { name: '0.4.2601', exact: true })).toBeChecked() + await page.getByText('Remove Versions').click() + await expect(page.getByRole('presentation')).toBeVisible() + await page.getByRole('presentation').getByRole('button', { name: 'Remove', exact: true }).click() + await expect(page.getByRole('presentation').getByRole('button', { name: 'Remove', exact: true })).toBeDisabled() + await expect(page.getByRole('presentation')).not.toBeVisible() + + const version = '0.4.2712' + const allTargetPlatformVersions = extension.allTargetPlatformVersions.filter((value) => value.version !== version) + const removedExtension = extension.allTargetPlatformVersions.find((value) => value.version === version) + const newExtension = { ...extension, allTargetPlatformVersions } + await page.getByRole('checkbox', { name: version, exact: true }).click() + await expect(page.getByRole('checkbox', { name: version, exact: true })).toBeChecked() + await page.getByText('Remove Versions').click() + await expect(page.getByRole('presentation')).toBeVisible() + await expect(page.getByRole('presentation')).toHaveText('Remove 3 versions of rust-analyzer?0.4.2712 (macOS Apple Silicon)0.4.2712 (Linux x64)0.4.2712 (Windows ARM)CancelRemove') + await page.getByRole('presentation').getByRole('button', { name: 'Remove', exact: true }).click() + await expect(page.getByRole('presentation').getByRole('button', { name: 'Remove', exact: true })).toBeDisabled() + + await expect(page.getByText('Request failed: POST http://localhost:8080/admin/extension/rust-lang/rust-analyzer/delete (Forbidden)')).toBeVisible() + await page.getByRole('presentation').getByRole('button', { name: 'Close', exact: true }).click() + + await page.getByRole('presentation').getByRole('button', { name: 'Remove', exact: true }).click() + await expect(page.getByRole('presentation').getByRole('button', { name: 'Remove', exact: true })).toBeDisabled() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ json: newExtension })) + await expect(page.getByRole('presentation')).not.toBeVisible() + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByRole('heading', { name: extension.name, exact: true })).toBeVisible() + await expect(page.getByText(extension.description)).toBeVisible() + for (const targetPlatformVersion of newExtension.allTargetPlatformVersions) { + const version = targetPlatformVersion.version + await expect(page.getByRole('checkbox', { name: version, exact: true })).toBeVisible() + for (const targetPlatform of targetPlatformVersion.targetPlatforms) { + await expect(page.locator(`input[name="${targetPlatform}/${version}"]`)).toBeVisible() + } + } + + if (removedExtension == null) { + test.fail() + return + } + await expect(page.getByRole('checkbox', { name: removedExtension.version, exact: true })).not.toBeVisible() + for (const targetPlatform of removedExtension.targetPlatforms) { + await expect(page.locator(`input[name="${targetPlatform}/${removedExtension.version}"]`)).not.toBeVisible() + } + }) +}) + +test('no extension found', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ status: 404 })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByText('Extension not found: rust-lang.rust-analyzer')).toBeVisible() +}) + +test('not admin', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ status: 403 })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByRole('presentation').getByText('Request failed: GET http://localhost:8080/admin/extension/rust-lang/rust-analyzer (Forbidden)')).toBeVisible() +}) + +test('icon', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ json: extension })) + await page.route('http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/icon.png', async (route) => route.fulfill({ path: path.normalize(__dirname + '/../fixtures/icon128.png') })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByAltText(extension.name)).toHaveAttribute('src', new RegExp('^' + RegexEscape('blob:http://localhost:3000/'))) +}) + +test('icon not available', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ json: extension })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByAltText(extension.name)).not.toBeVisible() +}) + +test('icon not found', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ json: extension })) + await page.route('http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/icon.png', async (route) => route.fulfill({ status: 404 })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByAltText(extension.name)).not.toBeVisible() +}) + +test('icon exception', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('rust-lang') + await page.getByPlaceholder('Extension').fill('rust-analyzer') + await page.getByRole('button', { name: 'Search Extension', exact: true }).click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/extension/rust-lang/rust-analyzer', async (route) => route.fulfill({ json: extension })) + await page.route('http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/icon.png', async (route) => route.fulfill({ status: 400 })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByAltText(extension.name)).not.toBeVisible() +}) \ No newline at end of file diff --git a/webui/test/api/admin-dashboard/namespace-admin.spec.tsx b/webui/test/api/admin-dashboard/namespace-admin.spec.tsx new file mode 100644 index 000000000..ce2a56754 --- /dev/null +++ b/webui/test/api/admin-dashboard/namespace-admin.spec.tsx @@ -0,0 +1,110 @@ +/** ****************************************************************************** + * Copyright (c) 2025 Precies. Software OU and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * ****************************************************************************** */ +import { expect, test } from "@playwright/test"; +import user from "../fixtures/admin.json" +import namespace from "../fixtures/namespace-admin.json" +import extension from "../fixtures/namespace-admin-extension.json" +import members from "../fixtures/namespace-admin-members.json" + +test.beforeEach(async ({ page }) => { + await page.goto('/') + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await page.getByRole('button', { name: 'User Info' }).click(); + await page.getByRole('link', { name: 'Admin Dashboard' }).click(); + await page.getByRole('button', { name: 'Namespaces', exact: true }).click() +}) + +test('get namespace', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('vscodevim') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/namespace/vscodevim', async (route) => route.fulfill({ json: namespace })) + await page.route('http://localhost:8080/api/vscodevim/vim', async (route) => route.fulfill({ json: extension })) + await page.route('http://localhost:8080/admin/namespace/vscodevim/members', async (route) => route.fulfill({ json: members })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByRole('heading').first()).toHaveText(namespace.name) + await expect(page.getByText(members.namespaceMemberships[0].user.loginName)).toBeVisible() + await expect(page.getByRole('link', { name: `${extension.name} Version: ${extension.version}` })).toBeVisible() +}) + +test('create namespace', async ({ page }) => { + const responses = [{ json: { success: 'Namespace created' } }, { status: 400, json: { error: 'Namespace already exists' } }, { status: 403 }] + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'create-namespace-csrf' } })) + await page.route('http://localhost:8080/admin/create-namespace', async (route) => { + setTimeout(() => route.fulfill(responses.pop()), 1000) + }) + + await page.getByPlaceholder('Namespace').fill('vscodevim') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/namespace/vscodevim', async (route) => route.fulfill({ status: 404 })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByText(`Namespace ${namespace.name} not found. Do you want to create it?`)).toBeVisible() + await expect(page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true })).toBeVisible() + await page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true }).click() + await expect(page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true })).toBeDisabled() + await expect(page.getByText('Request failed: POST http://localhost:8080/admin/create-namespace (Forbidden)')).toBeVisible() + await page.getByRole('presentation').getByRole('button', { name: 'Close', exact: true }).click() + + await page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true }).click() + await expect(page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true })).toBeDisabled() + await expect(page.getByText('Namespace already exists')).toBeVisible() + await page.getByRole('presentation').getByRole('button', { name: 'Close', exact: true }).click() + + await page.route('http://localhost:8080/admin/namespace/vscodevim', async (route) => route.fulfill({ json: namespace })) + await page.route('http://localhost:8080/api/vscodevim/vim', async (route) => route.fulfill({ json: extension })) + await page.route('http://localhost:8080/admin/namespace/vscodevim/members', async (route) => route.fulfill({ json: members })) + await page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true }).click() + await expect(page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true })).toBeDisabled() + await expect(page.getByRole('progressbar').first()).toBeVisible() + await expect(page.getByRole('button', { name: `Create Namespace ${namespace.name}`, exact: true })).not.toBeVisible() + await expect(page.getByRole('progressbar').first()).not.toBeVisible() + await expect(page.getByRole('heading').first()).toHaveText(namespace.name) + await expect(page.getByText(members.namespaceMemberships[0].user.loginName)).toBeVisible() + await expect(page.getByRole('link', { name: `${extension.name} Version: ${extension.version}` })).toBeVisible() +}) + +test('namespace error', async ({ page }) => { + await page.getByPlaceholder('Namespace').fill('vscodevim') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/namespace/vscodevim', async (route) => route.fulfill({ status: 403 })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByText('Request failed: GET http://localhost:8080/admin/namespace/vscodevim (Forbidden)')).toBeVisible() +}) + +test('change namespace', async ({ page }) => { + const responses = [{ json: { success: 'Scheduled namespace change' } }, { json: { error: 'New namespace already exists' } }] + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'change-namespace-csrf' } })) + await page.route('http://localhost:8080/admin/change-namespace', async (route) => { + await new Promise(f => setTimeout(f, 2500)) + await route.fulfill(responses.pop()) + }) + + await page.getByPlaceholder('Namespace').fill('vscodevim') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/namespace/vscodevim', async (route) => route.fulfill({ json: namespace })) + await page.route('http://localhost:8080/api/vscodevim/vim', async (route) => route.fulfill({ json: extension })) + await page.route('http://localhost:8080/admin/namespace/vscodevim/members', async (route) => route.fulfill({ json: members })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await page.getByText('Change namespace').click() + await page.getByRole('presentation').getByLabel('New Open VSX Namespace').fill('vimium') + await page.getByRole('presentation').getByRole('button', { name: 'Change namespace' }).click() + await expect(page.getByRole('presentation').getByRole('button', { name: 'Change namespace' })).toBeDisabled() + await expect(page.getByRole('presentation')).toHaveText("ErrorNew namespace already existsClose") + await page.getByRole('presentation').getByRole('button', { name: 'Close' }).click() + await page.getByRole('presentation').getByRole('button', { name: 'Change namespace' }).click() + await expect(page.getByRole('presentation').getByRole('button', { name: 'Change namespace' })).toBeDisabled() + await expect(page.getByRole('presentation')).toHaveText("InfoScheduled namespace changeClose") + await page.getByRole('presentation').getByRole('button', { name: 'Close' }).click() + await expect(page.getByRole('presentation')).not.toBeVisible() +}) \ No newline at end of file diff --git a/webui/test/api/admin-dashboard/publisher-admin.spec.ts b/webui/test/api/admin-dashboard/publisher-admin.spec.ts new file mode 100644 index 000000000..f954a414f --- /dev/null +++ b/webui/test/api/admin-dashboard/publisher-admin.spec.ts @@ -0,0 +1,109 @@ +/** ****************************************************************************** + * Copyright (c) 2025 Precies. Software OU and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * ****************************************************************************** */ +import { expect, test } from "@playwright/test"; +import user from "../fixtures/admin.json" +import publisher from "../fixtures/publisher.json" + +test.beforeEach(async ({ page }) => { + await page.goto('/') + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await page.getByRole('button', { name: 'User Info' }).click(); + await page.getByRole('link', { name: 'Admin Dashboard' }).click(); + await page.getByRole('button', { name: 'Publishers', exact: true }).click() +}) + +test('get publisher info', async ({ page }) => { + await page.getByPlaceholder('Publisher Name').fill('amvanbaren') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren', (route) => route.fulfill({ json: publisher })) + await expect(page.getByText('Login name: amvanbaren')).toBeVisible() + await expect(page.getByRole('progressbar')).not.toBeVisible() +}) + +test('publisher info error', async ({ page }) => { + await page.getByPlaceholder('Publisher Name').fill('amvanbaren') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren', (route) => route.fulfill({ status: 403 })) + await expect(page.getByText('Request failed: GET http://localhost:8080/admin/publisher/github/amvanbaren (Forbidden)')).toBeVisible() + await expect(page.getByRole('progressbar')).not.toBeVisible() +}) + +test('publisher not found', async ({ page }) => { + await page.getByPlaceholder('Publisher Name').fill('amvanbaren') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren', (route) => route.fulfill({ status: 404 })) + await expect(page.getByText('Publisher amvanbaren not found.')).toBeVisible() + await expect(page.getByRole('progressbar')).not.toBeVisible() +}) + +test('revoke publisher tokens', async ({ page }) => { + const responses = [{ json: { success: 'Deactivated 3 tokens' } }, { status: 404, json: { error: 'User not found' } }] + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'revoke-tokens-csrf' } })) + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren/tokens/revoke', async (route) => route.fulfill(responses.pop())) + + await page.getByPlaceholder('Publisher Name').fill('amvanbaren') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + const publishers = [{ ...publisher, activeAccessTokenNum: 0 }, publisher] + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren', async (route) => { + await new Promise(f => setTimeout(f, 2000)) + await route.fulfill({ json: publishers.pop() }) + }) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByText('3 active access tokens.')).toBeVisible() + await page.getByText('Revoke access tokens').click() + await expect(page.getByText('Revoke access tokens')).toBeDisabled() + await expect(page.getByText('User not found')).toBeVisible() + await page.getByRole('button', { name: 'Close' }).click() + await expect(page.getByText('Revoke access tokens')).not.toBeDisabled() + + await page.getByText('Revoke access tokens').click() + await expect(page.getByText('Revoke access tokens')).toBeDisabled() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await expect(page.getByText('0 active access tokens.')).toBeVisible() + await expect(page.getByText('Revoke access tokens')).not.toBeVisible() + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('revoke publisher contributions', async ({ page }) => { + const responses = [{ json: { success: 'Revoked publisher contributions' } }, { status: 404, json: { error: 'User not found' } }] + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'revoke-tokens-csrf' } })) + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren/revoke', async (route) => route.fulfill(responses.pop())) + + await page.getByPlaceholder('Publisher Name').fill('amvanbaren') + await page.getByTestId('SearchIcon').click() + await expect(page.getByRole('progressbar')).toBeVisible() + const revokedExtensions = publisher.extensions.map(e => { + e.active = false + return e + }) + const publishers = [{ ...publisher, activeAccessTokenNum: 0, extensions: revokedExtensions}, publisher] + await page.route('http://localhost:8080/admin/publisher/github/amvanbaren', (route) => route.fulfill({ json: publishers.pop() })) + await expect(page.getByRole('progressbar')).not.toBeVisible() + await expect(page.getByText('3 active access tokens.')).toBeVisible() + await page.getByText('Revoke publisher contributions').click() + await page.getByText('Revoke contributions').click() + await expect(page.getByText('Revoke contributions')).toBeDisabled() + await expect(page.getByText('User not found')).toBeVisible() + await page.getByRole('button', { name: 'Close' }).click() + await expect(page.getByText('Revoke contributions')).not.toBeDisabled() + + await page.getByText('Revoke contributions').click() + await expect(page.getByText('Revoke contributions')).toBeDisabled() + await expect(page.getByText('Revoke contributions')).not.toBeVisible() + await expect(page.getByText('0 active access tokens.')).toBeVisible() + for(let i = 0; i < publisher.extensions.length; i++) { + await expect(page.getByText('Deactivated').nth(i)).toBeVisible() + } +}) \ No newline at end of file diff --git a/webui/test/api/extension-detail.spec.ts b/webui/test/api/extension-detail.spec.ts new file mode 100644 index 000000000..c034e5af2 --- /dev/null +++ b/webui/test/api/extension-detail.spec.ts @@ -0,0 +1,258 @@ +/** ****************************************************************************** + * Copyright (c) 2025 Precies. Software OU and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * ****************************************************************************** */ +import path from "path" +import { expect, test } from "@playwright/test"; +import response from "./fixtures/pyrefly/extension-pyrefly.json" +import oldReviews from "./fixtures/pyrefly/reviews-old.json" +import newReviews from "./fixtures/pyrefly/reviews-new.json" +import user from "./fixtures/user.json" +import RegexEscape from "regex-escape"; + +test.beforeEach(async ({ page }) => { + await page.goto('/extension/meta/pyrefly') +}) + +test('extension detail', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() +}) + +test('icon', async ({ page }) => { + const json = JSON.parse(JSON.stringify(response)) + json.files.icon = "http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png" + + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json })) + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png', async (route) => route.fulfill({ path: path.normalize(__dirname + '/fixtures/pyrefly/pyrefly-symbol.png') })) + await expect(page.getByAltText('Pyrefly - Python Language Tooling')).toHaveAttribute('src', new RegExp('^' + RegexEscape('blob:http://localhost:3000/'))) +}) + +test('icon not available', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByAltText('Pyrefly - Python Language Tooling')).toHaveAttribute('src', '/default-icon.png') +}) + +test('icon not found', async ({ page }) => { + const json = JSON.parse(JSON.stringify(response)) + json.files.icon = "http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png" + + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json })) + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png', async (route) => route.fulfill({ status: 404 })) + await expect(page.getByText("Extension Not Found: meta.pyrefly")).toBeVisible() +}) + +test('icon exception', async ({ page }) => { + const json = JSON.parse(JSON.stringify(response)) + json.files.icon = "http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png" + + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json })) + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png', async (route) => route.fulfill({ status: 400 })) + await expect(page.getByRole('presentation')).toHaveText(new RegExp(RegexEscape('Request failed: GET http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/pyrefly-symbol.png (Bad Request)'))) +}) + +test('readme not available', async ({ page }) => { + const json = JSON.parse(JSON.stringify(response)) + json.files.readme = undefined + + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await expect(page.getByText('No README available')).toBeVisible() + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('readme', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/README.md', async (route) => route.fulfill({ path: path.normalize(__dirname + '/fixtures/pyrefly/README.md') })) + await expect(page.getByText('Pyrefly VS Code Extension')).toBeVisible() + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('readme exception', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/README.md', async (route) => route.fulfill({ status: 404 })) + await expect(page.getByRole('presentation')).toHaveText(new RegExp(RegexEscape('Request failed: GET http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/README.md (Not Found)'))) + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('changelog not available', async ({ page }) => { + const json = JSON.parse(JSON.stringify(response)) + json.files.changelog = undefined + + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Changes').click() + await expect(page.getByText('No changelog available')).toBeVisible() + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('changelog', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Changes').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/changelog.md', async (route) => route.fulfill({ path: path.normalize(__dirname + '/fixtures/pyrefly/changelog.md') })) + await expect(page.getByText('All notable changes to this project will be documented in this file.')).toBeVisible() + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('changelog exception', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Changes').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/changelog.md', async (route) => route.fulfill({ status: 404 })) + await expect(page.getByRole('presentation')).toHaveText(new RegExp(RegexEscape('Request failed: GET http://localhost:8080/api/meta/pyrefly/alpine-arm64/0.46.0/file/changelog.md (Not Found)'))) + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('reviews', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Ratings & Reviews').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: oldReviews })) + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() + await expect(page.getByText(/\d+ years agotheArianit/)).toBeVisible() +}) + +test('reviews exception', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Ratings & Reviews').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ status: 400 })) + await expect(page.getByRole('presentation')).toHaveText(new RegExp(RegexEscape('Request failed: GET http://localhost:8080/api/meta/pyrefly/reviews (Bad Request)'))) + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() +}) + +test('post review', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await expect(page.getByText('Publish')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Ratings & Reviews').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: oldReviews })) + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'post-review-csrf' } })) + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() + await expect(page.getByText('Write a review')).toBeVisible() + await page.getByText('Write a review').click() + await page.getByLabel('Your review...').fill('Test') + await page.getByText('Post review').click() + await page.route('http://localhost:8080/api/eamodio/gitlens/review', async (route) => { + const csrfToken = await route.request().headerValue('x-csrf-token') + if (csrfToken !== 'post-review-csrf') { + route.fulfill({ status: 403 }) + return + } + + const json = route.request().postDataJSON().comment === 'Test' ? { success: 'Review added' } : { error: 'Review rejected' } + route.fulfill({ json }) + }) + await expect(page.getByText('Post review')).toBeDisabled() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: newReviews })) + await expect(page.getByText('Write a review')).not.toBeVisible() + await expect(page.getByText('Revoke my review')).toBeVisible() + await expect(page.getByText(/\d+ (months|years?) agoamvanbaren/)).toBeVisible() +}) + +test('post duplicate review', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await expect(page.getByText('Publish')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Ratings & Reviews').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: oldReviews })) + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'post-review-csrf' } })) + await expect(page.locator('.MuiLinearProgress-root')).not.toBeVisible() + await expect(page.getByText('Write a review')).toBeVisible() + await page.getByText('Write a review').click() + await page.getByLabel('Your review...').fill('Test') + await page.getByText('Post review').click() + await page.route('http://localhost:8080/api/eamodio/gitlens/review', async (route) => { + route.fulfill({ json: { error: 'Review already posted' } }) + }) + await expect(page.getByRole('presentation').getByText('Review already posted')).toBeVisible() + await page.getByRole('button', { name: 'Close' }).click() + await expect(page.getByText('Post review')).toBeDisabled() +}) + +test('delete review', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await expect(page.getByText('Publish')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Ratings & Reviews').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: newReviews })) + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'delete-review-csrf' } })) + await page.getByText('Revoke my review').click() + await page.route('http://localhost:8080/api/eamodio/gitlens/review/delete', async (route) => { + const csrfToken = await route.request().headerValue('x-csrf-token') + if (csrfToken !== 'delete-review-csrf') { + route.fulfill({ status: 403 }) + return + } + + route.fulfill({ json: { success: 'Review deleted' } }) + }) + await expect(page.getByText('Revoke my review')).toBeDisabled() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: oldReviews })) + await expect(page.getByText('Revoke my review')).not.toBeVisible() + await expect(page.getByText('Write a review')).toBeVisible() + await expect(page.getByText(/\d+ (months|years?) agoamvanbaren/)).not.toBeVisible() +}) + +test('delete review error', async ({ page }) => { + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/user', async (route) => route.fulfill({ json: user })) + await page.route('http://localhost:8080/login-providers', async (route) => route.fulfill({ json: { loginProviders: { github: 'https://github.com' } } })) + await expect(page.getByText('Publish')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly', async (route) => route.fulfill({ json: response })) + await expect(page.getByText('Pyrefly - Python Language Tooling')).toBeVisible() + await page.getByText('Ratings & Reviews').click() + await expect(page.locator('.MuiLinearProgress-root')).toBeVisible() + await page.route('http://localhost:8080/api/meta/pyrefly/reviews', async (route) => route.fulfill({ json: newReviews })) + await page.route('http://localhost:8080/user/csrf', async (route) => route.fulfill({ json: { header: 'x-csrf-token', value: 'delete-review-csrf' } })) + await page.getByText('Revoke my review').click() + await page.route('http://localhost:8080/api/eamodio/gitlens/review/delete', async (route) => { + const csrfToken = await route.request().headerValue('x-csrf-token') + if (csrfToken !== 'delete-review-csrf') { + route.fulfill({ status: 403 }) + return + } + + route.fulfill({ json: { error: 'Review not found' } }) + }) + await expect(page.getByRole('presentation').getByText('Review not found')).toBeVisible() + await page.getByRole('button', { name: 'Close' }).click() + await expect(page.getByText('Revoke my review')).toBeDisabled() +}) \ No newline at end of file diff --git a/webui/test/api/fixtures/admin.json b/webui/test/api/fixtures/admin.json new file mode 100644 index 000000000..cee7e6520 --- /dev/null +++ b/webui/test/api/fixtures/admin.json @@ -0,0 +1,13 @@ +{ + "loginName": "amvanbaren", + "tokensUrl": "http://localhost:8080/user/tokens", + "createTokenUrl": "http://localhost:8080/user/token/create", + "role": "admin", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github", + "publisherAgreement": { + "status": "signed" + } +} \ No newline at end of file diff --git a/webui/test/api/fixtures/extension-admin.json b/webui/test/api/fixtures/extension-admin.json new file mode 100644 index 000000000..05aa5fe94 --- /dev/null +++ b/webui/test/api/fixtures/extension-admin.json @@ -0,0 +1,97 @@ +{ + "namespaceUrl": "http://localhost:8080/api/rust-lang", + "reviewsUrl": "http://localhost:8080/api/rust-lang/rust-analyzer/reviews", + "files": { + "download": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/rust-lang.rust-analyzer-0.4.2712@darwin-arm64.vsix", + "signature": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/rust-lang.rust-analyzer-0.4.2712@darwin-arm64.sigzip", + "manifest": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/package.json", + "readme": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/readme.md", + "license": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/LICENSE.txt", + "icon": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/icon.png", + "vsixmanifest": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/extension.vsixmanifest", + "sha256": "http://localhost:8080/api/rust-lang/rust-analyzer/darwin-arm64/0.4.2712/file/rust-lang.rust-analyzer-0.4.2712@darwin-arm64.sha256", + "publicKey": "http://localhost:8080/api/-/public-key/73a98fc8-08c5-4403-9674-06a4094ccb08" + }, + "name": "rust-analyzer", + "namespace": "rust-lang", + "targetPlatform": "darwin-arm64", + "version": "0.4.2712", + "preRelease": true, + "publishedBy": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + }, + "active": true, + "verified": false, + "unrelatedPublisher": true, + "namespaceAccess": "restricted", + "allVersions": { + "latest": "http://localhost:8080/api/rust-lang/rust-analyzer/latest", + "pre-release": "http://localhost:8080/api/rust-lang/rust-analyzer/pre-release", + "0.4.2712": "http://localhost:8080/api/rust-lang/rust-analyzer/0.4.2712", + "0.4.2601": "http://localhost:8080/api/rust-lang/rust-analyzer/0.4.2601" + }, + "allVersionsUrl": "http://localhost:8080/api/rust-lang/rust-analyzer/versions", + "downloadCount": 0, + "reviewCount": 0, + "versionAlias": [ + "latest", + "pre-release" + ], + "timestamp": "2025-12-09T16:05:31.700356Z", + "preview": false, + "displayName": "rust-analyzer", + "namespaceDisplayName": "rust-lang", + "description": "Rust language support for Visual Studio Code", + "engines": { + "vscode": "^1.93.0" + }, + "categories": [ + "Formatters", + "Programming Languages" + ], + "extensionKind": [ + "workspace" + ], + "tags": [ + "__ext_rast", + "__ext_rs", + "json", + "keybindings", + "ra_syntax_tree", + "rs", + "rust" + ], + "license": "MIT OR Apache-2.0", + "homepage": "https://rust-analyzer.github.io/", + "repository": "https://github.com/rust-lang/rust-analyzer.git", + "sponsorLink": "", + "bugs": "https://github.com/rust-lang/rust-analyzer/issues", + "galleryColor": "", + "galleryTheme": "", + "localizedLanguages": [], + "dependencies": [], + "bundledExtensions": [], + "allTargetPlatformVersions": [ + { + "version": "0.4.2712", + "targetPlatforms": [ + "darwin-arm64", + "linux-x64", + "win32-arm64" + ] + }, + { + "version": "0.4.2601", + "targetPlatforms": [ + "alpine-x64", + "darwin-arm64" + ] + } + ], + "deprecated": false, + "downloadable": false +} \ No newline at end of file diff --git a/webui/test/api/fixtures/icon128.png b/webui/test/api/fixtures/icon128.png new file mode 100644 index 000000000..adb4470a5 Binary files /dev/null and b/webui/test/api/fixtures/icon128.png differ diff --git a/webui/test/api/fixtures/namespace-admin-extension.json b/webui/test/api/fixtures/namespace-admin-extension.json new file mode 100644 index 000000000..60c345ec8 --- /dev/null +++ b/webui/test/api/fixtures/namespace-admin-extension.json @@ -0,0 +1,82 @@ +{ + "namespaceUrl": "http://localhost:8080/api/vscodevim", + "reviewsUrl": "http://localhost:8080/api/vscodevim/vim/reviews", + "files": { + "download": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/vscodevim.vim-1.19.3.vsix", + "signature": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/vscodevim.vim-1.19.3.sigzip", + "manifest": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/package.json", + "readme": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/README.md", + "changelog": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/CHANGELOG.md", + "license": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/LICENSE.txt", + "vsixmanifest": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/extension.vsixmanifest", + "sha256": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/vscodevim.vim-1.19.3.sha256", + "publicKey": "http://localhost:8080/api/-/public-key/73a98fc8-08c5-4403-9674-06a4094ccb08" + }, + "name": "vim", + "namespace": "vscodevim", + "targetPlatform": "universal", + "version": "1.19.3", + "preRelease": false, + "publishedBy": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + }, + "verified": false, + "unrelatedPublisher": true, + "namespaceAccess": "restricted", + "allVersions": { + "latest": "http://localhost:8080/api/vscodevim/vim/latest", + "1.19.3": "http://localhost:8080/api/vscodevim/vim/1.19.3" + }, + "allVersionsUrl": "http://localhost:8080/api/vscodevim/vim/versions", + "downloadCount": 0, + "reviewCount": 0, + "versionAlias": [ + "latest" + ], + "timestamp": "2025-11-27T11:24:28.807921Z", + "preview": false, + "displayName": "Vim", + "namespaceDisplayName": "vscodevim", + "description": "Vim emulation for Visual Studio Code", + "engines": { + "vscode": "^1.42.0" + }, + "categories": [ + "Other", + "Keymaps" + ], + "extensionKind": [ + "ui", + "web", + "workspace" + ], + "tags": [ + "__ext_vimrc", + "__web_extension", + "keybindings", + "vi", + "vim", + "vimrc", + "vscodevim" + ], + "license": "MIT", + "homepage": "https://github.com/VSCodeVim/Vim", + "repository": "https://github.com/VSCodeVim/Vim.git", + "sponsorLink": "", + "bugs": "https://github.com/VSCodeVim/Vim/issues", + "galleryColor": "#e3f4ff", + "galleryTheme": "light", + "localizedLanguages": [], + "qna": "https://vscodevim.herokuapp.com/", + "dependencies": [], + "bundledExtensions": [], + "downloads": { + "universal": "http://localhost:8080/api/vscodevim/vim/1.19.3/file/vscodevim.vim-1.19.3.vsix" + }, + "deprecated": false, + "downloadable": true +} \ No newline at end of file diff --git a/webui/test/api/fixtures/namespace-admin-members.json b/webui/test/api/fixtures/namespace-admin-members.json new file mode 100644 index 000000000..b67084c45 --- /dev/null +++ b/webui/test/api/fixtures/namespace-admin-members.json @@ -0,0 +1,15 @@ +{ + "namespaceMemberships": [ + { + "namespace": "vscodevim", + "role": "contributor", + "user": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + } + } + ] +} \ No newline at end of file diff --git a/webui/test/api/fixtures/namespace-admin.json b/webui/test/api/fixtures/namespace-admin.json new file mode 100644 index 000000000..83df3c2a7 --- /dev/null +++ b/webui/test/api/fixtures/namespace-admin.json @@ -0,0 +1,10 @@ +{ + "name": "vscodevim", + "extensions": { + "vim": "http://localhost:8080/api/vscodevim/vim" + }, + "verified": false, + "access": "restricted", + "membersUrl": "http://localhost:8080/admin/namespace/vscodevim/members", + "roleUrl": "http://localhost:8080/admin/namespace/vscodevim/change-member" +} \ No newline at end of file diff --git a/webui/test/api/fixtures/namespace-details.json b/webui/test/api/fixtures/namespace-details.json new file mode 100644 index 000000000..798e4e417 --- /dev/null +++ b/webui/test/api/fixtures/namespace-details.json @@ -0,0 +1,74 @@ +{ + "name": "Prisma", + "displayName": "Prisma", + "description": "Build data-driven applications with ease.", + "logo": "https://openvsx.eclipsecontent.org/Prisma/logo/logo-Prisma-1706696696415.png", + "website": "https://www.prisma.io/", + "supportLink": "https://www.prisma.io/support", + "socialLinks": { + "github": "https://github.com/prisma", + "twitter": "https://twitter.com/prisma", + "linkedin": "https://www.linkedin.com/company/prisma-io" + }, + "extensions": [ + { + "url": "http://localhost:8080/api/Prisma/prisma-insider", + "files": { + "download": "http://localhost:8080/api/Prisma/prisma-insider/31.1.4/file/Prisma.prisma-insider-31.1.4.vsix", + "signature": "http://localhost:8080/api/Prisma/prisma-insider/31.1.4/file/Prisma.prisma-insider-31.1.4.sigzip", + "icon": "http://localhost:8080/api/Prisma/prisma-insider/31.1.4/file/logo_white.png", + "sha256": "http://localhost:8080/api/Prisma/prisma-insider/31.1.4/file/Prisma.prisma-insider-31.1.4.sha256", + "publicKey": "http://localhost:8080/api/-/public-key/14ccb407-4e79-41ed-be5a-6d608325c45a" + }, + "name": "prisma-insider", + "namespace": "Prisma", + "version": "31.1.4", + "timestamp": "2025-12-05T13:25:27.221203Z", + "averageRating": 5.0, + "reviewCount": 1, + "downloadCount": 899358, + "displayName": "Prisma - Insider", + "description": "This is the Insider Build of the Prisma VS Code extension (only use it if you are also using the dev version of the CLI).", + "deprecated": false + }, + { + "url": "http://localhost:8080/api/Prisma/prisma", + "files": { + "download": "http://localhost:8080/api/Prisma/prisma/31.1.0/file/Prisma.prisma-31.1.0.vsix", + "signature": "http://localhost:8080/api/Prisma/prisma/31.1.0/file/Prisma.prisma-31.1.0.sigzip", + "icon": "http://localhost:8080/api/Prisma/prisma/31.1.0/file/logo_white.png", + "sha256": "http://localhost:8080/api/Prisma/prisma/31.1.0/file/Prisma.prisma-31.1.0.sha256", + "publicKey": "http://localhost:8080/api/-/public-key/14ccb407-4e79-41ed-be5a-6d608325c45a" + }, + "name": "prisma", + "namespace": "Prisma", + "version": "31.1.0", + "timestamp": "2025-12-03T13:03:10.613097Z", + "averageRating": 5.0, + "reviewCount": 3, + "downloadCount": 447565, + "displayName": "Prisma", + "description": "Adds syntax highlighting, formatting, auto-completion, jump-to-definition and linting for .prisma files.", + "deprecated": false + }, + { + "url": "http://localhost:8080/api/Prisma/vscode-graphql", + "files": { + "signature": "http://localhost:8080/api/Prisma/vscode-graphql/0.3.7/file/Prisma.vscode-graphql-0.3.7.sigzip", + "icon": "http://localhost:8080/api/Prisma/vscode-graphql/0.3.7/file/logo.png", + "download": "http://localhost:8080/api/Prisma/vscode-graphql/0.3.7/file/Prisma.vscode-graphql-0.3.7.vsix", + "sha256": "http://localhost:8080/api/Prisma/vscode-graphql/0.3.7/file/Prisma.vscode-graphql-0.3.7.sha256", + "publicKey": "http://localhost:8080/api/-/public-key/14ccb407-4e79-41ed-be5a-6d608325c45a" + }, + "name": "vscode-graphql", + "namespace": "Prisma", + "version": "0.3.7", + "timestamp": "2020-09-20T18:15:15.890408Z", + "downloadCount": 12833, + "displayName": "GraphQL", + "description": "GraphQL extension for VSCode adds syntax highlighting, validation, and language features like go to definition, hover information and autocompletion for graphql projects. This extension also works with queries annotated with gql tag.", + "deprecated": false + } + ], + "verified": true +} \ No newline at end of file diff --git a/webui/test/api/fixtures/publisher.json b/webui/test/api/fixtures/publisher.json new file mode 100644 index 000000000..fb09ccf11 --- /dev/null +++ b/webui/test/api/fixtures/publisher.json @@ -0,0 +1,176 @@ +{ + "user": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + }, + "extensions": [ + { + "files": { + "download": "http://localhost:8080/api/HookyQR/beautify/0.1.3/file/HookyQR.beautify-0.1.3.vsix", + "manifest": "http://localhost:8080/api/HookyQR/beautify/0.1.3/file/package.json", + "readme": "http://localhost:8080/api/HookyQR/beautify/0.1.3/file/README.md", + "icon": "http://localhost:8080/api/HookyQR/beautify/0.1.3/file/icon.svg", + "vsixmanifest": "http://localhost:8080/api/HookyQR/beautify/0.1.3/file/extension.vsixmanifest" + }, + "name": "beautify", + "namespace": "HookyQR", + "targetPlatform": "universal", + "version": "0.1.3", + "preRelease": false, + "publishedBy": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + }, + "active": true, + "downloadCount": 0, + "timestamp": "2025-11-27T11:25:39.681684Z", + "preview": false, + "displayName": "beautify", + "namespaceDisplayName": "HookyQR", + "description": "Beautify code in place for VS Code", + "engines": { + "vscode": "^0.10.1" + }, + "categories": [ + "Other", + "Languages" + ], + "extensionKind": [], + "tags": [ + "vscode" + ], + "license": "MIT", + "homepage": "", + "repository": "https://github.com/HookyQR/VSCodeBeautify", + "sponsorLink": "", + "bugs": "https://github.com/HookyQR/VSCodeBeautify/issues", + "galleryColor": "#e8e030", + "galleryTheme": "light", + "localizedLanguages": [], + "dependencies": [], + "bundledExtensions": [], + "deprecated": true, + "downloadable": true + }, + { + "files": { + "download": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/illixion.vscode-vibrancy-continued-1.1.62.vsix", + "manifest": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/package.json", + "readme": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/readme.md", + "changelog": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/changelog.md", + "license": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/LICENSE.txt", + "icon": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/logo.png", + "vsixmanifest": "http://localhost:8080/api/illixion/vscode-vibrancy-continued/1.1.62/file/extension.vsixmanifest" + }, + "name": "vscode-vibrancy-continued", + "namespace": "illixion", + "targetPlatform": "universal", + "version": "1.1.62", + "preRelease": false, + "publishedBy": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + }, + "active": true, + "downloadCount": 0, + "timestamp": "2025-11-28T16:25:20.685233Z", + "preview": false, + "displayName": "Vibrancy Continued", + "namespaceDisplayName": "illixion", + "description": "Vibrancy Effect for Visual Studio Code", + "engines": { + "vscode": "^1.63.0" + }, + "categories": [ + "Other", + "Themes" + ], + "extensionKind": [ + "ui" + ], + "tags": [ + "__sponsor_extension" + ], + "homepage": "https://github.com/illixion/vscode-vibrancy-continued#readme", + "repository": "https://github.com/illixion/vscode-vibrancy-continued.git", + "sponsorLink": "https://github.com/sponsors/illixion", + "bugs": "https://github.com/illixion/vscode-vibrancy-continued/issues", + "galleryColor": "#42BFF5", + "galleryTheme": "", + "localizedLanguages": [], + "qna": "https://github.com/illixion/vscode-vibrancy-continued/discussions/categories/q-a", + "dependencies": [], + "bundledExtensions": [], + "deprecated": false, + "downloadable": true + }, + { + "files": { + "download": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/ritwickdey.LiveServer-5.6.1.vsix", + "manifest": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/package.json", + "readme": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/README.md", + "changelog": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/CHANGELOG.md", + "license": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/LICENSE.txt", + "icon": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/icon.png", + "vsixmanifest": "http://localhost:8080/api/ritwickdey/LiveServer/5.6.1/file/extension.vsixmanifest" + }, + "name": "LiveServer", + "namespace": "ritwickdey", + "targetPlatform": "universal", + "version": "5.6.1", + "preRelease": false, + "publishedBy": { + "loginName": "amvanbaren", + "fullName": "Aart van Baren", + "avatarUrl": "https://avatars.githubusercontent.com/u/14129099?v=4", + "homepage": "https://github.com/amvanbaren", + "provider": "github" + }, + "active": true, + "downloadCount": 0, + "timestamp": "2025-11-27T11:26:05.739999Z", + "preview": false, + "displayName": "Live Server", + "namespaceDisplayName": "ritwickdey", + "description": "Launch a development local Server with live reload feature for static & dynamic pages", + "engines": { + "vscode": "^1.20.0" + }, + "categories": [ + "Other" + ], + "extensionKind": [], + "tags": [ + "html preview", + "keybindings", + "live preview", + "live reload", + "multi-root ready", + "open in browser", + "svg preview" + ], + "license": "MIT", + "homepage": "https://ritwickdey.github.io/vscode-live-server/", + "repository": "https://github.com/ritwickdey/vscode-live-server.git", + "sponsorLink": "", + "bugs": "https://github.com/ritwickdey/vscode-live-server/issues", + "galleryColor": "#41205f", + "galleryTheme": "dark", + "localizedLanguages": [], + "dependencies": [], + "bundledExtensions": [], + "deprecated": false, + "downloadable": true + } + ], + "activeAccessTokenNum": 3 +} \ No newline at end of file diff --git a/webui/test/api/fixtures/pyrefly/README.md b/webui/test/api/fixtures/pyrefly/README.md new file mode 100644 index 000000000..d02a9fb4e --- /dev/null +++ b/webui/test/api/fixtures/pyrefly/README.md @@ -0,0 +1,43 @@ +# Pyrefly VS Code Extension + +The Pyrefly extension uses Pyrefly to provide language server features for +Python in VS Code. Please see [pyrefly.org](https://pyrefly.org/) for more +information. + +## Features + +The Pyrefly extension: + +- Adds inline type errors matching the Pyrefly command-line to your editor + (note: only shown when a pyrefly configuration is present or + `python.pyrefly.displayTypeErrors` is `force-on`) +- Adds language features from Pyrefly's analysis like go-to definition, hover, + etc. (full list [here](https://github.com/facebook/pyrefly/issues/344)) and + disables Pylance completely (VSCode's built-in Python extension) + +## Customization + +By default, Pyrefly should work in the IDE with no configuration necessary. But +to ensure your project is set up properly, see +[configurations](https://pyrefly.org/en/docs/configuration/). + +The following configuration options are IDE-specific and exposed as VSCode +settings: + +- `python.pyrefly.displayTypeErrors` [enum: default, force-on, force-off]: If + `'default'`, Pyrefly will only provide type check squiggles in the IDE if a + `pyrefly.toml` is present. If `'force-off'`, Pyrefly will never provide type + check squiggles in the IDE. If `'force-on'`, Pyrefly will always provide type + check squiggles in the IDE. +- `python.pyrefly.disableLanguageServices` [boolean: false]: by default, Pyrefly + will provide both type errors and other language features like go-to + definition, intellisense, hover, etc. Enable this option to keep type errors + from Pyrefly unchanged but use VSCode's Python extension for everything else. +- `python.pyrefly.disabledLanguageServices` [json: {}]: a config to disable + certain lsp methods from pyrefly. For example, if you want go-to definition + but not find-references. +- `pyrefly.lspPath` [string: '']: if your platform is not supported, you can + build pyrefly from source and specify the binary here. +- `python.analysis.showHoverGoToLinks` [boolean: true]: Controls whether hover + tooltips include "Go to definition" and "Go to type definition" navigation + links. Set to `false` for cleaner tooltips with only type information. diff --git a/webui/test/api/fixtures/pyrefly/changelog.md b/webui/test/api/fixtures/pyrefly/changelog.md new file mode 100644 index 000000000..2c951a177 --- /dev/null +++ b/webui/test/api/fixtures/pyrefly/changelog.md @@ -0,0 +1,6802 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased] + +### Added + +- Adds an all-new _Interactive Rebase Editor_ with support for `update-ref` and `merge` commands, optimistic UI updates, improved drag-and-drop with auto-scrolling, conflict detection, and enhanced accessibility ([#4813](https://github.com/gitkraken/vscode-gitlens/issues/4813), [#4405](https://github.com/gitkraken/vscode-gitlens/issues/4405), [#4383](https://github.com/gitkraken/vscode-gitlens/issues/4383), [#4160](https://github.com/gitkraken/vscode-gitlens/issues/4160), [#4148](https://github.com/gitkraken/vscode-gitlens/issues/4148), [#4032](https://github.com/gitkraken/vscode-gitlens/issues/4032), [#3897](https://github.com/gitkraken/vscode-gitlens/issues/3897), [#3866](https://github.com/gitkraken/vscode-gitlens/issues/3866), [#3815](https://github.com/gitkraken/vscode-gitlens/issues/3815), [#3393](https://github.com/gitkraken/vscode-gitlens/issues/3393), [#3337](https://github.com/gitkraken/vscode-gitlens/issues/3337), [#3310](https://github.com/gitkraken/vscode-gitlens/issues/3310)) + - Adds potential conflict detection with visual indicators for commits that will conflict during rebase + - Adds ability to recompose commits from the _Interactive Rebase Editor_ using AI ([#4796](https://github.com/gitkraken/vscode-gitlens/issues/4796), [#4775](https://github.com/gitkraken/vscode-gitlens/issues/4775)) + - Optimizes performance with virtualization for large rebase operations and lazy-loading of commit metadata + - Apply bulk actions (pick, squash, fixup, etc.) to multiple selected commits simultaneously + - Improves drag-and-drop experience with multi-select support and auto-scrolling when dragging near viewport edges + - Enhances multi-select support with comprehensive keyboard and mouse interactions + - Mouse: Click to select single, Ctrl+Click (Cmd+Click on macOS) to toggle, Shift+Click for range selection + - Keyboard: Shift+Arrow[Up|Down] for range selection, Ctrl+A (Cmd+A on macOS) to select all entries + - Adds a `gitlens.rebaseEditor.openOnPausedRebase` setting to control whether the _Interactive Rebase Editor_ opens automatically when a rebase is paused +- Overhauls the search experience on the _Commit Graph_ + - Adds real-time streaming of search results with pause, resume, and cancel support ([#4782](https://github.com/gitkraken/vscode-gitlens/issues/4782), [#4526](https://github.com/gitkraken/vscode-gitlens/issues/4526), [#3963](https://github.com/gitkraken/vscode-gitlens/issues/3963)) + - Changes the default of the `gitlens.graph.searchItemLimit` setting to `0` (no limit) + - Adds autocomplete suggestions and interactive filter pickers (for authors, references, and files/folders) to _Commit Graph_ search ([#4780](https://github.com/gitkraken/vscode-gitlens/issues/4780)) + - Adds quick pick menus for picking authors, branches or tags, comparison ranges, and files or folders +- Enhances the _Commit Graph_ experience with several new features + - Enhances multiselect behavior with improved keyboard and mouse support + - Keyboard navigation + - Arrow[Up|Down] — Moves focus/selection to previous/next row + - Ctrl+Arrow[Up|Down] (Cmd+Arrow[Up|Down] on macOS) — Moves focus/selection topologically + - Alt+Arrow[Up|Down] — Jumps to previous/next branching point (merge/fork) + - Alt+Page[Up|Down] — Jumps to previous/next commit with refs + - Home, End — Jumps to first/last (loaded) commit + - Page[Up|Down] — Jumps by a page (viewport) + - Mouse selection + - Click — Selects a single commit (clears previous selection) + - Ctrl+Click (Cmd+Click on macOS) — Toggles commit in/out of selection + - When in topological selection mode, will only select the commit if it is topologically connected to the existing selection + - Shift+Click — Selects a range of commits from the anchor to clicked commit + - When in topological selection mode, will select all commits that follows parent-child graph path + - When in non-topological mode, will select all rows in visual range + - Keyboard selection + - Shift+[Up|Down] — Extends the selection, based on selection mode + - Ctrl+Shift+[Up|Down] (Cmd+Shift+[Up|Down] on macOS) — Topologically extends the selection, and sticks to current branch if possible + - Shift+Home, Shift+End — Extends the selection to first or last commit + - Shift+Page[Up|Down] — Extends the selection by one page + - Adds sticky timeline support to the _Commit Graph_ ([#4781](https://github.com/gitkraken/vscode-gitlens/issues/4781)) + - Adds _Compose Commits..._, _Generate Commit Message..._, and _Stash All Changes..._ inline actions to the "work in progress" (WIP) row in the _Commit Graph_ ([#4790](https://github.com/gitkraken/vscode-gitlens/issues/4790)) + - Adds _Select for Compare_ and _Compare with Selected_ commands to the _Commit Graph_ context menu for commits, stashes, branches, and tags ([#4779](https://github.com/gitkraken/vscode-gitlens/issues/4779)) +- Adds support for recomposing selected commits in graph and composer ([#4600](https://github.com/gitkraken/vscode-gitlens/issues/4600)) +- Adds Claude Opus 4.5, Gemini 3 Pro, and GPT-5.1 and GPT-5.2 model support for AI features ([#4785](https://github.com/gitkraken/vscode-gitlens/issues/4785)) +- Adds multi-repository support to repository filtering in GitLens views ([#4815](https://github.com/gitkraken/vscode-gitlens/issues/4815)) +- Adds ability to change upstream from tracking status nodes in views +- Adds new advanced date formatting tokens (`agoAndDate`, `agoAndDateShort`, `agoAndDateBothSources`) and updates default tooltip and status bar formats ([#4783](https://github.com/gitkraken/vscode-gitlens/issues/4783)) +- Adds an experimental `gitlens.advanced.resolveSymlinks` setting to resolve symbolic links when determining file paths for Git operations ([#1328](https://github.com/gitkraken/vscode-gitlens/issues/1328)) +- Adds a `gitlens.advanced.skipOnboarding` setting to prevent onboarding prompts ([#4751](https://github.com/gitkraken/vscode-gitlens/issues/4751)) +- Adds a `gitlens.advanced.git.timeout` setting to configure the Git command timeout + +### Changed + +- Improves _Commit Composer_ user experience with maximize command, improved commit message editing, and sticky positioning for commit messages ([#4759](https://github.com/gitkraken/vscode-gitlens/issues/4759)) +- Changes _rebase_, _merge_, _revert_, and _branch delete_ commands to no longer use/open a terminal ([#3527](https://github.com/gitkraken/vscode-gitlens/issues/3527), [#3530](https://github.com/gitkraken/vscode-gitlens/issues/3530), [#3532](https://github.com/gitkraken/vscode-gitlens/issues/3532), [#3534](https://github.com/gitkraken/vscode-gitlens/issues/3534)) +- Improves ignored file checking performance ([#4814](https://github.com/gitkraken/vscode-gitlens/issues/4814)) +- Enhances paused operation status UI with clickable references that jump to commits/branches in the _Commit Graph_ ([#4786](https://github.com/gitkraken/vscode-gitlens/issues/4786)) +- Improves reference selection in views with a unified comparison picker dialog ([#4778](https://github.com/gitkraken/vscode-gitlens/issues/4778)) +- Simplifies remote provider connection flow by directly using the remote name and repository path ([#4411](https://github.com/gitkraken/vscode-gitlens/issues/4411)) +- Improves tracking for hover actions by adding source and detail attributes to events from editor hovers ([#4764](https://github.com/gitkraken/vscode-gitlens/issues/4764)) + +### Removed + +- Removes the `gitlens.advanced.caching.enabled` setting + +### Fixed + +- Fixes issue where the _Commit Details_ file tree rendering would fail intermittently ([#4784](https://github.com/gitkraken/vscode-gitlens/issues/4784)) +- Fixes issue where the _Commit Graph_ would load data twice on initial load +- Fixes issue where paused operations would not show on the _Commit Graph_ without working changes +- Fixes issue where onboarding would interrupt error popovers in the _Commit Composer_ +- Fixes repository grouping for main repositories and worktrees in certain cases +- Fixes WIP detection for untracked files only +- Fixes issue where commit/graph details panel titles would not collapse at smaller sizes +- Fixes navigation button wrapping in the _Inspect_ view +- Fixes incorrect handling of an empty rebase HEAD +- Fixes missing cancel option in the rebase quick wizard confirmation +- Fixes issue where the _Interactive Rebase Editor_ would not close automatically when the associated file is deleted + +## [17.7.1] - 2025-11-13 + +### Changed + +- Updates the OpenAI model selection +- Improves positioning of the "Recompose Commits" command in context menus +- Ensures Git streams are closed eagerly to prevent resource leaks and potential `SIGPIPE` errors + +### Fixed + +- Fixes performance of _Show Branches and Tags_ command + +## [17.7.0] - 2025-11-11 + +### Added + +- Adds new _Commit Composer_ features and improvements + - Adds ability to recompose existing branches via the _Recompose Commits (Preview)_ command in the context menu of branches and from the Command Palette ([#4598](https://github.com/gitkraken/vscode-gitlens/issues/4598), [#4599](https://github.com/gitkraken/vscode-gitlens/issues/4599)) + - Adds drag and drop support to reorder auto-composed commits in the commit list ([#4433](https://github.com/gitkraken/vscode-gitlens/issues/4433)) + - Adds support for untracked files ([#4636](https://github.com/gitkraken/vscode-gitlens/issues/4636)) + - Adds support for composing without a base commit ([#4637](https://github.com/gitkraken/vscode-gitlens/issues/4637)) + - Greatly improves performance by virtualizing file diffs ([#4675](https://github.com/gitkraken/vscode-gitlens/issues/4675)) + - Improves some cases where staging or working tree changes are incorrectly detected ([#4667](https://github.com/gitkraken/vscode-gitlens/issues/4667)) + - Adds a link to the custom instructions setting in the _Commit Composer_ view +- Adds ability to explain unpushed changes via the _Explain Unpushed Changes_ command in the context menu of branches in the _Commit Graph_ and views ([#4443](https://github.com/gitkraken/vscode-gitlens/issues/4443)) +- Adds improved experience to the _Commit Graph_ + - Improves rendering, scrolling, and selection performance and stability + - Adds "pill-style" stats to the "Work in Progress" (WIP) row in the _Commit Graph_ + - Adds new keyboard navigation support: Home/End to navigate to the first/last row, Page Up/Page Down to navigate by page + - Adds ability to show file or folder histories on the _Commit Graph_ ([#4725](https://github.com/gitkraken/vscode-gitlens/issues/4725)) + - Adds _Open File History in Commit Graph_ command to files in views + - Adds _Open Folder History in Commit Graph_ command to folders in the Explorer view + - Adds new _Solo Branch_ and _Solo Tag_ commands to quickly filter the _Commit Graph_ view to a specific branch or tag ([#4739](https://github.com/gitkraken/vscode-gitlens/issues/4739)) + - Adds _Solo Branch in Commit Graph_ and _Solo Tag in Commit Graph_ commands to the context menu of branches and tags in views + if there are uncommitted changes + - Changes to select the "Work in progress" (WIP) row in the _Commit Graph_ by default if there are uncommitted changes ([#4716](https://github.com/gitkraken/vscode-gitlens/issues/4716)) + - Adds `gitlens.graph.initialRowSelection` setting to specify whether to select the "Work in progress" (WIP) row instead of HEAD +- Adds improved search experience on the _Commit Graph_, _Search & Compare_ view, and in the _Search Commits_ command + - Adds support for reference or range commit searches ([#4723](https://github.com/gitkraken/vscode-gitlens/issues/4723)) + - Adds `ref:` search operator to filter commits by specific references (branches, tags, SHAs) or commit ranges + - Adds natural language support to allow for more powerful queries + - e.g. "show me all commits on `feature-branch` that aren't on `main` + - e.g. "show me all commits after tag v17.6.0" + - Adds ability to filter/search to branch & tag tips ([#4726](https://github.com/gitkraken/vscode-gitlens/issues/4726)) + - Adds `is:tip` search operator to filter to only commits directly pointed to by a branch or tag + - Adds a navigable search history to the search box on the _Commit Graph_ ([#4724](https://github.com/gitkraken/vscode-gitlens/issues/4724)) + - Allows navigation with arrow keys and deletion of history items + - Adds a _No Results_ message to the _Commit Graph_ when there are no search results +- Adds new experience improvements to the _Commit Details_ and _Graph Details_ views + - Adds "pill-style" file changed stats + - Adds rich context menus to files, similar to the tree views + - Adds the ability to see which branches and tags contain a specific commit([#4737](https://github.com/gitkraken/vscode-gitlens/issues/4737)) + - Adds the ability to see which files are matched by a search on the _Commit Graph_ + - Adds a filter toggle button to switch between showing all files, highlighting matched files, and only showing matched files +- Adds a new _Safe Hard Reset_ (`--keep`) option to Git _reset_ command ([#4720](https://github.com/gitkraken/vscode-gitlens/issues/4720)) +- Adds sort context menu toggles for _Branches_, _Contributors_, _Remotes_, _Repositories_, _Tags_, and _Worktrees_ views ([#4738](https://github.com/gitkraken/vscode-gitlens/issues/4738)) + - Adds a new `gitlens.sortWorktreesBy` setting to specify the sort order for worktrees +- Adds support for Claude 4.5 Haiku model and hides older Claude models for GitLens' AI features +- Adds "Copy Changes (Patch)" to uncommitted files in the _Worktrees_, _Commit Details_, and _Graph Details_ views +- Adds "inline" multiline commit message support to the _Commit Graph_ +- Adds _Next Change_ and _Previous Change_ navigation commands to the editor toolbar when the _Changes Annotations_ are active +- Adds keybinding support for copy actions (Ctrl+C / Cmd+C) in the _Launchpad_ view +- Adds _Quick Show Commit_ (`gitlens.showQuickCommitDetails`) command to the Command Palette + +### Changed + +- Improves performance and reduces overhead in many areas + - Faster/less intensive detection of uncommitted changes + - Faster/less intensive conflict file detection + - Greatly improves performance providing the status of worktrees + - Reduces view refresh frequency related to fetch times to avoid extra processing and re-rendering +- Changes to use the "merge target" when we are creating pull requests ([#4709](https://github.com/gitkraken/vscode-gitlens/issues/4709), [#4734](https://github.com/gitkraken/vscode-gitlens/issues/4734)) +- Changes the minimum VS Code version to 1.95.0 ([#4690](https://github.com/gitkraken/vscode-gitlens/issues/4690), [#4691](https://github.com/gitkraken/vscode-gitlens/issues/4691)) +- Improves MCP checks and adds offline detection ([#4687](https://github.com/gitkraken/vscode-gitlens/issues/4687)) +- Improves reference/revision range entry in reference pickers +- Consolidates (and fixes missing) progress indicators and spinners on the _Commit Graph_ + +### Fixed + +- Fixes an issue where the _Home_ view would not update when switching repositories ([#4717](https://github.com/gitkraken/vscode-gitlens/issues/4717)) +- Fixes intermittent stuck loading state on the _Commit Graph_ ([#4669](https://github.com/gitkraken/vscode-gitlens/issues/4669)) +- Fixes underlines showing on home branch actions ([#4703](https://github.com/gitkraken/vscode-gitlens/issues/4703)) +- Fixes _Inspect_ view not showing uncommitted files on the Inspect tab ([#4714](https://github.com/gitkraken/vscode-gitlens/issues/4714)) +- Fixes _Commit Graph_ losing row selection when graph updates ([#4544](https://github.com/gitkraken/vscode-gitlens/issues/4544)) +- Fixes "Element with id already registered" error on comparison w/ multiple repos ([#4521](https://github.com/gitkraken/vscode-gitlens/issues/4521)) +- Fixes _Commit Composer_ diffs misaligned with large editor font sizes ([#4573](https://github.com/gitkraken/vscode-gitlens/issues/4573)) +- Fixes MCP installation flow from proceeding in cases where it shouldn't ([#4672](https://github.com/gitkraken/vscode-gitlens/issues/4672), [#4673](https://github.com/gitkraken/vscode-gitlens/issues/4673), [#4674](https://github.com/gitkraken/vscode-gitlens/issues/4674)) +- Fixes missing layout commands in view menus +- Fixes stage/unstage failures with large file set by adding batching +- Fixes copying untracked files as a patch +- Fixes an issue where the "hidden references" control on the _Commit Graph_ could still receive focus +- Fixes issues with inline versus block Markdown rendering +- Fixes inconsistencies in the Work-in-Progress (WIP) statistics +- Fixes an issue where the "visible day range" on the _Commit Graph_ minimap were not updating +- Fixes showing overview mode when selecting a Work-in-Progress (WIP) row +- Fixes path issues in untracked files and tree file parsing +- Fixes action color on the merge/rebase status component +- Fixes the copy shortcut key on grouped views +- Fixes issue to ensure the immediate firing of repository close events to avoid potential deadlock issues + +## [17.6.2] - 2025-10-16 + +### Changed + +- Reduces view refresh frequency for showing last fetched time to improve performance and reduce overhead +- Replaces OS-specific shell-based unzip with JS solution for better cross-platform support and reliability +- Improves MCP checks and adds offline check ([#4687](https://github.com/gitkraken/vscode-gitlens/issues/4687)) +- Updates auto-compose instructions setting text to a link on _Commit Composer_ + +### Fixed + +- Fixes MCP registration from breaking VS Code chat ([#4701](https://github.com/gitkraken/vscode-gitlens/issues/4701)) +- Fixes MCP extension registration not working on Kiro ([#4691](https://github.com/gitkraken/vscode-gitlens/issues/4691)) +- Fixes intermittent issue with autolinks not showing up ([#4692](https://github.com/gitkraken/vscode-gitlens/issues/4692)) + +## [17.6.1] - 2025-10-08 + +### Fixed + +- Fixes eyebrow banner not appearing for GitLens Community on Home ([#4670](https://github.com/gitkraken/vscode-gitlens/issues/4670)) + +## [17.6.0] - 2025-10-07 + +### Added + +- Adds support for Claude Sonnet 4.5 for GitLens' AI features + +### Changed + +- Greatly improves performance of the _Inspect_ and \_Graph Details views by virtualizing the tree rendering ([#3470](https://github.com/gitkraken/vscode-gitlens/issues/3470)) + - Improved keyboard navigation support including arrow keys, Home/End, Enter/Space, Tab, and added type-ahead search functionality +- Improves Linear issue tracker support ([#4605](https://github.com/gitkraken/vscode-gitlens/issues/4605), [#4615](https://github.com/gitkraken/vscode-gitlens/issues/4615), [#4620](https://github.com/gitkraken/vscode-gitlens/issues/4620), [#4621](https://github.com/gitkraken/vscode-gitlens/issues/4621), [#4622](https://github.com/gitkraken/vscode-gitlens/issues/4622)) + +### Fixed + +- Fixes _Commit Composer_ rendering performance when working changes contain large file diffs ([#4661](https://github.com/gitkraken/vscode-gitlens/issues/4661)) +- Fixes AI cancellation cases being treated as errors ([#4609](https://github.com/gitkraken/vscode-gitlens/issues/4609)) +- Fixes MCP banner not being clickable on Commit graph view ([#4630](https://github.com/gitkraken/vscode-gitlens/issues/4630)) +- Fixes Git diff of a renamed file is shown as a new file ([#4246](https://github.com/gitkraken/vscode-gitlens/issues/4246)) +- Fixes typos ([#4345](https://github.com/gitkraken/vscode-gitlens/issues/4345) — thanks to [PR [#4346](https://github.com/gitkraken/vscode-gitlens/issues/4346)](https://github.com/gitkraken/vscode-gitlens/pull/4346) by Noritaka Kobayashi ([@noritaka1166](https://github.com/noritaka1166))) +- Fixes an issue where the _Commit Graph_ hover would not hide when going from the hover to the graph background (not another row) +- Fixes an issue where clicking _Open Changes_ on commit files in the views would error + +### Removed + +- Removes " (bundled with GitLens)" text from GK MCP server name ([#4664](https://github.com/gitkraken/vscode-gitlens/issues/4664)) + +## [17.5.1] - 2025-09-24 + +### Fixed + +- Fixes Cursor theme color issues with alerts and feature gates ([#4608](https://github.com/gitkraken/vscode-gitlens/issues/4608)) +- Fixes MCP installation completed message not showing after running the _Reinstall GitKraken MCP Server_ command + +## [17.5.0] - 2025-09-23 + +### Added + +- Adds the GitKraken MCP for Git and integration enhanced AI chat workflows — [learn more](https://help.gitkraken.com/mcp/mcp-getting-started/) + - Leverage Git and your integrations (issues, PRs, etc) to provide context and perform actions in AI chat +- Adds rich Linear integration with autolinks, start work, Launchpad, and more ([#4543](https://github.com/gitkraken/vscode-gitlens/issues/4543), [#4579](https://github.com/gitkraken/vscode-gitlens/issues/4579)) +- Adds support for the [GitKraken Student plan](https://www.gitkraken.com/github-student-developer-pack-bundle) + +### Changed + +- Improves AI provider/model fallback handling for better reliability + +### Fixed + +- Fixes connection flow when multiple integrations need to be connected + +## [17.4.1] - 2025-08-26 + +### Fixed + +- Fixes Commit Composer view loading issues and improves performance for rendering large diffs + +## [17.4.0] - 2025-08-21 + +### Added + +- Adds new [_Commit Composer_ view experience](https://github.com/gitkraken/vscode-gitlens/discussions/4530 'Learn more') — the next evolution of the [initial Commit Composer preview](https://github.com/gitkraken/vscode-gitlens/discussions/4408) + - Transforms the automatic commit process into a comprehensive drafting and review experience + - Adds ability to preview changes before committing and iterate by regenerating individual messages or entire commit compositions + - Adds support for switching between different AI models during composition + - Adds custom instruction support to guide AI output to match team conventions and preferences + - Adds integrated diff review for each proposed commit, and manual editing capabilities for any commit message or approach + - Adds manual commit composition support (no AI provider required for basic functionality) + - Adds _Compose Commits (Preview)_ commands accessible from multiple locations: _Home_ view, _Commit Graph_ WIP row, Inspect/Graph Details views, SCM view, and Command Palette +- Adds updated AI model support for GitLens' AI features + - Adds GPT-5 family (GPT-5, GPT-5 Mini, GPT-5 Nano), and Claude 4.1 Opus models +- Add Azure DevOps Server integration support ([#4478](https://github.com/gitkraken/vscode-gitlens/issues/4478)) +- Adds expanded and improved branch favoriting ([#4497](https://github.com/gitkraken/vscode-gitlens/issues/4497)) + - Adds a new "Favorited Branches" option to the branches visibility dropdown on the _Commit Graph_ + - Adds _Add to Favorites_ or _Remove from Favorites_ context menu items to branches in the _Commit Graph_ + - Adds _Add to Favorites_ or _Remove from Favorites_ context menu items to worktrees in the views +- Adds 👍 "Helpful" and 👎 "Unhelpful" feedback buttons to AI-generated Changelog ([#4449](https://github.com/gitkraken/vscode-gitlens/issues/4449)) +- Adds ability to set or change the upstream branch for branches in the _Commit Graph_ and other GitLens views ([#4498](https://github.com/gitkraken/vscode-gitlens/issues/4498)) + - Adds new _Set Upstream..._ and _Change Upstream..._ context menu items to branches in the _Commit Graph_ and other GitLens views + - Adds a new _upstream_ sub-command to the _branch_ Git Command Palette +- Adds new default topological selection mode to the _Commit Graph_ + - Updates `gitlens.graph.multiselect` setting to default to `topological`; set to `true` to allow selecting multiple commits without restriction +- Adds ability to switch between open repositories on the _Visual History_ +- Adds _Visualize Repository History_ commands to the SCM menus +- Adds _Restore Previous Changes_ command to files in the views ([#4542](https://github.com/gitkraken/vscode-gitlens/issues/4542)) + +### Changed + +- Changes branch favoriting to apply to both local and remote branch pairs ([#4497](https://github.com/gitkraken/vscode-gitlens/issues/4497)) +- Improves experience by opening an explain summary document before summary content is generated ([#4328](https://github.com/gitkraken/vscode-gitlens/issues/4328)) +- Improves login handling when user copies authentication URL instead of opening it +- Improves Inspect/Details view button overload ([#4488](https://github.com/gitkraken/vscode-gitlens/issues/4488)) + +### Fixed + +- Fixes _Copy Changes (Patch)_ command not working from the _Commit Graph_ +- Fixes issues with handling token limits when using Copilot models ([#4529](https://github.com/gitkraken/vscode-gitlens/issues/4529)) +- Fixes continuous refreshing when gitkraken.dev cannot renew an expired session ([#4324](https://github.com/gitkraken/vscode-gitlens/issues/4324)) +- Fixes some _Commit Graph_ issues because of reference to previous state context ([#4513](https://github.com/gitkraken/vscode-gitlens/issues/4513)) +- Fixes 'generate-rebase' feedback submissions having undefined "type" ([#4502](https://github.com/gitkraken/vscode-gitlens/issues/4502)) + +## [17.3.4] - 2025-08-11 + +### Added + +- Improves the experience when using multiple repositories or worktrees within a single workspace + - Adds a new header row to GitLens views to allow for repository/worktree filtering -- allows switching between showing all repos/worktrees in a tree (current behavior) or focusing on a single repository or worktree + - Adds new icons to more easily differentiate between repositories and worktrees quick picks and views + - Improves the repository quick pick by visually grouping repositories and worktrees + - Reduces the churn during worktree discovery when the new `git.detectWorktrees` VS Code setting is enabled + - Avoids flashing/blanking out of the _Commit Graph_ during the same worktree discovery + +### Fixed + +- Fixes a caching issue when certain Git commands fail causing no data to be displayed until cache expires or the window is reloaded +- Fixes some edge case issues with navigating to the previous line change in the editor +- Fixes an issue when using the _Paste Copied Changes (Patch)_ with multiple repositories or worktrees opened + +## [17.3.3] - 2025-07-28 + +### Fixed + +- Fixes Commit Graph elements referencing previous state context ([#4513](https://github.com/gitkraken/vscode-gitlens/issues/4513)) + +## [17.3.2] - 2025-07-22 + +### Changed + +- Updates token count in account hover messaging + +## [17.3.1] - 2025-07-15 + +### Changed + +- Changes branch creation to avoid setting an upstream branch if the new branch name and remote branch name don't match ([#4477](https://github.com/gitkraken/vscode-gitlens/issues/4477)) +- Improves performance of the _Commit Graph_ by consolidating state management and reducing theme color computation + +### Fixed + +- Fixes unstaging files doesn't work in the Inspect/Details views ([#4485](https://github.com/gitkraken/vscode-gitlens/issues/4485)) +- Fixes error when stashing only staged changes ([#4490](https://github.com/gitkraken/vscode-gitlens/issues/4490)) +- Fixes staged/unstaged headers missing in _Inspect_ view when working changes are all staged or unstaged ([#4487](https://github.com/gitkraken/vscode-gitlens/issues/4487)) +- Fixes AI stash message generation when all changes are staged + +## [17.3.0] - 2025-07-08 + +### Added + +- Adds support for using natural language to search for commits on the _Commit Graph_, _Search & Compare_ view, and in the _Search Commits_ command using AI ([#4471](https://github.com/gitkraken/vscode-gitlens/issues/4471)) +- Adds support for time-based commit searches on the _Commit Graph_, _Search & Compare_ view, and in the _Search Commits_ command +- Adds 👍 "Helpful" and 👎 "Unhelpful" feedback buttons to AI-generated markdown previews such as Commit Composer and Explain Changes ([#4449](https://github.com/gitkraken/vscode-gitlens/issues/4449)) +- Adds a _Commit with AI (Preview)_ button to the _Inspect Overview_ tab of the _Commit Graph_ and _Inspect_ views + +### Changed + +- Improves experience for invalid AI rebase responses by implementing conversational retry logic that provides specific feedback to the AI about missing, extra, or duplicate hunks and automatically retries up to 3 times ([#4395](https://github.com/gitkraken/vscode-gitlens/issues/4395)) + +### Fixed + +- Fixes stashes with parent commits older than the oldest stash not being visible on branches ([#4401](https://github.com/gitkraken/vscode-gitlens/issues/4401)) +- Fixes editing search result in Search & Compare view failure ([#4431](https://github.com/gitkraken/vscode-gitlens/issues/4431)) +- Fixes search results not paging properly on the _Commit Graph_ when the first page of results is contained within the already loaded commits + +## [17.2.2] - 2025-07-03 + +### Changed + +- Updates promo banners and content + +## [17.2.1] - 2025-06-26 + +### Changed + +- Improves AI status label in integrations popup to "Select AI model to enable AI features" and fixes text brightness ([#4400](https://github.com/gitkraken/vscode-gitlens/issues/4400)) + +### Fixed + +- Fixes disabled GitLens view tabs on clean install ([#4416](https://github.com/gitkraken/vscode-gitlens/issues/4416)) +- Fixes Stashes view errors w/ ID already exists ([#4427](https://github.com/gitkraken/vscode-gitlens/issues/4427)) +- Fixes showing GitLens view tabs when the view is hidden ([#4426](https://github.com/gitkraken/vscode-gitlens/issues/4426), [#4389](https://github.com/gitkraken/vscode-gitlens/issues/4389)) + +## [17.2.0] - 2025-06-17 + +### Added + +- Adds new AI commands (in preview) which can generate (and rebase) commits from working tree changes or from commits in an existing branch ([#4301](https://github.com/gitkraken/vscode-gitlens/issues/4301)): + - Adds the _Generate Commits with AI (Preview)_ command to the command palette, and to the context menu or working tree changes in views and the _Commit Graph_. This command stashes working tree changes, generates a set of commits from those changes, and commits them to the current branch. + - Adds the _Rebase with AI (Preview)_ command to the command palette and _AI Rebase Current Branch onto Commit (Preview)_ command to the context menu of commits in views and the _Commit Graph_. This command takes the commits on a branch, reorganizes them into a new set of AI-generated commits, creates a branch at the chosen commit and commits them to the new branch + - These commands also generate a document to explain each generated commit and its contents + - Adds messaging and confirmation on first-time use of the commands to explain how they work ([#4367](https://github.com/gitkraken/vscode-gitlens/issues/4367)) + - Adds an _Undo_ button to the success notification of the commands which attempts to revert the generated commits/branch ([#4366](https://github.com/gitkraken/vscode-gitlens/issues/4366)) +- Adds contributors to _File History_ view ([#4356](https://github.com/gitkraken/vscode-gitlens/issues/4356)) +- Adds support for AI controls from the active organization's security settings on the current account ([#4300](https://github.com/gitkraken/vscode-gitlens/issues/4300)) +- Adds o3 Pro model and latest Gemini 2.5 Pro preview support to GitLens AI features ([#4388](https://github.com/gitkraken/vscode-gitlens/issues/4388)) +- Adds Anthropic Claude 4 Opus and Claude 4 Sonnet support to GitLens AI features +- Adds support for Mistral models to GitLens AI features +- Adds a loading message to several GitLens views when the content of the view is still loading +- Adds inline buttons to the stash and commit picker and ensures proper messaging when there are no stashes or commits available +- Adds the _Open Worktree in New Window_ command to branch cards in _Home_ view + +### Changed + +- Automatically stashes (and pops) uncommitted changes on Pull ([#4296](https://github.com/gitkraken/vscode-gitlens/issues/4296)) +- Improves the interaction experience with _Home_ view ([#4302](https://github.com/gitkraken/vscode-gitlens/issues/4302)): + - Simplifies the "work item" section ([#4332](https://github.com/gitkraken/vscode-gitlens/issues/4332)) + - Removes the option to associate an issue from cards in the "recent" section ([#4333](https://github.com/gitkraken/vscode-gitlens/issues/4333)) +- Combines the "Create Pull Request" and "Create with AI" buttons into a split button ([#4330](https://github.com/gitkraken/vscode-gitlens/issues/4330)) +- On the _Home_ view in the active branch card replaces repository with a breadcrumb that has both the repository and current branch, where the repository is collapsible and is hidden by default ([#4332](https://github.com/gitkraken/vscode-gitlens/issues/4332)) +- Hides Walkthrough links and buttons in _Cursor_ because they are not applicable ([#3837](https://github.com/gitkraken/vscode-gitlens/issues/3837)) +- Changes _Delete Branch_ commands to no longer use/open a terminal ([#3528](https://github.com/gitkraken/vscode-gitlens/issues/3528)) +- Improves the appearance of view headings when collapsed into the grouped view ([#4355](https://github.com/gitkraken/vscode-gitlens/issues/4355)) +- Uses virtual documents instead of untitled documents for summaries generated by GitLens AI commands, and adds a "regenerate" option to most summaries ([#4326](https://github.com/gitkraken/vscode-gitlens/issues/4326)) +- Updates search results in some views to update dynamically with a count +- Improves the loading performance of the _Worktrees_ view +- Remembers selected nodes in certain views when they lose and regain focus +- Automatically expands the remote in _Remotes_ view when it is the only remote + +### Fixed + +- Fixes some cases where "element with id is already registered" errors occur across several GitLens views ([#3341](https://github.com/gitkraken/vscode-gitlens/issues/3341), [#3442](https://github.com/gitkraken/vscode-gitlens/issues/3442), [#3862](https://github.com/gitkraken/vscode-gitlens/issues/3862)) +- Fixes the _Visual File History_ view from refreshing needlessly when the active editor changes between revisions ([#4325](https://github.com/gitkraken/vscode-gitlens/issues/4325)) +- Fixes cancellation of prompts on certain AI commands causing an error notification ([#4354](https://github.com/gitkraken/vscode-gitlens/issues/4354)) +- Fixes files missing in the Repositories view when the "Use compact file layout" option is disabled ([#4307](https://github.com/gitkraken/vscode-gitlens/issues/4307)) +- Fixes "path is already registered" error after git pull ([#922](https://github.com/gitkraken/vscode-gitlens/issues/922)) +- Fixes GitLens file watchers causing high CPU usage in some cases ([#4335](https://github.com/gitkraken/vscode-gitlens/issues/4335)) +- Fixes some cases where stashes and commits incorrectly appear on branches in the _Repositories_ view ([#4353](https://github.com/gitkraken/vscode-gitlens/issues/4353)) + +## [17.1.1] - 2025-05-21 + +### Fixed + +- Fixes Commit Graph not visualizing for some git providers ([#4305](https://github.com/gitkraken/vscode-gitlens/issues/4305)) +- Fixes issue when slicing by branch in Visual History where the selected branch was not used properly + +## [17.1.0] - 2025-05-15 + +### Added + +- Adds AI-powered "Explain" commands for work-in-progress (WIP) changes, commits, stashes, and branches + - Adds _Explain Branch Changes (Preview)_, _Explain Changes (Preview)_, and _Explain Working Changes (Preview)_ actions to branches, commits and stashes, and WIP, respectively in the _Commit Graph_ + - Adds _Explain Branch Changes (Preview)_ and _Explain Changes (Preview)_ actions to branches, commits and stashes in the other GitLens views + - Adds an _✨ Explain_ button to the editor and status bar blame hovers + - Adds an _✨ Explain_ button above the commit message in the _Inspect_ view which replaces the _Explain_ panel + - Adds _Explain Branch Changes (Preview)_ and _Explain Working Changes (Preview)_ (when applicable) actions to the `...` menu on the _Home_ view + - Adds _Explain Branch Changes (Preview)_, _Explain Commit Changes (Preview)_, _Explain Stash Changes (Preview)_, and _Explain Working Changes (Preview)_ actions to the Command Palette +- Adds updated AI provider and model support for GitLens' AI features + - Adds Ollama and OpenRouter support ([#3311](https://github.com/gitkraken/vscode-gitlens/issues/3311), [#3906](https://github.com/gitkraken/vscode-gitlens/issues/3906)) + - Adds Google Gemini 2.5 Flash (Preview) model, and OpenAI GPT-4.1, GPT-4.1 mini, GPT-4.1 nano, o4 mini, and o3 models ([#4235](https://github.com/gitkraken/vscode-gitlens/issues/4235)) + - Adds support for Azure AI (OpenAI-compatible) models + - Adds support for custom OpenAI-compatible providers ([#4263](https://github.com/gitkraken/vscode-gitlens/issues/4263)) + - Adds `gitlens.ai.enabled` setting to disable all AI-powered features + - Adds a walkthrough for AI features +- Adds an all-new _Visual History_, a powerful evolution of the _Visual File History_, providing a dynamic and insightful visualization of your repository's history, offering flexibility to explore changes across files, folders, branches, and your entire project + - Visualize the history sliced by author (the default) or by branch (when applicable), providing different perspectives on contributions and development lines + - Slicing by author allows you to see the contributions of each author over time + - Slicing by branch allows you to see unmerged commits on parallel development lines — only available when viewing the history of all branches of a file or folder + - Use the zoom/pan functionality to focus on specific timeframes or areas of interest via mouse wheel or zoom buttons + - Adds a breadcrumb navigation bar, with branch switcher and file/folder picker, allowing you to easily navigate the history of files, folders, branches, or the entire repository + - Hold `Alt` or `Shift` when clicking on the breadcrumbs to open the repository or folder in a new tab + - Adds the configuration popover to customize the visualization, including the branch or all branches, timeframe, and how to slice the history + - Adds a scrubber bar to provide an almost time-lapse view for navigating through the changes introduced with each commit in history + - Adds _Visualize Repo History_ and _Visualize Branch History_ actions to the _Home_ view + - Adds _Show Visual History_ command to the Command Palette +- Adds the ability to change a branch's merge target in Home view. ([#4224](https://github.com/gitkraken/vscode-gitlens/issues/4224)) +- Adds enhanced integration with Azure DevOps, Bitbucket, and Bitbucket Data Center to support associated accounts and pull requests on commits ([#4192](https://github.com/gitkraken/vscode-gitlens/issues/4192)) +- Adds the ability to search for GitHub Enterprise and GitLab Self-Managed pull requests by URL in Launchpad +- Adds enhanced and improved accuracy and performance of the revision navigation ([#4200](https://github.com/gitkraken/vscode-gitlens/issues/4200)) + - Adds support for navigating line ranges in addition to individual lines +- Adds "changes" statistics for stashes in the _Commit Graph_ +- Adds _Open File at Revision from Remote_ command to open the specific file revision from a remote file URL +- Adds `Copy SHA` action to editor hovers +- Adds avatars to the hidden Branch / Tags popover in the _Commit Graph_ + +### Changed + +- Changes the display of autolinks in the _Inspect_ and _Commit Graph Inspect_ views ([#4286](https://github.com/gitkraken/vscode-gitlens/issues/4286)). + - Replaces the autolinks panel with a new compact "footer" bar below the commit message +- Optimizes (rewrote) Git execution and parsing for significantly improved performance, especially with large repositories, and reliability + - Improves contributor fetching performance, especially for large repositories, and adds more advanced data for contributor statistics + - Improves performance of loading data for the _Commit Graph_ + - Improves cancellation support in many Git operations for better responsiveness and system resource usage + - Adds `gitlens.advanced.commits.delayLoadingFileDetails` setting to delay loading full commit file details until required to improve performance even more for large repositories +- Improves _Commit Graph_ rendering performance, re-rendering avoidance, and selection responsiveness + - Switches the _Commit Graph_ webview to use [Lit](https://lit.dev/) and upgraded to React 19 for the graph component + - Improves commit search performance and reliability, epecially when paging in new results +- Improves branch name autolink matching logic for better accuracy and fewer false positives ([#3894](https://github.com/gitkraken/vscode-gitlens/issues/3894)) +- Improves commit search accuracy and performance both in the _Search & Compare_ view and the _Commit Graph_ +- Improves commit searches in the _Search & Compare_ view to show only the matching files for file or change-based searches +- Improves commit searches in the _Search & Compare_ view to show matching stashes +- Improves accuracy and performance of the _File History_ and _Line History_ views +- Improves performance of the _Contributors_ view, especially with large repositories + - Adds a configurable `gitlens.views.contributors.maxWait` timeout setting for fetching contributors to avoid potentially long waits +- Improves GitHub integration authentication check performance, when the authentication extension is disabled or unavailable (Cursor, Windsurf, etc) ([#4065](https://github.com/gitkraken/vscode-gitlens/issues/4065)) +- Improves AI model adherence to provided custom instructions ([#4267](https://github.com/gitkraken/vscode-gitlens/issues/4267)) +- Changes cherry-pick command no longer use/open a terminal ([#3531](https://github.com/gitkraken/vscode-gitlens/issues/3531)) +- Improves date setting descriptions ([#3953](https://github.com/gitkraken/vscode-gitlens/issues/3953)) + +### Fixed + +- Fixes an error that can occur when retrieving the active repository, such as when the current file is not part of a repository. +- Fixes cache collision between issues and PRs in autolinks ([#4193](https://github.com/gitkraken/vscode-gitlens/issues/4193)) +- Fixes incorrect PR Link Across Azure DevOps Projects ([#4207](https://github.com/gitkraken/vscode-gitlens/issues/4207)) +- Fixes detail view incorrectly parses GitHub account in commit message ([#3246](https://github.com/gitkraken/vscode-gitlens/issues/3246)) +- Fixes timed out waiting for authentication provider to register in GitLens after update to version 16.3 ([#4065](https://github.com/gitkraken/vscode-gitlens/issues/4065)) +- Fixes cloud integration sessions not refreshing when they expire mid-session ([#4240](https://github.com/gitkraken/vscode-gitlens/issues/4240)) +- Fixes "Delete Worktree" doing nothing when the default worktree is already open in another window ([#4232](https://github.com/gitkraken/vscode-gitlens/issues/4232)) +- Fixes some cases in which Azure DevOps queries fail or return unexpected results ([#4271](https://github.com/gitkraken/vscode-gitlens/issues/4271)) +- Fixes element with id is already registered for commit searches in the _Search & Compare_ view +- Fixes hierarchical compaction in file trees (e.g., a parent folder disappearing if a subfolder with a similar name exists) +- Fixes cherry-pick commit ordering by falling back to author date if committer date matches +- Fixes issues when using older versions of Git (>= Git 2.7.2) +- Fixes cases where rename detection was not working properly + +### Removed + +- Deprecates the `gk-target-base` Git configuration key + +### Engineering + +- Bumps `eslint-plugin-import-x` to v4.10.5 — thanks to [PR [#4236](https://github.com/gitkraken/vscode-gitlens/issues/4236)](https://github.com/gitkraken/vscode-gitlens/pull/4236) by JounQin ([@JounQin](https://github.com/JounQin)) + +## [17.0.3] - 2025-04-17 + +### Changed + +- Improves AI-related error messages ([#4227](https://github.com/gitkraken/vscode-gitlens/issues/4227)) +- Shows the default worktree with a branch icon in the Home view + +### Fixed + +- Fixes `undefined` sometimes showing for search results in the _Search Commits_ command and _Search & Compare_ view +- Fixes missing account menu buttons for synchronizing account status and managing account + +## [17.0.2] - 2025-04-11 + +### Changed + +- Updates discount messaging ([#4202](https://github.com/gitkraken/vscode-gitlens/issues/4202)) + +### Fixed + +- Fixes branches not found for older git version ([#4201](https://github.com/gitkraken/vscode-gitlens/issues/4201)) +- Fixes worktree commands not registered ([#4203](https://github.com/gitkraken/vscode-gitlens/issues/4203)) +- GL won't publish/push initial commit to remote from Home ([#4010](https://github.com/gitkraken/vscode-gitlens/issues/4010)) + +## [17.0.1] - 2025-04-03 + +### Added + +- Adds new large prompt warning for GitLens' AI features ([#4183](https://github.com/gitkraken/vscode-gitlens/issues/4183)) + - Adds a new `gitlens.ai.largePromptWarningThreshold` setting to specify the threshold (in tokens) for when to show a warning about the prompt being too large +- Adds _Generate Commit Message with GitLens_ and _Stash All Changes..._ buttons to the Source Control toolbar by default — can be configured via the `gitlens.menus` setting + +### Fixed + +- Fixes _Create PR with AI_ isn't including commit messages properly ([#4198](https://github.com/gitkraken/vscode-gitlens/issues/4198)) +- Fixes some cases where "Switch" and "Open in Worktree" actions in Launchpad fail to fully open the repo ([#4196](https://github.com/gitkraken/vscode-gitlens/issues/4196)) + +## [17.0.0] - 2025-03-31 + +### Added + +- Adds support for GitKraken AI (Preview), powered by Google Gemini, included with all GitLens Pro subscriptions +- Adds expanded support for GitHub Copilot-provided AI models +- Adds an AI-powered "Create with AI" button to assist with creating pull requests for GitHub and GitLab +- Adds AI-powered changelog generation between two references ([#4189](https://github.com/gitkraken/vscode-gitlens/issues/4189)) + - Adds a _Generate Changelog (Preview)..._ command to the Command Palette + - Adds a _Generate Changelog (Preview)..._ context menu item to branches and tags in the _Commit Graph_ and in GitLens views + - Adds a _Generate Changelog (Preview)_ context menu item to Behind/Ahead comparison results in Gitlens views +- Adds AI model status and model switcher to the _Home_ view ([#4064](https://github.com/gitkraken/vscode-gitlens/issues/4064)) +- Adds Anthropic Claude 3.7 Sonnet model for GitLens' AI features ([#4101](https://github.com/gitkraken/vscode-gitlens/issues/4101)) +- Adds Google Gemini 2.5 Pro (Experimental) and Gemini 2.0 Flash-Lite model for GitLens' AI features ([#4104](https://github.com/gitkraken/vscode-gitlens/issues/4104)) +- Adds new Bitbucket Cloud and Data Center integration ([#3916](https://github.com/gitkraken/vscode-gitlens/issues/3916)) + - Adds enriched links to PRs and issues ([#4045](https://github.com/gitkraken/vscode-gitlens/issues/4045)) + - Adds Bitbucket Cloud and Data Center PRs in _Launchpad_ ([#4046](https://github.com/gitkraken/vscode-gitlens/issues/4046)) + - Adds support for Bitbucket issues in _Start Work_ and allows associating issues with branches ([#4047](https://github.com/gitkraken/vscode-gitlens/issues/4047), [#4107](https://github.com/gitkraken/vscode-gitlens/issues/4107)) +- Adds support for multi-select in GitLens views, enabled by default + - Adds _Cherry Pick Commits..._, _Copy Remote Commit URLs_ , and _Open Commits on Remote_ actions to multi-selected commits in the _Commit Graph_ and GitLens views + - Adds _Add as Co-authors_ action to multi-selected contributors in GitLens views + - Adds _Delete Branches..._, _Open Branches on Remote_, _Add to Favorites_, and _Remove from Favorites_ actions to multi-selected branches in GitLens views + - Adds _Delete Tags..._ action to multi-selected tags in GitLens views + - Adds _Drop Stashes..._ action to multi-selected stashes in GitLens views + - Adds _Delete Worktrees..._ and _Open Worktrees in New Window_ actions to multi-selected worktrees in GitLens views +- Adds ability to control how worktrees are displayed in the views + - Adds a `gitlens.views.worktrees.worktrees.viewAs` setting to specify whether to show worktrees by name, path, or relative path + - Adds a `gitlens.views.worktrees.branches.layout` setting to specify whether to show branch worktrees as a list or tree, similar to branches +- Improves detection in the merge target hover on _Home_ for other cases where a branch was merged and adds other actions for the branch and its merge target ([#4124](https://github.com/gitkraken/vscode-gitlens/issues/4124)) +- Adds expanded support for creating pull requests to all supported providers ([#4142](https://github.com/gitkraken/vscode-gitlens/issues/4142)) +- Adds a _Merge Changes (Manually)..._ action to files in GitLens view to merge changes in those files into the working tree +- Adds an _Open Changes with Common Base_ action to comparison results files + +### Changed + +- Improves performance by avoiding eager loading of full commit details for inline blame ([#4115](https://github.com/gitkraken/vscode-gitlens/issues/4115)) +- Improves performance by removing `--full-history` flag usage in git commands +- Updates the _Switch AI Model_ command and flow + - Renames the _Switch AI Model_ command to _Switch AI Provider/Model_ + - Allows the provider to be selected before displaying a list of models + - Adds inline actions to reset or configure a provider at the provider step +- Curated the list of AI models available for GitLens' AI features +- Improves behavior when opening multiple file changes simultaneously +- Improves accuracy of file lists and stats for uncommitted changes +- Changes AI features (stash description, changelog generation) to honor organization settings + +### Fixed + +- Fixes Bitbucket Server remote - "scm/" path prefix not removed (regression) ([#3218](https://github.com/gitkraken/vscode-gitlens/issues/3218)) +- Fixes large commit messages work poorly on Commit Graph ([#4100](https://github.com/gitkraken/vscode-gitlens/issues/4100)) +- Fixes _Show \* View_ commands fail intermittently ([#4127](https://github.com/gitkraken/vscode-gitlens/issues/4127)) +- Fixes _Load more_ action not working on incoming changes in Commits/Repositories views ([#4154](https://github.com/gitkraken/vscode-gitlens/issues/4154)) +- Fixes incorrect settings.json entry for Google Gemini 2.0 Flash Thinking causes linter warning ([#4168](https://github.com/gitkraken/vscode-gitlens/issues/4168)) +- Fixes multiple autolinks in commit message are broken when enriched ([#4069](https://github.com/gitkraken/vscode-gitlens/issues/4069)) +- Fixes `gitlens.hovers.autolinks.enhanced` setting is not respected ([#4174](https://github.com/gitkraken/vscode-gitlens/issues/4174)) +- Fixes sign out action on Account popover is actually sign in ([#4182](https://github.com/gitkraken/vscode-gitlens/issues/4182)) +- Fixes Launchpad view causing an "add remote" prompt on load ([#4039](https://github.com/gitkraken/vscode-gitlens/issues/4039)) +- Fixes Launchpad indicator not updating when an item is snoozed ([#4103](https://github.com/gitkraken/vscode-gitlens/issues/4103)) +- Fixes autolinks sometimes not shown in the Inspect view when integrations were disconnected +- Fixes an issue with overlapping popover UI elements + +## [16.3.3] - 2025-03-13 + +### Fixed + +- Fixes GitLens gets stuck after rebase ([#4078](https://github.com/gitkraken/vscode-gitlens/issues/4078)) + +## [16.3.2] - 2025-02-21 + +## [16.3.1] - 2025-02-20 + +### Fixed + +- Fixes Generate Commit Message Error - Anthropic ([#4071](https://github.com/gitkraken/vscode-gitlens/issues/4071)) +- Fixes Settings editor breaking when dragging it to a new tab group ([#4061](https://github.com/gitkraken/vscode-gitlens/issues/4061)) +- Fixes regression where hovering over the Graph WIP row doesn't show up anymore ([#4062](https://github.com/gitkraken/vscode-gitlens/issues/4062)) +- Fixes Inspect & Graph Details: autolinks rendering when enabled setting is false ([#3841](https://github.com/gitkraken/vscode-gitlens/issues/3841)) +- Fixes comparison with Merge Target on Home fails to open a valid comparison ([#4060](https://github.com/gitkraken/vscode-gitlens/issues/4060)) +- Fixes closing the walkthrough on Home from opening the walkthrough ([#4050](https://github.com/gitkraken/vscode-gitlens/issues/4050)) +- Fixes horizontal scrollbar from showing up on the old Home view ([#4051](https://github.com/gitkraken/vscode-gitlens/issues/4051)) +- Fixes a failure when copying changes to a worktree ([#4049](https://github.com/gitkraken/vscode-gitlens/issues/4049)) + +## [16.3.0] - 2025-02-11 + +### Added + +- Adds rich support for Azure DevOps — closes [#3902](https://github.com/gitkraken/vscode-gitlens/issues/3902) + - Adds integration status and connection flows to the _Home_ view; closes [#3976](https://github.com/gitkraken/vscode-gitlens/issues/3976) + - Adds autolinks, issues and pull requests in the _Commit Graph_ and _Home_ view; closes [#3977](https://github.com/gitkraken/vscode-gitlens/issues/3977) + - Adds pull request support in _Launchpad_ — closes [#3978](https://github.com/gitkraken/vscode-gitlens/issues/3978) + - Adds issue support to _Start Work_; closes [#3979](https://github.com/gitkraken/vscode-gitlens/issues/3979) +- Adds new AI-powered ability to generate a stash message from the changes in the _Stash_ commands +- Adds and expands AI model support for GitLens' AI features + - Adds DeepSeek V3 and R1 models — closes [#3943](https://github.com/gitkraken/vscode-gitlens/issues/3943) + - Adds o3-mini and o1 OpenAI models + - Adds Gemini 2.0 Flash, Gemini 2.0 Flash-Lite, Gemini 2.0 Pro, and Gemini 2.0 Flash Thinking models + - Adds dynamic model loading for GitHub Models and HuggingFace models + - Adds a `gitlens.ai.modelOptions.temperature` setting to specify the temperature (randomness) for AI models that support it + - Adds a _Switch Model_ button to the AI confirmation prompts +- Adds Windsurf support — closes [#3969](https://github.com/gitkraken/vscode-gitlens/issues/3969) +- Adds "pro" indicators for applicable integrations — closes [#3972](https://github.com/gitkraken/vscode-gitlens/issues/3972) + +### Changed + +- Improves performance of updates to active and recent branches on the _Home_ view + +### Fixed + +- Fixes [#3952](https://github.com/gitkraken/vscode-gitlens/issues/3952) - Interactive rebase doesn't work in GL without VS Code added to path +- Fixes [#3938](https://github.com/gitkraken/vscode-gitlens/issues/3938) - GitLens automatically initiating an external sign-in after install on vscode.dev +- Fixes [#3946](https://github.com/gitkraken/vscode-gitlens/issues/3946) - Home View doesn't update repo state changes made when hidden +- Fixes [#3940](https://github.com/gitkraken/vscode-gitlens/issues/3940) - Commit Details: issue autolinks can disappear after enrichment +- Fixes [#4035](https://github.com/gitkraken/vscode-gitlens/issues/4035) - Repo is lost when "Generate commit" is requested + +## [16.2.1] - 2025-01-21 + +### Fixed + +- Fixes [#3954](https://github.com/gitkraken/vscode-gitlens/issues/3954) - Graph breaks when opening in an editor tab +- Fixes uncaught errors with cloud self-hosted integrations + +## [16.2.0] - 2025-01-17 + +### Added + +- Adds richer support for GitHub Enterprise and GitLab Self-Managed — closes [#3901](https://github.com/gitkraken/vscode-gitlens/issues/3901), [#3934](https://github.com/gitkraken/vscode-gitlens/issues/3934) + - Adds pull request/merge request support in _Launchpad_ — closes [#3923](https://github.com/gitkraken/vscode-gitlens/issues/3923) + - Adds issue support to _Start Work_ + - Adds integration status and connection flows to the _Home_ view +- Adds new ability to search for a GitLab merge request in the _Launchpad_ — closes [#3788](https://github.com/gitkraken/vscode-gitlens/issues/3788) +- Adds merge target's merged status to the _Home_ view + - GitLens will attempt to determine if the current branch has been merged into its the merge target branch (or the local branch of the merge target) +- Overhauls the _Visual File History_ + - Improves commit bubble sizing to better handle outliers + - Improves hover content and interations + - Adds explicit zoom in/out buttons and changes mouse zoom to use the mouse wheel — when zoomed, drag to scrub through the history + - Optimizes chart resizing and axis label rendering with author indicators, and re-adds the legend to the view +- Adds a new _Folder History_ > _Open Visual Folder History_ command to folders in the _Explorer_ view, _Source Control_ view, and other GitLens views +- Adds new ability to see and act upon a "paused" Git operation, e.g. merge, rebase, cherry-pick, revert, across the _Commits_, _Commit Graph_, and _Home_ views — closes [#3913](https://github.com/gitkraken/vscode-gitlens/issues/3913) + - Adds a new banner on the _Commit Graph_ and updates the banner on _Home_ with actions to continue, skip, or abort the operation + - Adds _Continue_, _Skip_, and _Abort_ actions to the _Commits_ view +- Adds a _GitLens Home_ button to the _Commit Graph_ header to go to the _Home_ view title section — closes [#3873](https://github.com/gitkraken/vscode-gitlens/issues/3873) +- Adds a new _Hidden Branches / Tags_ dropdown button next to the _Branch Visibility_ dropdown in the _Commit Graph_ toolbar — closes [#3101](https://github.com/gitkraken/vscode-gitlens/issues/3101) +- Adds a new _Contributors_ section to comparison results in the views — quickly see who contributed changes in the specific range with statistics +- Adds statistics to contributors in the GitLens views when enabled +- Adds AI model name in commit message generation notifications + +### Changed + +- Improves branch status icons/indicators on the _Home_ view +- Improves branch contributors avatars on the _Home_ view; improved scoring and ordering +- Improves performance of loading/reloading the _Home_ view +- Improves performance of detecting paused Git operations, e.g. merge, rebase, cherry-pick, revert +- Changes GitLens to be XDG-compatible — closes [#3660](https://github.com/gitkraken/vscode-gitlens/issues/3660) +- Changes GitLens "reset" command to no longer use/open a terminal — closes [#3533](https://github.com/gitkraken/vscode-gitlens/issues/3533) +- Changes to format numbers, e.g. counts, with internationalization (i18n) support +- Improves command ordering on branch context menus +- Changes _File History_ context menu to _Folder History_ on folders in the _Explorer_ view + Adds Open Visual Folder History to explorer folders + Adds Open [Visual] Folder History to folders in views + +### Fixed + +- Fixes [#3915](https://github.com/gitkraken/vscode-gitlens/issues/3915) - Closing a split editor with annotations causes the Clear Annotations button to get stuck +- Fixes [#3914](https://github.com/gitkraken/vscode-gitlens/issues/3914) - Attempting to clear a file annotation on a split file w/o the annotation no-ops +- Fixes [#3911](https://github.com/gitkraken/vscode-gitlens/issues/3911) - Avoid Home opening when first-install isn't reliable (e.g. GitPod) +- Fixes [#3888](https://github.com/gitkraken/vscode-gitlens/issues/3888) - Graph hover should disappear when right-clicking a row +- Fixes [#3909](https://github.com/gitkraken/vscode-gitlens/issues/3909) - GitLens "Pull with Rebase" is not rebase, but merge +- Fixes [#3476](https://github.com/gitkraken/vscode-gitlens/issues/3476) - Can't show commit graph in floating window +- Fixes an issue with unpin button visibility in the _File History_ view +- Fixes intermittent issue with greater reliability of webview requests +- Fixes an issue with autolink enrichment for issues +- Fixes issues with incorrect aggregate contributor stats + +## [16.1.1] - 2024-12-20 + +### Added + +- Adds action to the launchpad status on PR's on _Home_ to open the _Launchpad_ directly to the item + +### Changed + +- Improves draft PR handling and launchpad grouping + +### Fixed + +- Fixes [#3899](https://github.com/gitkraken/vscode-gitlens/issues/3899) - custom autolinks not being detected +- Fixes owner avatars from getting lost (progressively) on refresh of the _Home_ view +- Fixes launchpad status icon for 'waiting for review' state on _Home_ +- Fixes missing _Delete Branch..._ command from branches on worktrees in the _Branches_ view + +## [16.1.0] - 2024-12-19 + +### Added + +- Remodels and polishes the _Home_ view: + - Adds a new header bar with information, controls, and management for your account and integrations + - Branch cards are now grouped, expandable sets which include information on the branch, its associated pull requests and issues + - Adds "merge target" status to the active branch + - Includes the status of the branch relative to the branch that it is most likely to be merged into (its "merge target") + - Includes pre-emptive conflict detection with the merge target and _Merge_ and _Rebase_ actions + - Adds merge and rebase status to the active branch while in a merge or rebase + - Adds a _Commit_ action which automatically generates a commit message and focuses the SCM commit box + - Integrates Launchpad status directly into pull requests and adds colored indicators reflecting Launchpad statuses: "Mergeable", "Blocked", and "Needs Attention" + - Adds upstream status information to branch cards + - Adds more pull request actions: + - _Open Pull Request Changes_ which opens a pull request's changes in a multidiff editor tab + - _Compare Pull Request_ which opens a pull request in the _Search & Compare_ view + - _Open Pull Request Details_ which opens a pull request in the _Pull Request_ view + - Adds the ability to share your working changes with teammates + - Increases the prominence of the "branch owner's" avatar + - The "branch owner" is the person who contributed the most changes across the commits between the branch's HEAD and branching point + - Adds contextual tooltips throughout +- Adds pre-emptive conflict detection to _Merge_ and _Rebase_ git commands +- Adds the ability to show stashes in the _Commits_, _Branches_ and _Worktrees_ views — off by default, can be toggled in the _View Options_ context menu of each view +- Adds the ability to show remote branches (for the default remote) in the _Branches_ view — off by default, can be toggled in the _View Options_ context menu of each view +- Adds the ability to associate issues with branches — closes [#3870](https://github.com/gitkraken/vscode-gitlens/issues/3870) + - Shows issues associated with branches in _Home_ view — closes [#3806](https://github.com/gitkraken/vscode-gitlens/issues/3806) + - Shows issues associated with branches in the _Commit Graph_ + - Adds a new command _Associate Issue with Branch..._ command to the command palette and to the context menus of branches in views and the _Commit Graph_ allowing the user to associate an issue with an existing branch — closes [#3884](https://github.com/gitkraken/vscode-gitlens/issues/3884) + - Associates issues chosen in the _Start Work_ command with branches created for them +- Adds the ability to get autolinks for branches via the branch name — closes [#3547](https://github.com/gitkraken/vscode-gitlens/issues/3547) +- Adds GitLab issues to the issues list in the _Start Work_ command when GitLab is connected — closes [#3779](https://github.com/gitkraken/vscode-gitlens/issues/3779) +- Adds the latest Gemini models to AI features +- Adds support for deep links to the _Home_ view +- Adds `gitlens.advanced.caching.gitPath` setting to specify whether to cache the git path — closes [#2877](https://github.com/gitkraken/vscode-gitlens/issues/2877) + +### Changed + +- Improves the _Launchpad_ search experience — closes [#3855](https://github.com/gitkraken/vscode-gitlens/issues/3855): + - Adds a _Search for Pull Request..._ option that allows the user to search for pull requests outside of the listed ones in _Launchpad_. Currently supports GitHub pull requests, with GitLab soon to be added. + - Pasting a pull request URL which does not match any listed _Launchpad_ issues will automatically trigger a GitHub search for the pull request + - When in provider search mode, adds a _Cancel Searching_ option which will restore the original list of pull requests. Clearing the search input will automatically cancel the search. +- Improves the _Start Work_ flow and user experience — closes [#3807](https://github.com/gitkraken/vscode-gitlens/issues/3807): + - Splits the _Start Work_ button into two buttons, a _Start Work on an Issue_ button for creating a branch from an issue, and a button for creating a branch without an associated issue — closes [#3808](https://github.com/gitkraken/vscode-gitlens/issues/3808) + - Updates the command flow so that an issue is selected first, and the option to create a worktree is presented after creating the branch — closes [#3809](https://github.com/gitkraken/vscode-gitlens/issues/3809) + - Adds an integration connection button to the title bar — closes [#3832](https://github.com/gitkraken/vscode-gitlens/issues/3832) + - Adds a quickpick option to connect additional integrations when no issues are found — closes [#3833](https://github.com/gitkraken/vscode-gitlens/issues/3833) + - Rewords the placeholder text for better clarity when choosing a base for the new branch — closes [#3834](https://github.com/gitkraken/vscode-gitlens/issues/3834) + - Adds hover tooltip on issues showing their descriptions + - Improves tooltips on "Open in Remote" icon +- Refines commit/file stats formatting and improves coloring and formatting in tooltips +- Moves the _Commit Graph_ filter commits toggle into the left of the search bar +- Improves the responsiveness of the _Worktrees_ view to changes in relevant state +- Improves the HEAD indicator icon to align more with VS Code +- Updates prep-release reference — thanks to [PR [#3732](https://github.com/gitkraken/vscode-gitlens/issues/3732)](https://github.com/gitkraken/vscode-gitlens/pull/3732) by Emmanuel Ferdman ([@emmanuel-ferdman](https://github.com/emmanuel-ferdman)) + +### Fixed + +- Fixes [#3747](https://github.com/gitkraken/vscode-gitlens/issues/3747) - _Rebase Current Branch onto Branch_ incorrectly shows that the current branch is caught up to the destination +- Fixes [#3836](https://github.com/gitkraken/vscode-gitlens/issues/3836) - Back button in _Start Work_ goes to the wrong step +- Fixes [#3791](https://github.com/gitkraken/vscode-gitlens/issues/3791) - Pin/snooze in Launchpad trigger a full refresh and are no longer optimistic +- Fixes [#3886](https://github.com/gitkraken/vscode-gitlens/issues/3886) - Jira orgs/projects accumulating size in global storage +- Fixes [#3849](https://github.com/gitkraken/vscode-gitlens/issues/3849) - _Launchpad_ view state does not sync properly when connecting/disconnecting integrations +- Fixes some cases where issues are not properly restricted to open repositories in _Start Work_ +- Fixes issue bodies missing on Jira issue items in _Start Work_ +- Fixes some Jira issues missing in _Start Work_ +- Fixes Jira integration failing to fetch issues for all organizations when there is an issue with one of the organizations +- Fixes duplicate generic autolinks appearing in _Commit Details_ when the enriched version is shown +- Fixes the worktree icon in the _Commit Graph_ +- Fixes hovers in the _Commit Graph_ to correctly show branch/tag tips and additions/deletions when the _Changes_ column is enabled +- Fixes incorrect subscription label in the _Account_ section when signed out + +## [16.0.4] - 2024-11-25 + +### Changed + +- Reduces the size of the _Commit Graph_ webview bundle which reduces memory usage and improves startup time — ~29% smaller (861KB -> 1209KB) + +### Fixed + +- Fixes [#3794](https://github.com/gitkraken/vscode-gitlens/issues/3794) - Interactive rebase on the same branch is not working + +## [16.0.3] - 2024-11-22 + +### Changed + +- Improves actions and workflows on the new _Home_ view +- Improves the "Start Work" experience + +## [16.0.2] - 2024-11-18 + +### Changed + +- Changes to expand the _GitLens_ view after upgrading (one time) + +## [16.0.1] - 2024-11-15 + +### Added + +- Adds context menu command in _Commit Graph_ to reset Current Branch to a tag. + +### Changed + +- Changes the _Search & Compare_ view to be separate (detached) from the new grouped _GitLens_ view + +### Fixed + +- Fixes Home's Recent section being hidden when there are no recent items + +## [16.0.0] - 2024-11-14 + +### Added + +- Adds the ability to group GitLens views into a single _GitLens_ view in the Source Control sidebar + - Includes Commits, Branches, Remotes, Stashes, Tags, Worktrees, Contributors, Repositories, Search & Compare, and Launchpad views + - Switch views by clicking on the specific view icons in the grouped _GitLens_ view header + - Grouped views can be separated (detached) from the grouped _GitLens_ view via context menu commands from the view header + - Detached views can be regrouped by clicking the close (`x`) icon in the view header + - Adds a new `gitlens.views.scm.grouped.default` setting to specify the default view to show in the grouped _GitLens_ view on new workspaces/folders (otherwise the last selected view is remembered) + - Adds a new `gitlens.views.scm.grouped.views` setting to specify which views to show in the grouped _GitLens_ view +- Adds a completely reimagined Home view + - Active section: + - Shows your current repository, branch, and repository state + - Actions for syncing (push, pull, fetch), switching repos/branches, and viewing working directory changes + - Launchpad section: + - Shows pull requests that need your review, are blocked, or are ready to merge + - Start work action to begin a new branch or worktree, or generate one from an existing issue + - Recent section: return to previous work by showing recent branches, worktrees, and PRs with activity for your chosen timeframe +- Adds _Start Work_ command that opens a quick pick to initiate different flows for starting new work — closes [#3621](https://github.com/gitkraken/vscode-gitlens/issues/3621) + - Start from an issue from GitHub or Jira (other integrations coming soon) and create a branch and/or worktree +- Adds new ability to search for a GitHub PR in the _Launchpad_ — closes [#3543](https://github.com/gitkraken/vscode-gitlens/issues/3543), [#3684](https://github.com/gitkraken/vscode-gitlens/issues/3684) +- Adds a new _Filter Commits_ button to the Commit Graph toolbar — closes [#3686](https://github.com/gitkraken/vscode-gitlens/issues/3686) + - When toggled while searching the graph, it will be filtered to show only commits matching the search query +- Adds and expands AI support for GitLens' AI features, now out of experimental and in preview + - Refines and improves commit message generation and explaining changes, through better prompting and context + - Adds new model support from GitHub Copilot when installed — no api key needed + - Adds the latest OpenAI and Claude models + - Adds new models from xAI, GitHub Models, and HuggingFace +- Adds a new _Launchpad_ view, now out of experimental mode — closes [#3615](https://github.com/gitkraken/vscode-gitlens/issues/3615): + - Remembers the collapsed/expanded state of groups and auto-expands the _Current Branch_ group & item, if applicable + - Reflects changes better, including pinning and snoozing items + - Pinned items should now appear above non-pinned items in their respective groups +- Adds new all-new onboarding walkthrough — closes [#3656](https://github.com/gitkraken/vscode-gitlens/issues/3656) +- Adds new deep links to certain GitLens features and views — closes [#3679](https://github.com/gitkraken/vscode-gitlens/issues/3679) + - Adds support for deep links to the GitLens walkthrough — closes [#3677](https://github.com/gitkraken/vscode-gitlens/issues/3677) + - Adds support for deep links to _Launchpad_ — closes [#3678](https://github.com/gitkraken/vscode-gitlens/issues/3678) + - Adds support for deep links to the _Commit Graph_, _Worktrees_, _Inspect_, and _Cloud Patches_ — closes [#3703](https://github.com/gitkraken/vscode-gitlens/issues/3703) +- Adds _Copy Changes (Patch)_ command to the context menu of branch comparisons and their files in the _Commits_, _Branches_, and _Remotes_ views +- Adds an _Upgrade_ and _Switch to Release Version_ to the expiration notification when using the pre-release of GitLens + +### Changed + +- Changes the, no account, 3-day preview experience of GitLens Pro to be 3 non-consecutive days on the _Commit Graph_ +- Changes the GitLens Pro 7-day trial to be 14 days, and 30 days if you invite a teamate +- Improves _Launchpad_ & the _Launchpad_ view — closes [#3614](https://github.com/gitkraken/vscode-gitlens/issues/3614): + - Adds _Pin_ and _Snooze_ buttons to the header item in the action step + - Draft pull requests for which the current user's review is needed are now also shown in the "Needs Your Review" group, with a draft icon + - Renames _Switch to Branch or Worktree_ option to _Switch to Branch_, since it already includes options to create a worktree in the action flow +- Improves the open in worktree action flow — closes [#3549](https://github.com/gitkraken/vscode-gitlens/issues/3549): +- Changes to open a multi-diff editor of the changes when opening a new worktree from a PR to make reviewing easier — [#3734](https://github.com/gitkraken/vscode-gitlens/issues/3734) +- Improves the _Explain_ panel in _Inspect_ and _Graph Details_ with markdown formatting +- Changes how GitLens handles creating and deleting tags to avoid using the terminal — [#3670](https://github.com/gitkraken/vscode-gitlens/issues/3670) +- Improves quick pick workflows when no repositories are open +- Renames _GK Workspaces_ (GitKraken Workspaces) to _Cloud Workspaces_ +- Improves revealing items in the GitLens views +- Limits buffering during logging to reduce memory usage + +### Fixed + +- Fixes [#3549](https://github.com/gitkraken/vscode-gitlens/issues/3549) - Webviews can have issues with high contrast themes +- Fixes [#3133](https://github.com/gitkraken/vscode-gitlens/issues/3133) - Infinite error loop when pushing stash from GUI +- Fixes branch creation and switch quickpicks failing to close when a worktree is created during the flow +- Fixes some cases where Launchpad can fail to detect a connected integration +- Fixed issues with renamed file status on comparisons and pull requests and ensures that renamed files get returned in file status and revision content git operations +- Fixes issues with failing to delete stored state +- Fixes issues with logging on some failure cases +- Fixes issues with log scope tracking + +### Removed + +- Removes the GitLens Welcome view in favor of the new onboarding walkthrough experience + +## [15.6.3] - 2024-11-05 + +## [15.6.2] - 2024-10-17 + +### Fixed + +- Fixes [#3680](https://github.com/gitkraken/vscode-gitlens/issues/3680) - GitLens Settings page (via _GitLens: Open Settings_) has double-encoded Html entities +- Fixes popover menu background colors on the Commit Graph +- Fixes [#3646](https://github.com/gitkraken/vscode-gitlens/issues/3646) - Interactive Rebase interface partially unreadable in high contrast dark color theme + +## [15.6.1] - 2024-10-14 + +### Fixed + +- Fixes [#3650](https://github.com/gitkraken/vscode-gitlens/issues/3650) - "Create & Switch to Local Branch" from remote branch no longer prefills local branch name to match remote branch name +- Fixes [#3651](https://github.com/gitkraken/vscode-gitlens/issues/3651) - "Open on Remote (Web)" does not use tracked branch name +- Fixes [#3657](https://github.com/gitkraken/vscode-gitlens/issues/3657) - Creating a worktree from within a worktree chooses the wrong path +- Fixes [#3090](https://github.com/gitkraken/vscode-gitlens/issues/3090) - Manually created empty bare clone repositories in a trusted directory crash worktree view since LocalGitProvider.findRepositoryUri returns just ".git" — thanks to [PR [#3092](https://github.com/gitkraken/vscode-gitlens/issues/3092)](https://github.com/gitkraken/vscode-gitlens/pull/3092) by Dawn Hwang ([@hwangh95](https://github.com/hwangh95)) +- Fixes [#3667](https://github.com/gitkraken/vscode-gitlens/issues/3667) - Makes Launchpad search by repo name +- Fixes failure to prompt to delete the branch after deleting a worktree when a modal was shown (e.g. when prompting for force) +- Fixes issues when git fails to delete the worktree folder on Windows + +## [15.6.0] - 2024-10-07 + +### Added + +- Adds [Cursor](https://cursor.so) support — closes [#3222](https://github.com/gitkraken/vscode-gitlens/issues/3222) +- Adds monospace formatting in commit messages — closes [#2350](https://github.com/gitkraken/vscode-gitlens/issues/2350) +- Adds a new `${authorFirst}` and `${authorLast}` commit formatting tokens that can be used in inline blame, commit hovers, etc — closes [#2980](https://github.com/gitkraken/vscode-gitlens/issues/2980) +- Adds a new _Create New Branch_ button to the _Commit Graph_ toolbar — closes [#3553](https://github.com/gitkraken/vscode-gitlens/issues/3553) +- Adds new ability to force push from the _Commit Graph_ toolbar — closes [#3493](https://github.com/gitkraken/vscode-gitlens/issues/3493) +- Adds a new `gitlens.launchpad.includedOrganizations` setting to specify which organizations to include in _Launchpad_ — closes [#3550](https://github.com/gitkraken/vscode-gitlens/issues/3550) +- Adds repository owner/name and code suggest to hovers on the experimental Launchpad view + +### Changed + +- Integrates the _GitKraken Account_ view into the bottom of the _Home_ view as a collapsible section — closes [#3536](https://github.com/gitkraken/vscode-gitlens/issues/3536) +- Changes the new _Commit Graph_ sidebar to be enabled by default; use the `gitlens.graph.sidebar.enabled` settings to disable it +- Changes how GitLens handles creating and renaming branches to avoid using the terminal — refs [#3528](https://github.com/gitkraken/vscode-gitlens/issues/3528) +- Changes patch generation (e.g. cloud patches, code suggest, _Copy as Patch_, _Copy WorkingChanges to Worktree..._, etc) to automatically include untracked files +- Improves _Switch_, _Open in Worktree_, and deeplink and Launchpad workflows + - Reduces prompts for locating repositories which the user has previously opened — closes [#3555](https://github.com/gitkraken/vscode-gitlens/issues/3555) + - Improves automatic detection of matching repositories for pull requests — closes [#3627](https://github.com/gitkraken/vscode-gitlens/issues/3627) + - Automatically fetches the repository when needed rather than prompting the user +- Improves the integration connection indicator and connection button on the _Commit Graph_ — closes [#3538](https://github.com/gitkraken/vscode-gitlens/issues/3538) + +### Fixed + +- Fixes [#3548](https://github.com/gitkraken/vscode-gitlens/issues/3548) - Change the current branch icon on the Commit Graph to a worktree icon if its on a worktree +- Fixes [#3592](https://github.com/gitkraken/vscode-gitlens/issues/3592) - Connecting to an integration via Remotes view (but likely others) doesn't work +- Fixes [#3571](https://github.com/gitkraken/vscode-gitlens/issues/3571) - Gitlens fails to register buttons on top-right corner — thanks to [PR [#3605](https://github.com/gitkraken/vscode-gitlens/issues/3605)](https://github.com/gitkraken/vscode-gitlens/pull/3605) by Jean Pierre ([@jeanp413](https://github.com/jeanp413)) +- Fixes [#3617](https://github.com/gitkraken/vscode-gitlens/issues/3617) - Auto-links not working for alphanumberic issue numbers +- Fixes [#3573](https://github.com/gitkraken/vscode-gitlens/issues/3573) - 'Create Branch in Worktree' option in 'Create Branch' shows a repo picker if you have multiple repos open +- Fixes [#3612](https://github.com/gitkraken/vscode-gitlens/issues/3612) - Prevents cloud integration sync process from opening gkdev connect page/flow +- Fixes [#3519](https://github.com/gitkraken/vscode-gitlens/issues/3519) - Add fallback/cutoff to our backend calls similar to how we handle GitHub queries +- Fixes [#3608](https://github.com/gitkraken/vscode-gitlens/issues/3608) - Integration connection page opening on every launch of VS Code and on profile change +- Fixes [#3618](https://github.com/gitkraken/vscode-gitlens/issues/3618) -Reauthentication not working for cloud integrations +- Fixes an issue where virtual repositories for GitHub PRs from forks wouldn't load properly +- Fixes an issue where deleting a worktree would not always remove the worktree from the view +- Fixes actions not working on Launchpad items with special characters in their branch name +- Fixes _Open in Worktree_ command sometimes showing an unnecessary worktree confirmation step +- Fixes some instances where the progress notification lingers after canceling when connecting an integration + +### Engineering + +- Adds end-to-end testing infrastructure using [Playwright](https://playwright.dev) +- Adds vscode-test to run unit-tests — closes [#3570](https://github.com/gitkraken/vscode-gitlens/issues/3570) + +## [15.5.1] - 2024-09-16 + +### Fixed + +- Fixes [#3582](https://github.com/gitkraken/vscode-gitlens/issues/3582) - "Delete Branch" option is sometimes unexpectedly missing + +## [15.5.0] - 2024-09-12 + +### Added + +- Adds a `gitlens.views.showCurrentBranchOnTop` setting to specify whether the current branch is shown at the top of the views — closes [#3520](https://github.com/gitkraken/vscode-gitlens/issues/3520) +- Adds a sidebar to the _Commit Graph_ + - Shows counts of branches, remotes, stashes, tags, and worktrees + - Clicking an item reveals its corresponding view + - Try out this new feature by setting `gitlens.graph.sidebar.enabled` to `true` + +### Changed + +- Preview access of Launchpad is ending on September 27th +- Simplifies the _Create Worktree_ command flow by prompting to create a new branch only when necessary — closes [#3542](https://github.com/gitkraken/vscode-gitlens/issues/3542) +- Removes the use of VS Code Authentication API for GitKraken accounts + +### Fixed + +- Fixes [#3514](https://github.com/gitkraken/vscode-gitlens/issues/3514) - Attempting to delete the main worktree's branch causes a invalid prompt to delete the main worktree +- Fixes [#3518](https://github.com/gitkraken/vscode-gitlens/issues/3518) - Branches in worktrees are no longer collapsed into folder groupings + +### Removed + +- Removes (disables) legacy "focus" editor + +## [15.4.0] - 2024-09-04 + +### Added + +- Adds better support for branches in worktrees + - Changes the branch icon to a "repo" icon when the branch is in a worktree in views, quick pick menus, and the _Commit Graph_ + - Adds an _Open in Worktree_ inline and context menu command and an _Open in Worktree in New Window_ context menu command to branches and pull requests in views and on the _Commit Graph_ + - Removes the _Switch to Branch..._ inline and context menu command from branches in views and on the _Commit Graph_ when the branch is in a worktree +- Adds ability to only search stashes when using `type:stash` (or `is:stash`) in commit search via the _Commit Graph_, _Search & Compare_ view, or the _Search Commits_ command +- Adds `...` inline command for stashes on the _GitLens Inspect_ view +- Adds an "up-to-date" indicator dot to the branch icon of branches in views +- Adds an "alt" _Pull_ command for the inline _Fetch_ command on branches in views +- Adds an "alt" _Fetch_ command for the inline _Pull_ command on branches in views +- Adds _Open Comparison on Remote_ command to branch comparisons in views +- Adds new options to the _Git Delete Worktree_ command to also delete the associated branch along with the worktree + +### Changed + +- Improves the branch comparisons in views to automatically select the base or target branch +- Improves tooltips on branches, remotes, and worktrees in views +- _Upgrade to Pro_ flows now support redirects back to GitLens + +### Fixed + +- Fixes [#3479](https://github.com/gitkraken/vscode-gitlens/issues/3479) - Tooltip flickering +- Fixes [#3472](https://github.com/gitkraken/vscode-gitlens/issues/3472) - "Compare working tree with.." often flashes open then closes the menu +- Fixes [#3448](https://github.com/gitkraken/vscode-gitlens/issues/3448) - "Select for Compare" on a Commit/Stash/etc causes the Search and Compare view to be forcibly shown +- Fixes the _Git Delete Branch_ command when deleting a branch that is open on a worktree by adding a step to delete the branch's worktree first +- Fixes an issue where pull requests in views could show the wrong comparison with the working tree when using worktrees +- Fixes _Copy Remote Comparison URL_ command to not open the URL, just copy it +- Fixes cloud integrations remaining disconnected after disconnecting and reconnecting to a GitKraken account +- Fixes "switch" deep links sometimes failing to complete in cases where the switch occurs in the current window + +### Removed + +- Removes status (ahead, behind, etc) decoration icons from branches in views + +## [15.3.1] - 2024-08-21 + +### Added + +- Adds DevEx Days promotion + +### Changed + +- Improves upgrade/purchase flow + +## [15.3.0] - 2024-08-15 + +### Added + +- Adds improvements and enhancements to _Launchpad_ to make it easier to manage and review pull requests + - Adds GitLab (cloud-only for now) support to show and manage merge requests in _Launchpad_ + - Adds a new _Connect Additional Integrations_ button to the _Launchpad_ titlebar to allow connecting additional integrations (GitHub and GitLab currently) + - Adds an new experimental _Launchpad_ view to provide a persistent view of the _Launchpad_ in the sidebar + - To try it out, run the _Show Launchpad View_ command or set the `gitlens.views.launchpad.enabled` setting to `true` — let us know what you think! + - While its functionality is currently limited, pull requests can be expanded to show changes, commits, and code suggestions, as well as actions to open changes in the multi-diff editor, open a comparison, and more +- Adds new features and improvements to the _Commit Graph_ + - Branch visibility options, formerly in the _Graph Filtering_ dropdown, are now moved to the new _Branches Visibility_ dropdown in the _Commit Graph_ header bar + - Adds a new _Smart Branches_ visibility option to shows only relevant branches — the current branch, its upstream, and its base or target branch, to help you better focus + - Improves interactions with hovers on rows — they should do a better job of staying out of your way + - Adds pull request information to branches with missing upstreams +- Adds support for GitHub and GitLab cloud integrations — automatically synced with your GitKraken account + - Adds an improved, streamlined experience for connecting cloud integrations to GitLens + - Manage your connected integration via the the _Manage Integrations_ command or the _Integrations_ button on the _GitKraken Account_ view +- Adds comparison support to virtual (GitHub) repositories + +### Changed + +- Improves the _Compare to/from HEAD_ command (previously _Compare with HEAD_) to compare commits, stashes, and tags with the HEAD commit where directionality is determined by topology and time +- Improves the messaging of the merge and rebase commands +- Renames _Compare with Working Tree_ command to _Compare Working Tree to Here_ +- Renames _Compare Common Base with Working Tree_ command to _Compare Working Tree to Common Base_ +- Renames _Open Worktree in New Window_ Launchpad command to _Open in Worktree_ +- Renames _Open Directory Compare_ command to _Open Directory Comparison_ +- Renames _Open Directory Compare with Working Tree_ command to _Directory Compare Working Tree to Here_ +- Improves some messaging on _Switch_ and _Checkout_ commands + +### Fixed + +- Fixes [#3445](https://github.com/gitkraken/vscode-gitlens/issues/3445) - Cannot merge branch into detached HEAD +- Fixes [#3443](https://github.com/gitkraken/vscode-gitlens/issues/3443) - Don't show gitlens context menu items in Copilot Chat codeblock editors +- Fixes [#3457](https://github.com/gitkraken/vscode-gitlens/issues/3457) - Enriched autolink duplication in graph hover (and possibly other places) +- Fixes [#3473](https://github.com/gitkraken/vscode-gitlens/issues/3473) - Plus features can't be restored after they are hidden +- Fixes column resizing being stuck when the mouse leaves the _Commit Graph_ +- Fixes issues with incorrect commit count when using the merge and rebase commands +- Fixes issues where a merge or rebase operation says there or no changes when there are changes +- Fixes an error with queries that can cause Jira Cloud and other cloud integrations to stop working +- Fixes issues with some directory comparison commands + +## [15.2.3] - 2024-07-26 + +### Fixed + +- Fixes (for real) [#3423](https://github.com/gitkraken/vscode-gitlens/issues/3423) - Blame annotations & revision navigation are missing in 15.2.1 when using remote (WSL, SSH, etc) repositories + +## [15.2.2] - 2024-07-26 + +### Fixed + +- Fixes [#3423](https://github.com/gitkraken/vscode-gitlens/issues/3423) - Blame annotations & revision navigation are missing in 15.2.1 when using remote (WSL, SSH, etc) repositories +- Fixes [#3422](https://github.com/gitkraken/vscode-gitlens/issues/3422) - Extra logging +- Fixes [#3406](https://github.com/gitkraken/vscode-gitlens/issues/3406) - Worktrees typo in package.json — thanks to [PR [#3407](https://github.com/gitkraken/vscode-gitlens/issues/3407)](https://github.com/gitkraken/vscode-gitlens/pull/3407) by Matthew Yu ([@matthewyu01](https://github.com/matthewyu01)) +- Fixes cloud patch creation error on azure repos +- Fixes [#3385](https://github.com/gitkraken/vscode-gitlens/issues/3385) - Provides commit from stash on create patch from stash action +- Fixes [#3414](https://github.com/gitkraken/vscode-gitlens/issues/3414) - Patch creation may be done multiple times + +## [15.2.1] - 2024-07-24 + +### Added + +- Adds support for OpenAI's GPT-4o Mini model for GitLens' experimental AI features +- Adds a _Jump to HEAD_ button on the _Commit Graph_ header bar (next to the current branch) to quickly jump to the HEAD commit + - Adds a _Jump to Reference_ as an `alt` modifier to the _Jump to HEAD_ button to jump to the selected branch or tag +- Adds support deep link documentation — closes [#3399](https://github.com/gitkraken/vscode-gitlens/issues/3399) +- Adds a pin status icon to Launchpad items when pinned + +### Changed + +- Changes the "What's new" icon on _Home_ to not conflict with _Launchpad_ +- Improves working with worktrees by avoiding showing the root repo in worktrees during certain operations (e.g. rebase) and vice-versa +- Changes how we track open documents to improve performance, reduce UI jumping, and support VS Code's new ability to [show editor commands for all visible editors](https://code.visualstudio.com/updates/v1_90#_always-show-editor-actions) — closes[#3284](https://github.com/gitkraken/vscode-gitlens/issues/3284) +- Changes GitLab & GitLab self-managed access tokens to now require `api` scope instead of `read_api` to be able to merge Pull Requests +- Renames _Open Worktree in New Window_ option to _Open in Worktree_ in _Launchpad_ + +### Fixed + +- Fixes [#3386](https://github.com/gitkraken/vscode-gitlens/issues/3386) - Clicking anywhere on "Get started" should expand the section — thanks to [PR [#3402](https://github.com/gitkraken/vscode-gitlens/issues/3402)](https://github.com/gitkraken/vscode-gitlens/pull/3402) by Nikolay ([@nzaytsev](https://github.com/nzaytsev)) +- Fixes [#3410](https://github.com/gitkraken/vscode-gitlens/issues/3410) - Adds stash commit message to commit graph row +- Fixes [#3397](https://github.com/gitkraken/vscode-gitlens/issues/3397) - Suppress auth error notifications for github triggered by Launchpad +- Fixes [#3367](https://github.com/gitkraken/vscode-gitlens/issues/3367) - Continually asked to reauthenticate +- Fixes [#3389](https://github.com/gitkraken/vscode-gitlens/issues/3389) - Unable to pull branch 'xxx' from origin +- Fixes [#3394](https://github.com/gitkraken/vscode-gitlens/issues/3394) - Pull request markers, when set in commit graph minimap or scroll, show as unsupported in settings JSON + +## [15.2.0] - 2024-07-10 + +### Added + +- Adds a _Generate Title & Description_ button to the title input in _Create Cloud Patch_ and in _Changes to Suggest_ of the _Inspect Overview_ tab +- Adds support for Anthropic's Claude 3.5 Sonnet model for GitLens' experimental AI features +- Adds a new `counts` option to the `gitlens.launchpad.indicator.label` setting to show the status counts of items which need your attention in the _Launchpad_ status bar indicator +- Adds _Search for Commits within Selection_ command to the editor context menu when there is a selection +- Adds a `gitlens.launchpad.ignoredOrganizations` setting to specify an array of organizations (or users) to ignore in the _Launchpad_ +- Improves the tooltips of stashes in GitLens views + - Adds a `gitlens.views.formats.stashes.tooltip` setting to specify the tooltip format of the stashes in GitLens views +- Improves the display of branch and tag tips in the _File History_ and _Line History_ and in commit tooltips in GitLens views + - Adds provider-specific icons to tips of remote branches +- Adds Commit Graph improvements: + - Adds pull request markers to the graph scroll and minimap + - Adds rich hovers on commit rows which include detailed commit information and links to pull requests, issues, and inspect +- Adds Launchpad improvements: + - Truncates long titles for Pull Requests so that the repository label is always visible + - Adds _Open on GitHub_ button to other relevant rows in the action step + - Adds a new _Open Worktree in New Window_ action and button to Launchpad items to more easily view the item in a worktree + +### Changed + +- Renames `Reset Stored AI Key` command to `Reset Stored AI Keys...` and adds confirmation prompt with options to reset only the current or all AI keys +- Renames _Open Inspect_ to _Inspect Commit Details_ +- Renames _Open Line Inspect_ to _Inspect Line Commit Details_ +- Renames _Open Details_ to _Inspect Commit Details_ +- Replaces _Open in Editor_ link in the Launchpad with a link to _gitkraken.dev_ +- The _Manage Account_ button in the GitKraken Account view and the _GitLens: Manage Your Account_ command now use the account management page at _gitkraken.dev_ +- Fixes some cases where worktree state can be out-of-date after creation/deletion of a worktree + +### Fixed + +- Fixes [#3344](https://github.com/gitkraken/vscode-gitlens/issues/3344) - Make changing the AI key easier +- Fixes [#3377](https://github.com/gitkraken/vscode-gitlens/issues/3377) - Cannot read properties of undefined (reading 'start') +- Fixes [#3377](https://github.com/gitkraken/vscode-gitlens/issues/3378) - Deleting a worktree (without force) with working changes causes double prompts +- Fixes Open SCM command for the Commmit Graph showing in the command palette - Thanks to [PR [#3376](https://github.com/gitkraken/vscode-gitlens/issues/3376)](https://github.com/gitkraken/vscode-gitlens/pull/3376) by Nikolay ([@nzaytsev](https://github.com/nzaytsev)) +- Fixes fixes issue with Jira integration not refreshing +- Fixes the _Learn More_ link not working in the account verification dialog +- Upgrading to Pro, managing a GitKraken account, and managing or connecting cloud integrations now no longer require the user to log in again in their respective pages on _gitkraken.dev_ +- Fixes deep links failing to cancel in the remote add stage + +## [15.1.0] - 2024-06-05 + +### Added + +- Adds support for GitHub Copilot and other VS Code extension-provided AI models for GitLens' experimental AI features + - Adds a `gitlens.ai.experimental.model` setting to specify the AI model to use + - Adds a `gitlens.ai.experimental.vscode.model` setting to specify the VS Code extension-provided AI model to use when `gitlens.ai.experimental.model` is set to `vscode` +- Adds new Launchpad improvements: + - Collapsed state of Launchpad groups are now saved between uses + - The _Draft_ and _Pinned_ categories in the Launchpad now always sort their items by date + - The Launchpad and Launchpad status bar indicator now indicate when there is an error loading data + - The Launchpad indicator now shows the Launchpad icon next to the loading spinner when the Launchpad is loading + +### Changed + +- Changes the settings used to configure the AI models for GitLens' experimental AI features + - Adds a `gitlens.ai.experimental.model` setting to specify the AI model to use + - Removes the `gitlens.ai.experimental.provider`, `gitlens.ai.experimental.openai.model`, `gitlens.ai.experimental.anthropic.model`, and `gitlens.ai.experimental.gemini.model` settings in favor of the above + +### Fixed + +- Fixes [#3295](https://github.com/gitkraken/vscode-gitlens/issues/3295) - Incorrect pluralization in Authors lens — thanks to [PR [#3296](https://github.com/gitkraken/vscode-gitlens/issues/3296)](https://github.com/gitkraken/vscode-gitlens/pull/3296) by bm-w ([@bm-w](https://github.com/bm-w)) +- Fixes [#3277](https://github.com/gitkraken/vscode-gitlens/issues/3277) - Unable to pull branch when the local branch whose name differs from its tracking branch + +## [15.0.4] - 2024-05-20 + +### Added + +- Adds a _Copy as Markdown_ context menu command to autolinks in the _Autolinked Issues and Pull Requests_ section in the _Search & Compare_ view +- Adds a _Connect Remote Integration_ command to the _Autolinked Issues and Pull Requests_ section in the _Search & Compare_ view +- Adds `gitlens.currentLine.fontFamily`, `gitlens.currentLine.fontSize`, `gitlens.currentLine.fontStyle`, `gitlens.currentLine.fontWeight` settings to specify the font (family, size, style, and weight respectively) of the _Inline Blame_ annotation — closes [#3306](https://github.com/gitkraken/vscode-gitlens/issues/3306) +- Adds `gitlens.blame.fontStyle` settings to specify the font style of the _File Blame_ annotations + +### Changed + +- Improves the _Copy_ context menu command on autolinks in the _Autolinked Issues and Pull Requests_ section in the _Search & Compare_ view +- Changes the _Open Issue on Remote_ context menu command on autolinks to _Open URL_ in the _Autolinked Issues and Pull Requests_ section in the _Search & Compare_ view +- Changes the _Copy Issue URL_ context menu command on autolinks to _Copy URL_ in the _Autolinked Issues and Pull Requests_ section in the _Search & Compare_ view +- Renames the _Connect to Remote_ command to _Connect Remote Integration_ +- Renames the _Disconnect from Remote_ command to _Disconnect Remote Integration_ + +### Fixed + +- Fixes [#3299](https://github.com/gitkraken/vscode-gitlens/issues/3299) - Branches view no longer displays text colors for branch status after updating to v15.0.0 or above +- Fixes [#3277](https://github.com/gitkraken/vscode-gitlens/issues/3277) (in pre-release only) - Unable to pull branch when the local branch whose name differs from its tracking branch +- Fixes "hang" in Worktrees view when a worktree is missing +- Fixes an issue where the Commit Graph header bar sometimes pushes "Fetch" to the right +- Fixes an issue where the autolink type (issue vs pull request) was not shown properly in the _Autolinked Issues and Pull Requests_ section in the _Search & Compare_ view + +## [15.0.3] - 2024-05-14 + +### Fixed + +- Fixes [#3288](https://github.com/gitkraken/vscode-gitlens/issues/3288) - Branch, Tags, Stashes, Local Branch, and Remote Branch "Markers" Are Missing/Removed From Minimap + +## [15.0.2] - 2024-05-14 + +### Fixed + +- Fixes [#3270](https://github.com/gitkraken/vscode-gitlens/issues/3270) - GitLens erroneously thinks certain branches are worktrees under some conditions + +## [15.0.1] - 2024-05-14 + +## [15.0.0] - 2024-05-14 + +### Added + +- Adds [Launchpad](https://gitkraken.com/solutions/launchpad?utm_source=gitlens-extension&utm_medium=in-app-links) `preview`, a new Pro feature bringing your GitHub pull requests into a unified, categorized list to keep you focused and your team unblocked + - Open using the new _GitLens: Open Launchpad_ command + - Categorizes pull requests by status + - _Current Branch_: Pull requests associated with your current branch + - _Ready to Merge_: Pull requests without conflicts, ci failures, change suggestions or other issues preventing merge + - _Blocked_: Pull requests with conflicts, CI failures, or that have no reviewers assigned + - _Needs Your Review_: Pull requests waiting for your review + - _Requires Follow-Up_: Pull requests that have been reviewed and need follow-up + - _Draft_: Draft pull requests + - _Pinned_: Pull requests you have pinned + - _Snoozed_: Pull requests you have snoozed + - _Other_: Other pull requests + - Action on a pull request directly from the Launchpad: + - Merge a pull request + - Open a pull request on GitHub + - Switch to or create a branch or worktree for a pull request to review changes + - Display a pull request's details in the _Overview_ + - Open a pull request's changes in the multi-diff editor + - View a pull request's branch in the _Commit Graph_ + - View or create code suggestions for a pull request + - Pin or snooze a pull request in the Launchpad + - Adds a status bar indicator of the _Launchpad_ + - Opens the Launchpad when clicked + - Shows the top pull request and its status in the status bar + - Also highlights your top pull request in the launchpad when opened from the indicator + - Provides a summary of your most critical pull requests on hover + - Each summary line includes a link to open the Launchpad to that category + - Adds new settings for the Launchpad and indicator + - `gitlens.launchpad.ignoredRepositories`: Array of repositories with `owner/name` format to ignore in the Launchpad + - `gitlens.launchpad.staleThreshold`: Value in days after which a pull request is considered stale and moved to the _Other_ category + - `gitlens.launchpad.indicator.enabled`: Specifies whether to show the Launchpad indicator in the status bar + - `gitlens.launchpad.indicator.icon`: Specifies the style of the Launchpad indicator icon + - `gitlens.launchpad.indicator.label`: Specifies the style of the Launchpad indicator label + - `gitlens.launchpad.indicator.groups`: Specifies which critical categories of pull requests to summarize in the indicator tooltip + - `gitlens.launchpad.indicator.useColors`: Specifies whether to use colors in the indicator + - `gitlens.launchpad.indicator.openInEditor`: Specifies whether to open the Launchpad in the editor when clicked + - `gitlens.launchpad.indicator.polling.enabled`: Specifies whether to regularly check for changes to pull requests + - `gitlens.launchpad.indicator.polling.interval`: Specifies the interval in minutes to check for changes to pull requests +- Adds new features that make code reviews easier + - Adds [Code Suggest](https://gitkraken.com/solutions/code-suggest?utm_source=gitlens-extension&utm_medium=in-app-links) `preview`, a cloud feature, that frees your code reviews from unnecessary restrictions + - Create a Code Suggestion from the _Inspect: Overview_ tab when on a PR's branch + - Upon creation of a Code Suggestion, a comment will appear on the pull request + - Code Suggestions can be viewed and apply directly from [gitkraken.dev](https://gitkraken.dev), or open in GitKraken Desktop or GitLens. + - See a PR's Code Suggestions from anywhere we currently display PR information in our views (Commits, Branches, Remotes) + - You can additionally start Code Suggestions from the Launchpad + - Adds a _Pull Request_ view to view PR commits and review file changes + - Adds a _Pull Request_ badge to the Graph and the Inspect Overview +- Adds rich Jira Cloud integration + - Enables rich automatic Jira autolinks in commit messages everywhere autolinks are supported in GitLens + - Adds a _Cloud Integrations_ button to the GitKraken Account view and a new `GitLens: Manage Cloud Integrations` command to manage connected cloud integrations + - Adds a _Manage Jira_ button to _Inspect_ and a link in Autolink settings to connect to Jira +- Adds support for Google Gemini for GitLens' experimental AI features + - Adds a `gitlens.ai.experimental.gemini.model` setting to specify the Gemini model +- Adds support for the latest OpenAI and Anthropic models for GitLens' experimental AI features +- Adds a new `gitlens.views.collapseWorktreesWhenPossible` setting to specify whether to try to collapse the opened worktrees into a single (common) repository in the views when possible + +### Changed + +- Reworks _Commit Details_, now called the _Inspect_ view + - Revamps the _Working Changes_ tab into the _Overview_ tab + - Provides richer branch status information and branch switching + - Adds Push, Pull, and Fetch actions + - Richer Pull Request Information + - Open details in the Pull Request view + - Links to open and compare changes + - List of the PR's Code Suggestions + - Create a Code Suggestion by clicking the _Suggest Changes for PR_ button +- Improves contributor and team member picking for the adding co-authors, _Code Suggest_, and _Cloud Patches_ +- Improves performance when creating colors derived from the VS Code theme +- Changes the command to open the Launchpad in the editor (formerly _Focus View_) from _GitLens: Show Focus_ to _GitLens: Open Launchpad in Editor_ +- Renames the setting `gitlens.focus.allowMultiple` to `gitlens.launchpad.allowMultiple` +- Updates most deep link prompts to quick picks or quick inputs, moves most prompts to before a repository is opened. +- Updates Pro upgrade links to use the newer gitkraken.dev site + +### Fixed + +- Fixes [#3221](https://github.com/gitkraken/vscode-gitlens/issues/3221) - Cannot use word "detached" in branch names +- Fixes [#3197](https://github.com/gitkraken/vscode-gitlens/issues/3197) - Only emojify standalone emojis — thanks to [PR [#3208](https://github.com/gitkraken/vscode-gitlens/issues/3208)](https://github.com/gitkraken/vscode-gitlens/pull/3208) by may ([@m4rch3n1ng](https://github.com/m4rch3n1ng)) +- Fixes [#3180](https://github.com/gitkraken/vscode-gitlens/issues/3180) - Focus View feedback button is not working +- Fixes [#3179](https://github.com/gitkraken/vscode-gitlens/issues/3179) - The checkmarks in cherry pick are not displayed +- Fixes [#3249](https://github.com/gitkraken/vscode-gitlens/issues/3249) - Error "Cannot read properties of null (reading 'map') +- Fixes [#3198](https://github.com/gitkraken/vscode-gitlens/issues/3198) - Repository location in cloud workspace doesn't work when the repo descriptor does not contain a url +- Fixes [#3143](https://github.com/gitkraken/vscode-gitlens/issues/3143) - File Annotation icon isn't themed according to the icons... + +## [14.9.0] - 2024-03-06 + +### Added + +- Adds support for Anthropic's Claude 3 Opus & Sonnet models for GitLens' experimental AI features +- Adds a _Compare with Common Base_ command to branches in the _Commit Graph_ and views to review the changes if the selected branch were to be merged by comparing the common ancestor (merge base) with the current branch to the selected branch +- Adds an _Open All Changes with Common Base_ command to branches in the _Commit Graph_ and views to review the changes if the selected branch were to be merged in the multi-diff editor +- Adds a _Stash All Changes_ command to Source Control repository toolbar (off by default) +- Adds the repository name as a prefix to worktree name when adding to the current workspace +- Adds a better message when stashing only untracked files without including untracked files +- Adds a new group of _Cloud Patches_ titled as “Suggested Changes” that includes suggestions coming from pull requests. + +### Changed + +- Re-adds _Add to Workspace_ option when creating a worktree — closes [#3160](https://github.com/gitkraken/vscode-gitlens/issues/3160) +- Changes _Commit Graph_ date style to default to the default date style — refs [#3153](https://github.com/gitkraken/vscode-gitlens/issues/3153) +- Renames the _Compare Ancestry with Working Tree_ command on branches to _Compare Common Base with Working Tree_ for better clarity +- Improves _File Blame_ annotations performance and layout accuracy with certain character sets +- Improves string formatting performance + +### Fixed + +- Fixes [#3146](https://github.com/gitkraken/vscode-gitlens/issues/3146) - Search & Compare fails to remember items after restart +- Fixes [#3152](https://github.com/gitkraken/vscode-gitlens/issues/3152) - Fixes double encoding of redirect URLs during account sign-in which affects certain environments +- Fixes [#3153](https://github.com/gitkraken/vscode-gitlens/issues/3153) - `gitlens.defaultDateStyle` not working in Commit Details view +- Fixes the _Open Pull Request Changes_ & _Compare Pull Request_ commands to scope the changes only to the pull request +- Fixes broken _Compare Common Base with Working Tree_ (previously _Compare Ancestry with Working Tree_) +- Fixes issue when switching to a worktree via branch switch when there are multiple repos in the workspace + +## [14.8.2] - 2024-02-16 + +### Fixed + +- Fixes incorrect organization self-hosting message when creating a Cloud Patch + +## [14.8.1] - 2024-02-15 + +### Added + +- Adds a _Create New Branch..._ option to the _Git Switch to..._ command to easily create a new branch to switch to — closes [#3138](https://github.com/gitkraken/vscode-gitlens/issues/3138) +- Adds the ability to start a new trial from the _Account View_ and feature gates for users without a Pro account whose Pro trial has been expired for over 90 days. + +### Fixed + +- Fixes AI features not being displayed when signed-out of an account + +## [14.8.0] - 2024-02-08 + +### Added + +- Adds support for Cloud Patches hosted on your own dedicated storage for the highest level of security (requires an Enterprise plan) +- Improves worktree usage, discoverability, and accessibility + - Simplifies the create worktree and open worktree flows — reduces number of steps and options presented + - Adds _Create Branch in New Worktree_ confirmation option when creating branches, e.g. via the _GitLens: Git Create Branch..._ command + - Adds _Create Worktree for Branch_, _Create Worktree for Local Branch_, and _Create Worktree for New Local Branch_ confirmation options when switching branches, e.g. via the _GitLens: Git Switch to..._ command + - Adds a _Copy Working Changes to Worktree..._ command to the _Commit Graph_ and command palette to copy the current working changes to an existing worktree + - Avoids prompt to add a (required) remote and instead auto-adds the remote during worktree creation from a pull request +- Adds ability to open multiple changes in VS Code's new multi-diff editor, previously experimental and now enabled by default + - Adds an inline _Open All Changes_ command to commits, stashes, and comparisons in the views + - Changes _Open All Changes_ & _Open All Changes with Working Tree_ commands to use the new multi-diff editor when enabled + - Adds _Open All Changes, Individually_ & _Open All Changes with Working Tree, Individually_ commands to provide access to the previous behavior + - Renames the `gitlens.experimental.openChangesInMultiDiffEditor` setting to `gitlens.views.openChangesInMultiDiffEditor`, which is enabled by default, to specify whether to open changes in the multi-diff editor (single tab) or in individual diff editors (multiple tabs) + - Requires VS Code `1.86` or later, or VS Code `1.85` with `multiDiffEditor.experimental.enabled` enabled +- Adds new comparison features to pull requests in GitLens views + - Adds an _Open Pull Request Changes_ context menu command on pull requests in the _Commit Graph_ and other GitLens views to view pull request changes in a multi-diff editor (single tab) + - Requires VS Code `1.86` or later, or VS Code `1.85` with `multiDiffEditor.experimental.enabled` enabled + - Adds a _Compare Pull Request_ context menu command on pull requests in the _Commit Graph_ and other GitLens views to open a comparison between the head and base of the pull request for easy reviewing +- Adds an _Open in Commit Graph_ context menu command on pull requests in GitLens view to open the tip commit in the _Commit Graph_ +- Adds ability to copy changes, commits, stashes, and comparison as a patch to the clipboard + - Adds a _Copy as Patch_ context menu command on files, commits, stashes, and comparisons in GitLens views + - Adds a _Copy as Patch_ context menu command on files in the _Changes_ and _Staged Changes_ groups as well as the groups themselves in the _Source Control_ view + - Adds a _Apply Copied Patch_ command in the command palette to apply a patch from the clipboard +- Adds an _Open All Changes_ inline button to branch status (upstream) and branch status files in GitLens views +- Adds an _Open Changes_ submenu to branch status (upstream) and branch status files in GitLens views +- Adds ability to preserve inline and file annotations while editing, previously experimental and now enabled by default + - Renames the `gitlens.experimental.allowAnnotationsWhenDirty` setting to `gitlens.fileAnnotations.preserveWhileEditing`, which is enabled by default, to specify whether file annotations will be preserved while editing — closes [#1988](https://github.com/gitkraken/vscode-gitlens/issues/1988), [#3016](https://github.com/gitkraken/vscode-gitlens/issues/3016) + - Use the existing `gitlens.advanced.blame.delayAfterEdit` setting to control how long to wait (defaults to 5s) before the annotation will update while the file is still dirty, which only applies if the file is under the `gitlens.advanced.sizeThresholdAfterEdit` setting threshold (defaults to 5000 lines) +- Adds an _Open File Annotation Settings_ command to the _File Annotations_ submenu in the editor toolbar to open the GitLens Settings editor to the file annotations sections +- Adds `gitlens.blame.fontFamily`, `gitlens.blame.fontSize`, `gitlens.blame.fontWeight` settings to specify the font (family, size, and weight respectively) of the _File Blame_ annotations — closes [#3134](https://github.com/gitkraken/vscode-gitlens/issues/3134) +- Adds _Copy Link to Code_, _Copy Link to File_, and _Copy Link to File at Revision..._ commands to the _Share_ submenu in the editor line number (gutter) context menu +- Adds an alternate flow (pick another file) when using the _Open File at Revision..._ and _Open Changes with Revision..._ commands to open a file that has been renamed and the rename is currently unstaged — closes [#3109](https://github.com/gitkraken/vscode-gitlens/issues/3109) +- Adds access to most _Git Command Palette_ commands directly to the command palette +- Adds _Rename Stash..._ options to stash quick pick menus +- Adds support for the latest GPT-4 Turbo models + +### Changed + +- Changes adds avatars to commits in quick pick menus +- Changes the pull request to be first item in the _Commits_ view, when applicable +- Changes the branch comparison to be below the branch status in the _Commits_ view to keep top focus on the status over the comparison +- Renames "Open Worktree for Pull Request via GitLens..." to "Checkout Pull Request in Worktree (GitLens)..." +- Renames the `gitlens.experimental.openChangesInMultiDiffEditor` setting to `gitlens.views.openChangesInMultiDiffEditor` as it is no longer experimental and enabled by default + +### Fixed + +- Fixes [#3438](https://github.com/gitkraken/vscode-gitlens/issues/3438) - UsageTracker first track creates an object with count 0 +- Fixes [#3115](https://github.com/gitkraken/vscode-gitlens/issues/3115) - Always-on file annotations +- Fixes ahead/behind diffs on files (root) in the _Commits_ view to correctly show the diff of the range rather than the base to the working tree +- Fixes missing repository icons in the _Repositories_ view +- Fixes [#3116](https://github.com/gitkraken/vscode-gitlens/issues/3116) - Fix typos in README.md and package.json — thanks to [PR [#3117](https://github.com/gitkraken/vscode-gitlens/issues/3117)](https://github.com/gitkraken/vscode-gitlens/pull/3117) by yutotnh ([@yutotnh](https://github.com/yutotnh)) + +## [14.7.0] - 2024-01-17 + +### Added + +- Adds the ability to share Cloud Patches with specific members of your GitKraken organization + - You can now share Cloud Patches exclusively with specific members of your organization by selecting _Collaborators Only_ when viewing or creating a Cloud Patch + - Click the _Invite_ button at the bottom of the _Patch Details_ view to add members of your organization to collaborate and click _Update Patch_ to save your changes + - Cloud Patch collaborators will see these Patches under the _Shared with Me_ section of the _Cloud Patches_ view +- Adds support for deep links to files and code + - Deep link format: `https://gitkraken.dev/link/r/{repoId}/f/{filePath}?[url={remoteUrl}|path={repoPath}]&lines={lines}&ref={ref}` + - Adds _Copy Link to File_, _Copy Link to File at Revision..._, and _Copy Link to Code_ commands to the _Copy As_ submenu in the editor context menu and to the _Share_ submenu of files in GitLens views +- Adds the ability to choose multiple stashes to drop in the _Git Command Palette_'s _stash drop_ command — closes [#3102](https://github.com/gitkraken/vscode-gitlens/issues/3102) +- Adds a new _prune_ subcommand to the _Git Command Palette_'s _branch_ command to easily delete local branches with missing upstreams +- Adds a new _Push Stash Snapshot_ confirmation option to the _Git Command Palette_'s _stash push_ command to save a stash without changing the working tree +- Adds _Copy_ to search results in the _Search & Compare_ view to copy the search query to more easily share or paste queries into the _Commit Graph_ +- Adds a status bar indicator when blame annotations (inline, statusbar, file annotations, etc) are paused because the file has unsaved changes (dirty), with a tooltip explaining why and how to configure/change the behavior +- Adds an experimental `gitlens.experimental.allowAnnotationsWhenDirty` setting to specify whether file annotations are allowed on files with unsaved changes (dirty) — closes [#1988](https://github.com/gitkraken/vscode-gitlens/issues/1988), [#3016](https://github.com/gitkraken/vscode-gitlens/issues/3016) + - Use the existing `gitlens.advanced.blame.delayAfterEdit` setting to control how long to wait (defaults to 5s) before the annotation will update while the file is still dirty, which only applies if the file is under the `gitlens.advanced.sizeThresholdAfterEdit` setting threshold (defaults to 5000 lines) +- Adds a `gitlens.fileAnnotations.dismissOnEscape` setting to specify whether pressing the `ESC` key dismisses the active file annotations — closes [#3016](https://github.com/gitkraken/vscode-gitlens/issues/3016) + +### Changed + +- Changes the commit search by file to allow some fuzziness by default — closes [#3086](https://github.com/gitkraken/vscode-gitlens/issues/3086) + - For example, if you enter `file:readme.txt`, we will treat it as `file:**/readme.txt`, or if you enter `file:readme` it will be treated as `file:*readme*` +- Improves the _Switch_ command to no longer fail when trying to switch to a branch that is linked to another worktree and instead offers to open the worktree +- Changes branch/tag "tips" that are shown on commits in many GitLens views to be truncated to 11 characters by default to avoid stealing to much real estate + +### Fixed + +- Fixes [#3087](https://github.com/gitkraken/vscode-gitlens/issues/3087) - Terminal executed commands fail if the GitLens terminal is closed +- Fixes [#2784](https://github.com/gitkraken/vscode-gitlens/issues/2784) - Git stash push error +- Fixes [#2926](https://github.com/gitkraken/vscode-gitlens/issues/2926) in more cases - "Open File at Revision" has incorrect editor label if revision contains path separator — thanks to [PR [#3060](https://github.com/gitkraken/vscode-gitlens/issues/3060)](https://github.com/gitkraken/vscode-gitlens/issues/3060) by Ian Chamberlain ([@ian-h-chamberlain](https://github.com/ian-h-chamberlain)) +- Fixes [#3066](https://github.com/gitkraken/vscode-gitlens/issues/3066) - Editing a large file and switching away to another file without saving causes current line blame to disappear; thanks to [PR [#3067](https://github.com/gitkraken/vscode-gitlens/issues/3067)](https://github.com/gitkraken/vscode-gitlens/pulls/3067) by Brandon Cheng ([@gluxon](https://github.com/gluxon)) +- Fixes [#3063](https://github.com/gitkraken/vscode-gitlens/issues/3063) - Missing icons in GitLens Settings UI +- Fixes issue with _Switch_ command not honoring the confirmation setting +- Fixes worktree delete from offering to delete main worktree (which isn't possible) +- Fixes worktree delete on windows when the worktree's folder is missing + +### Removed + +- Removes the `gitlens.experimental.nativeGit` setting as it is now the default experience — closes [#3055](https://github.com/gitkraken/vscode-gitlens/issues/3055) + +## [14.6.1] - 2023-12-14 + +### Fixed + +- Fixes [#3057](https://github.com/gitkraken/vscode-gitlens/issues/3057) - Uncommitted changes cause an error when gitlens.defaultDateSource is "committed" + +## [14.6.0] - 2023-12-13 + +### Added + +- Adds the ability to specify who can access a Cloud Patch when creating it + - _Anyone with the link_ — allows anyone with the link and a GitKraken account to access the Cloud Patch + - _Members of my Org with the link_ — allows only members of your selected GitKraken organization with the link to access the Cloud Patch + - (Coming soon to GitLens) Ability to explicitly share to specific members from your organization and add them as collaborators on a Cloud Patch + - Cloud Patches that have been explicitly shared with you, i.e. you are a collaborator, now will appear in the _Cloud Patches_ view under _Shared with Me_ +- Adds timed snoozing for items in the _Focus View_ — choose from a selection of times when snoozing and the item will automatically move out of the snoozed tab when that time expires +- Adds the ability to open folder changes — closes [#3020](https://github.com/gitkraken/vscode-gitlens/issues/3020) + - Adds _Open Folder Changes with Revision..._ & _Open Folder Changes with Branch or Tag..._ commands to the command palette and to the _Explorer_ and _Source Control_ views + - Requires VS Code `1.85` or later and `multiDiffEditor.experimental.enabled` to be enabled +- Adds last modified time of the file when showing blame annotations for uncommitted changes +- Adds search results to the minimap tooltips on the _Commit Graph_ +- Adds support for Anthropic's Claude 2.1 model for GitLens' experimental AI features +- Adds a status indicator when the upstream branch is missing in _Commits_ view +- Adds support for opening renamed/deleted files using the _Open File at Revision..._ & _Open File at Revision from..._ commands by showing a quick pick menu if the requested file doesn't exist in the selected revision — closes [#708](https://github.com/gitkraken/vscode-gitlens/issues/708) thanks to [PR [#2825](https://github.com/gitkraken/vscode-gitlens/issues/2825)](https://github.com/gitkraken/vscode-gitlens/pull/2825) by Victor Hallberg ([@mogelbrod](https://github.com/mogelbrod)) +- Adds an _Open Changes_ submenu to comparisons in the _Search & Compare_ view +- Adds experimental `gitlens.experimental.openChangesInMultiDiffEditor` setting to specify whether to open multiple changes in VS Code's experimental multi-diff editor (single tab) or in individual diff editors (multiple tabs) + - Adds an inline _Open All Changes_ command to commits, stashes, and comparisons in the views + - Changes _Open All Changes_ & _Open All Changes with Working Tree_ commands to use the new multi-diff editor when enabled + - Adds _Open All Changes, Individually_ & _Open All Changes with Working Tree, Individually_ commands to provide access to the previous behavior + - Requires VS Code `1.85` or later and `multiDiffEditor.experimental.enabled` to be enabled +- Adds a confirmation prompt when attempting to undo a commit with uncommitted changes +- Adds a _[Show|Hide] Merge Commits_ toggle to the _Contributors_ view +- Adds _Open in Integrated Terminal_ command to repositories in the views — closes [#3053](https://github.com/gitkraken/vscode-gitlens/issues/3053) +- Adds _Open in Terminal_ & _Open in Integrated Terminal_ commands to the upstream status in the _Commits_ view +- Adds the ability to choose an active GitKraken organization in the _Account View_ for users with multiple GitKraken organizations. + +### Changed + +- Improves AI model choice selection for GitLens' experimental AI features +- Improves performance when logging is enabled +- Changes the contextual view title from GL to GitLens + +### Fixed + +- Fixes [#2663](https://github.com/gitkraken/vscode-gitlens/issues/2663) - Debounce bug: file blame isn't cleared when editing document while text in output window changes +- Fixes [#3050](https://github.com/gitkraken/vscode-gitlens/issues/3050) - Opening revision of a renamed file is broken +- Fixes [#3019](https://github.com/gitkraken/vscode-gitlens/issues/3019) - Commits Views not working +- Fixes [#3026](https://github.com/gitkraken/vscode-gitlens/issues/3026) - Gitlens stopped working in sub-repositories +- Fixes [#2746](https://github.com/gitkraken/vscode-gitlens/issues/2746) - Remove 'undo commit' command from gitlens inspect +- Fixes [#2482](https://github.com/gitkraken/vscode-gitlens/issues/2482) - Unresponsive "commits" view and "branches" view update due to git log +- Fixes duplicate entries in the _Search & Compare_ view when adding a new comparison from outside the view and before the view has loaded +- Fixes _Load more_ in the _File History_ view when the file has been renamed +- Fixes broken _Open Changed & Close Unchanged Files_ (`gitlens.views.openOnlyChangedFiles`) command in the views +- Fixes issues with _Contributors_ view updating when changing toggles +- Fixes issues with _Open [Previous] Changes with Working File_ command in comparisons +- Fixes banner styling on the _Commit Graph_ + +## [14.5.2] - 2023-11-30 + +### Added + +- Adds cyber week promotion + +## [14.5.1] - 2023-11-21 + +### Added + +- Adds support for OpenAI's GPT-4 Turbo and latest Anthropic models for GitLens' experimental AI features — closes [#3005](https://github.com/gitkraken/vscode-gitlens/issues/3005) + +### Changed + +- Improves the performance of the _Commit Graph_ when loading a large number of commits +- Refines AI prompts to provide better commit message generation and explanation results +- Updates Files Changed panel of _Commit Details_, which now supports indent settings and adds better accessibility + +### Fixed + +- Fixes [#3023](https://github.com/gitkraken/vscode-gitlens/issues/3023) - "Unable to show blame. Invalid or missing blame.ignoreRevsFile" with valid ignore revs file +- Fixes [#3018](https://github.com/gitkraken/vscode-gitlens/issues/3018) - Line blame overlay is broken when commit message contains a `)` +- Fixes [#2625](https://github.com/gitkraken/vscode-gitlens/issues/2625) - full issue ref has escape characters that break hover links +- Fixes stuck busy state of the _Commit Details_ Explain AI panel after canceling a request +- Fixes cloud patch deep links requiring a paid plan (while in preview) + +## [14.5.0] - 2023-11-13 + +### Added + +- Adds a preview of [Cloud Patches](https://www.gitkraken.com/solutions/cloud-patches), an all-new ☁️ feature — engage in early collaboration before the pull request: + - Share your work with others by creating a Cloud Patch from Working Changes, Commits, Stashes or Comparisons + - View Cloud Patches from URLs shared to you and apply them to your working tree or to a new or existing branch + - Manage your Cloud Patches from the new _Cloud Patches_ view in the GitLens side bar + - Adds a _Share as Cloud Patch..._ command to the command palette and to the _Share_ submenu in applicable GitLens views + - Adds a `gitlens.cloudPatches.enabled` setting to specify whether to enable Cloud Patches (defaults to `true`) +- Adds support to open multiple instances of the _Commit Graph_, _Focus_, and _Visual File History_ in the editor area + - Adds a _Split Commit Graph_ command to the _Commit Graph_ tab context menu + - Adds a `gitlens.graph.allowMultiple` setting to specify whether to allow opening multiple instances of the _Commit Graph_ in the editor area + - Adds a _Split Focus_ command to the _Focus_ tab context menu + - Adds a `gitlens.focus.allowMultiple` setting to specify whether to allow opening multiple instances of the _Focus_ in the editor area + - Adds a _Split Visual File History_ command to the _Visual File History_ tab context menu + - Adds a `gitlens.visualHistory.allowMultiple` setting to specify whether to allow opening multiple instances of the _Visual File History_ in the editor area +- Adds a _Generate Commit Message (Experimental)_ button to the SCM input when supported (currently `1.84.0-insider` only) + - Adds a `gitlens.ai.experimental.generateCommitMessage.enabled` setting to specify whether to enable GitLens' experimental, AI-powered, on-demand commit message generation — closes [#2652](https://github.com/gitkraken/vscode-gitlens/issues/2652) +- Improves the experience of the _Search Commits_ quick pick menu + - Adds a stateful authors picker to make it much easier to search for commits by specific authors + - Adds a file and folder picker to make it much easier to search for commits containing specific files or in specific folders +- Adds ability to sort repositories in the views and quick pick menus — closes [#2836](https://github.com/gitkraken/vscode-gitlens/issues/2836) thanks to [PR [#2991](https://github.com/gitkraken/vscode-gitlens/issues/2991)](https://github.com/gitkraken/vscode-gitlens/pull/2991) + - Adds a `gitlens.sortRepositoriesBy` setting to specify how repositories are sorted in quick pick menus and views by Aidos Kanapyanov ([@aidoskanapyanov](https://github.com/aidoskanapyanov)) +- Adds a _[Show|Hide] Merge Commits_ toggle to the _Commits_ view — closes [#1399](https://github.com/gitkraken/vscode-gitlens/issues/1399) thanks to [PR [#1540](https://github.com/gitkraken/vscode-gitlens/issues/1540)](https://github.com/gitkraken/vscode-gitlens/pull/1540) by Shashank Shastri ([@Shashank-Shastri](https://github.com/Shashank-Shastri)) +- Adds a _Filter Commits by Author..._ commands to the _Commits_ view and comparisons context menus to filter commits in the _Commits_ view by specific authors +- Adds ability to publish to a remote branch to a specific commit using the _Push to Commit_ command +- Adds an _Open Comparison on Remote_ command to comparisons in views +- Adds a _Share > Copy Link to Repository_ command on branches in the views +- Adds _Share > Copy Link to Branch_ and _Share > Copy Link to Repository_ commands on the current branch status in the _Commits_ view +- Adds a _Clear Reviewed Files_ command to comparisons to clear all reviewed files — closes [#2987](https://github.com/gitkraken/vscode-gitlens/issues/2987) +- Adds a _Collapse_ command to many view nodes +- Adds a `gitlens.liveshare.enabled` setting to specify whether to enable integration with Visual Studio Live Share + +### Changed + +- Improves accuracy, performance, and memory usage related to parsing diffs, used in _Changes_ hovers, _Changes_ file annotations, etc +- Improves confirmation messaging in the _Git Command Palette_ +- Refines merge/rebase messaging when there is nothing to do — refs [#1660](https://github.com/gitkraken/vscode-gitlens/issues/1660) +- Improves view messaging while loading/discovering repositories +- Honors VS Code's `git.useForcePushWithLease` and `git.useForcePushIfIncludes` settings when force pushing +- Changes _File Heatmap_ annotations to not color the entire line by default. Want it back, add `line` to the `gitlens.heatmap.locations` setting + +### Fixed + +- Fixes [#2997](https://github.com/gitkraken/vscode-gitlens/issues/2997) - "push to commit" pushes everything instead of up to the selected commit +- Fixes [#2615](https://github.com/gitkraken/vscode-gitlens/issues/2615) - Source Control views disappear after opening a file beyond a symbolic link +- Fixes [#2443](https://github.com/gitkraken/vscode-gitlens/issues/2443) - UNC-PATH: File History changes not displaying any changes when open +- Fixes [#2625](https://github.com/gitkraken/vscode-gitlens/issues/2625) - full issue ref has escape characters that break hover links +- Fixes [#2987](https://github.com/gitkraken/vscode-gitlens/issues/2987) - Unable to remove all marks on reviewed files with a single operation +- Fixes [#2923](https://github.com/gitkraken/vscode-gitlens/issues/2923) - TypeError: Only absolute URLs are supported +- Fixes [#2926](https://github.com/gitkraken/vscode-gitlens/issues/2926) - "Open File at Revision" has incorrect editor label if revision contains path separator +- Fixes [#2971](https://github.com/gitkraken/vscode-gitlens/issues/2971) - \[Regression\] The branch column header text disappears when you have a hidden ref +- Fixes [#2814](https://github.com/gitkraken/vscode-gitlens/issues/2814) - GitLens Inspect: "Files Changed" not following when switching between commits in File History +- Fixes [#2952](https://github.com/gitkraken/vscode-gitlens/issues/2952) - Inline blame not working because of missing ignoreRevsFile +- Fixes issue where _Changes_ hovers and _Changes_ file annotations sometimes weren't accurate +- Fixes intermittent issue where inline blame and other revision-based editor features are unavailable when repository discovery takes a bit +- Fixes intermittent issues where details sometimes get cleared/overwritten when opening the _Commit Details_ view +- Fixes issue when clicking on commits in the Visual File History to open the _Commit Details_ view +- Fixes issue opening stashes in the _Commit Details_ view from the _Stashes_ view +- Fixes issue where GitHub/GitLab enriched autolinks could incorrectly point to the wrong repository +- Fixes issue showing folder history in the _File History_ view when there are uncommitted changes (staged or unstaged) +- Fixes issue when pushing to a remote branch with different name than the local +- Fixes tooltip styling/theming on the _Commit Graph_ +- Fixes issues staged files in repositories not "opened" (discovered) by the built-in Git extension + +## [14.4.0] - 2023-10-13 + +### Added + +- Adds a _Working Changes_ tab to the _Commit Details_ and _Graph Details_ views to show your working tree changes + - Adds _Stage Changes_ and _Unstage Changes_ commands to files on the _Working Changes_ tab +- Adds a _[Show|Hide] Merge Commits_ toggle to the _File History_ view — closes [#2104](https://github.com/gitkraken/vscode-gitlens/issues/2104) & [#2944](https://github.com/gitkraken/vscode-gitlens/issues/2944) + - Adds a `gitlens.advanced.fileHistoryShowMergeCommits` setting to specify whether merge commits will be show in file histories +- Adds deep link support for workspaces in the _GitKraken Workspaces_ view + - Deep link format: `https://gitkraken.dev/link/workspaces/{workspaceId}` + - Adds a _Share_ submenu with a _Copy Link to Workspace_ command to workspaces in the _GitKraken Workspaces_ view + +### Changed + +- Improves performance of inline blame, status bar blame, and hovers especially when working with remotes with connected integrations +- Changes the _File History_ view to follow renames and filters out merge commits by default — closes [#2104](https://github.com/gitkraken/vscode-gitlens/issues/2104) & [#2944](https://github.com/gitkraken/vscode-gitlens/issues/2944) +- Changes the _File History_ view to allow following renames while showing history across all branches (which was a previous limitation of Git) — closes [#2828](https://github.com/gitkraken/vscode-gitlens/issues/2828) +- Changes to use our own implementation of `fetch`, `push`, and `pull` Git operations, rather than delegating to VS Code to avoid limitations especially with GitKraken Workspaces. Please report any issues and you can revert this (for now) by setting `"gitlens.experimental.nativeGit"` to `"false"` in your settings +- Relaxes PR autolink detection for Azure DevOps to use `PR ` instead of `Merged PR ` — closes [#2908](https://github.com/gitkraken/vscode-gitlens/issues/2908) +- Changes wording on `Reset Stored OpenAI Key` command to `Reset Stored AI Key` to reflect support for other providers + +### Fixed + +- Fixes [#2941](https://github.com/gitkraken/vscode-gitlens/issues/2941) - Invalid Request when trying to generate a commit message using Anthropic API +- Fixes [#2940](https://github.com/gitkraken/vscode-gitlens/issues/2940) - Can't use Azure OpenAI model because i can't save the openai key because of the verification +- Fixes [#2928](https://github.com/gitkraken/vscode-gitlens/issues/2928) - Apply Changes should create new files when needed +- Fixes [#2896](https://github.com/gitkraken/vscode-gitlens/issues/2896) - Repositories view stuck in loading state +- Fixes [#2460](https://github.com/gitkraken/vscode-gitlens/issues/2460) - Gitlens Remote provider doesn't work properly in "Commit graph" view +- Fixes issue with "View as [List|Tree]" toggle not working in the _Commit Details_ view +- Fixes an issue with deep links sometimes failing to properly resolve when a matching repository without the remote is found +- Fixes an issue in the _Commit Graph_ where commits not in the history of a merge commit were showing in the same column +- Fixes `Reset Stored AI Key` command to work for the current provider +- Fixes an issue with parsing some renames in log output + +## [14.3.0] - 2023-09-07 + +### Added + +- Adds checkboxes to files in comparisons to allow for tracking review progress — closes [#836](https://github.com/gitkraken/vscode-gitlens/issues/836) +- Allows the _Commit Graph_ to be open in the panel and in the editor area simultaneously +- Adds an _Open Changes_ button to commits in the file history quick pick menu — closes [#2641](https://github.com/gitkraken/vscode-gitlens/issues/2641) thanks to [PR [#2800](https://github.com/gitkraken/vscode-gitlens/issues/2800)](https://github.com/gitkraken/vscode-gitlens/pull/2800) by Omar Ghazi ([@omarfesal](https://github.com/omarfesal)) + +### Changed + +- Changes the `gitlens.graph.layout` setting to be a default preference rather than a mode change + +### Fixed + +- Fixes [#2885](https://github.com/gitkraken/vscode-gitlens/issues/2885) - Folder History not show changed files of commit +- Fixes issues with opening changes (diffs) of renamed files +- Fixes issues with deep links including when opening VS Code from the deep link + +## [14.2.1] - 2023-08-10 + +### Added + +- Adds a _Refresh_ action to the _Commit Details_ view + +### Fixed + +- Fixes [#2850](https://github.com/gitkraken/vscode-gitlens/issues/2850) - For custom remotes, the URL resulting from the branches is truncated +- Fixes [#2841](https://github.com/gitkraken/vscode-gitlens/issues/2841) - Error when trying to browse commits +- Fixes [#2847](https://github.com/gitkraken/vscode-gitlens/issues/2847) - 14.2.0 Breaks "pull" action works fine in 14.1.1 + +## [14.2.0] - 2023-08-04 + +### Added + +- Improves the _Focus_ view experience + - Unifies pull requests and issues into a single view + - Adds tabs to switch between showing Pull Requests, Issues, or All + - Adds a filter/search box to quickly find pull request or issues by title + - Adds ability to click on a branch name to show the branch on the _Commit Graph_ +- Adds a new command _Open Changed & Close Unchanged Files..._ to the command palette, the context menu of the _Commit Graph_ work-in-progress (WIP) row, and the SCM group context menu to open all changed files and close all unchanged files. +- Adds a new command _Reset Current Branch to Tip..._ to branch context menus in the _Commit Graph_ and in GitLens views to reset the current branch to the commit at the chosen branch's tip. + +### Changed + +- Changes _Compact Graph Column Layout_ context menu command to _Use Compact Graph Column_ for better clarity +- Changes _Default Graph Column Layout_ context menu command to _Use Expanded Graph Column_ for better clarity +- Improves remote parsing for better integration support for some edge cases + +### Fixed + +- Fixes [#2823](https://github.com/gitkraken/vscode-gitlens/issues/2823) - Handle stdout/stderr Buffers in shell run() — thanks to [PR [#2824](https://github.com/gitkraken/vscode-gitlens/issues/2824)](https://github.com/gitkraken/vscode-gitlens/pull/2824) by Victor Hallberg ([@mogelbrod](https://github.com/mogelbrod)) +- Fixes issues with missing worktrees breaking the Worktrees view and Worktree quick pick menus + +## [14.1.1] - 2023-07-18 + +### Added + +- Adds the ability to provide a custom url to support Azure-hosted Open AI models — refs [#2743](https://github.com/gitkraken/vscode-gitlens/issues/2743) + +### Changed + +- Improves autolink URL generation by improving the "best" remote detection — refs [#2425](https://github.com/gitkraken/vscode-gitlens/issues/2425) +- Improves preserving the ref names in deeplinks to comparisons + +### Fixed + +- Fixes [#2744](https://github.com/gitkraken/vscode-gitlens/issues/2744) - GH enterprise access with _Focus_ +- Fixes deeplink comparison ordering for a better experience +- Fixes deeplinks to comparisons with working tree not resolving + +## [14.1.0] - 2023-07-13 + +### Added + +- Adds the ability to link a GitKraken Cloud workspace with an associated VS Code workspace + - Adds ability to automatically add repositories to the current VS Code workspace that were added to its associated GitKraken Cloud workspace, if desired + - Adds a _Change Linked Workspace Auto-Add Behavior..._ context menu command on the _Current Window_ and linked workspace to control the desired behavior + - Adds an _Add Repositories from Linked Workspace..._ context menu command on the _Current Window_ item to trigger this manually + - Adds a new _Open VS Code Workspace_ command to open an existing VS Code workspace associated with a GitKraken Cloud workspace + - Adds a highlight (green) to the linked GitKraken Cloud workspace when the current VS Code workspace is associated with it in the _GitKraken Workspaces_ view +- Adds deep link support for comparisons in the _Search & Compare_ view + - Deep link format: `vscode://eamodio.gitlens/r/{repoId}/compare/{ref1}[..|...]{ref2}?[url={remoteUrl}|path={repoPath}]` + - Adds a _Share_ submenu with a _Copy Link to Comparison_ command to comparisons in the _Search & Compare_ view +- Adds support for Anthropic's Claude 2 AI model +- Adds a progress notification while repositories are being added to a GitKraken Cloud workspace + +### Changed + +- Improves scrolling performance on the _Commit Graph_ +- Renames _Convert to VS Code Workspace_ to _Create VS Code Workspace_ for workspaces in the _GitKraken Workspaces_ view to better reflect the behavior of the action +- Hides _Create VS Code Workspace_ and _Locate All Repositories_ commands on empty workspaces in the _GitKraken Workspaces_ view + +### Fixed + +- Fixes [#2798](https://github.com/gitkraken/vscode-gitlens/issues/2798) - Improve response from OpenAI if key used is tied to a free account +- Fixes [#2785](https://github.com/gitkraken/vscode-gitlens/issues/2785) - Remote Provider Integration URL is broken — thanks to [PR [#2786](https://github.com/gitkraken/vscode-gitlens/issues/2786)](https://github.com/gitkraken/vscode-gitlens/pull/2786) by Neil Ghosh ([@neilghosh](https://github.com/neilghosh)) +- Fixes [#2791](https://github.com/gitkraken/vscode-gitlens/issues/2791) - Unable to use contributors link in README.md — thanks to [PR [#2792](https://github.com/gitkraken/vscode-gitlens/issues/2792)](https://github.com/gitkraken/vscode-gitlens/pull/2792) by Leo Dan Peña ([@leo9-py](https://github.com/leo9-py)) +- Fixes [#2793](https://github.com/gitkraken/vscode-gitlens/issues/2793) - Requesting username change in contributors README page — thanks to [PR [#2794](https://github.com/gitkraken/vscode-gitlens/issues/2794)](https://github.com/gitkraken/vscode-gitlens/pull/2794) by Leo Dan Peña ([@leo9-py](https://github.com/leo9-py)) +- Fixes some rendering issues when scrolling in the _Commit Graph_ +- Fixes an issue with some shared workspaces not showing up in the _GitKraken Workspaces_ view when they should +- Fixes an issue when adding repositories to a workspace in the _GitKraken Workspaces_ view where the added repository would show as missing until refreshing the view + +## [14.0.1] - 2023-06-19 + +### Changed + +- Changes view's contextual title to "GL" to appear more compact when rearranging views + +### Fixed + +- Fixes [#2731](https://github.com/gitkraken/vscode-gitlens/issues/2731) - Bug on Focus View Help Popup z-order +- Fixes [#2742](https://github.com/gitkraken/vscode-gitlens/issues/2742) - Search & Compare: Element with id ... is already registered +- Fixes an issue where the links in the _Search & Compare_ view failed to open the specific search type +- Fixes an issue when searching for commits and the results contain stashes + +## [14.0.0] - 2023-06-14 + +### Added + +- Adds an all-new Welcome experience to quickly get started with GitLens and discover features — even if you are familiar with GitLens, definitely check it out! +- Adds a new streamlined _Get Started with GitLens_ walkthrough +- Adds an all-new _Home_ view for quick access to GitLens features and _GitKraken Account_ for managing your account +- Adds a new reimagined views layout — see discussion [#2721](https://github.com/gitkraken/vscode-gitlens/discussions/2721) for more details + - Rearranges the GitLens views for greater focus and productivity, including the new _GitLens Inspect_ and moved some of our views from Source Control into either _GitLens_ or _GitLens Inspect_. + - Adds a new GitLens Inspect activity bar icon focuses on providing contextual information and insights to what you're actively working on + - Adds a _Reset Views Layout_ command to reset all the GitLens views to the new default layout +- Adds an all-new _GitKraken Workspaces_ ☁️ feature as a side bar view, supporting interaction with local and cloud GitKraken workspaces, lists of repositories tied to your account. + - Create, view, and manage repositories on GitKraken cloud workspaces, which are available with a GitKraken account across the range of GitKraken products + - Automatically or manually link repositories in GitKraken cloud workspaces to matching repositories on your machine + - Quickly create a GitKraken cloud workspace from the repositories in your current window + - Open a GitKraken cloud workspace as a local, persisted, VS Code workspace file (further improvements coming soon) + - Open a cloud workspace or repository in a new window (or your current window) + - See your currently open repositories in the _Current Window_ section + - Explore and interact with any repository in a GitKraken cloud workspace, some actions are currently limited to repositories which are open in your current window — ones highlighted in green + - (Coming soon) Share your GitKraken cloud workspaces with your team or organization +- Adds new _Commit Graph_ ✨ features and improvements + - Makes the _Panel_ layout the default for easy access to the Commit Graph with a dedicated details view + - Adds two new options to the graph header context menu + - `Reset Columns to Default Layout` - resets column widths, ordering, visibility, and graph column mode to default settings + - `Reset Columns to Compact Layout` - resets column widths, ordering, visibility, and graph column mode to compact settings + - Adds a _Toggle Commit Graph_ command to quickly toggle the graph on and off (requires the _Panel_ layout) + - Adds a _Toggle Maximized Commit Graph_ command to maximize and restore the graph for a quick full screen experience (requires the _Panel_ layout) + - Enables the _Minimap_ by default, as its no longer experimental, to provide a quick overview of of commit activity above the graph + - Adds ability to toggle between showing commits vs lines changed in the minimap (note: choosing lines changed requires more computation) + - Adds a legend and quick toggles for the markers shown on the minimap + - Defers the loading of the minimap to avoid impacting graph performance and adds a loading progress indicator + - Adds a `gitlens.graph.minimap.enabled` setting to specify whether to show the minimap + - Adds a `gitlens.graph.minimap.dataType` setting to specify whether to show commits or lines changed in the minimap + - Adds a `gitlens.graph.minimap.additionalTypes` setting to specify additional markers to show on the minimap + - Makes the _Changes_ column visible by default (previously hidden) + - Defers the loading of the _Changes_ column to avoid impacting graph performance and adds a loading progress indicator to the column header + - Adds a changed file count in addition to the changed lines visualization + - Improves the rendering of the changed line visualization and adds extra width to the bar for outlier changes so that they stand out a bit more + - Adds an _Open Repo on Remote_ button to left of the repo name in the graph header + - Improves contextual help on the search input as you type + - Improves tooltips on _Branch/Tag_ icons to be more uniform and descriptive + - Adds new context menu options to the _Commit Graph Settings_ (cog, above the scrollbar) to toggle which scroll marker to show + - Improves alignment of scroll markers on the scrollbar, and adds a gap between the last column and the scrollbar +- Adds the ability to choose which AI provider, OpenAI or Anthropic, and AI model are used for GitLens' experimental AI features + - Adds a _Switch AI Model_ command to the command palette and from the _Explain (AI)_ panel on the _Commit Details_ view + - Adds a `gitlens.ai.experimental.provider` setting to specify the AI provider to use (defaults to `openai`) + - Adds a `gitlens.ai.experimental.openai.model` setting to specify the OpenAI model (defaults to `gpt-3.5-turbo`) — closes [#2636](https://github.com/gitkraken/vscode-gitlens/issues/2636) thanks to [PR [#2637](https://github.com/gitkraken/vscode-gitlens/issues/2637)](https://github.com/gitkraken/vscode-gitlens/pull/2637) by Daniel Rodríguez ([@sadasant](https://github.com/sadasant)) + - Adds a `gitlens.ai.experimental.anthropic.model` setting to specify the Anthropic model (defaults to `claude-v1`) +- Adds expanded deep link support + - Adds cloning, adding a remote, and fetching from the target remote when resolving a deep link + - Adds deep linking to a repository with direct file path support +- Adds the automatic restoration of all GitLens webviews when you restart VS Code +- Adds ability to control encoding for custom remote configuration — closes [#2336](https://github.com/gitkraken/vscode-gitlens/issues/2336) +- Improves performance and rendering of the _Visual File History_ and optimizes it for usage in the side bars + - Adds a _Full history_ option to the _Visual File History_ — closes [#2690](https://github.com/gitkraken/vscode-gitlens/issues/2690) + - Adds a loading progress indicator +- Adds _Reveal in File Explorer_ command to repositories +- Adds _Copy SHA_ command to stashes +- Adds new icons for virtual repositories + +### Changed + +- Changes header on _GitLens Settings_ to be consistent with the new Welcome experience +- Reduces the visual noise of currently inaccessible ✨ features in the side bars +- Performance: Improves rendering of large commits on the _Commit Details_ view +- Performance: Defers possibly duplicate repo scans at startup and waits until repo discovery is complete before attempting to find other repos +- Security: Disables Git access in Restricted Mode (untrusted) +- Security: Avoids dynamic execution in string interpolation + +### Fixed + +- Fixes [#2738](https://github.com/gitkraken/vscode-gitlens/issues/2738) - Element with id ... is already registered +- Fixes [#2728](https://github.com/gitkraken/vscode-gitlens/issues/2728) - Submodule commit graph will not open in the panel layout +- Fixes [#2734](https://github.com/gitkraken/vscode-gitlens/issues/2734) - 🐛 File History: Browse ... not working +- Fixes [#2671](https://github.com/gitkraken/vscode-gitlens/issues/2671) - Incorrect locale information provided GitLens +- Fixes [#2689](https://github.com/gitkraken/vscode-gitlens/issues/2689) - GitLens hangs on github.dev on Safari +- Fixes [#2680](https://github.com/gitkraken/vscode-gitlens/issues/2680) - Git path with spaces is not properly quoted in the command +- Fixes [#2677](https://github.com/gitkraken/vscode-gitlens/issues/2677) - Merging branch produces path error +- Fixes an issue with comparison commands on File/Line History views +- Fixes an issue with stale state on many webviews when shown after being hidden +- Fixes an issue with fetch/push/pull on the _Commit Graph_ header +- Fixes an issue where _Branch / Tag_ items on the _Commit Graph_ sometimes wouldn't expand on hover +- Fixes an issue where some command were showing up on unsupported schemes +- Fixes an issue where the file/line history views could break because of malformed URIs + +## [13.6.0] - 2023-05-11 + +### Added + +- Adds the ability to rename stashes — closes [#2538](https://github.com/gitkraken/vscode-gitlens/issues/2538) + - Adds a new _Rename Stash..._ command to the _Stashes_ view +- Adds new _Commit Graph_ features and improvements + - Adds a _Push_ or _Pull_ toolbar button depending the current branch being ahead or behind it's upstream + - Adds support for the _Commit Graph_ over [Visual Studio Live Share](https://visualstudio.microsoft.com/services/live-share/) sessions + - Adds the ability to move all of the columns, including the ones that were previously unmovable + - Automatically switches column headers from text to icons when the column's width is too small for the text to be useful + - Automatically switches the Author column to shows avatars rather than text when the column is sized to its minimum width +- Adds an experimental _Explain (AI)_ panel to the _Commit Details_ view to leverage OpenAI to provide an explanation of the changes of a commit +- Adds the ability to search stashes when using the commit search via the _Commit Graph_, _Search & Compare_ view, or the _Search Commits_ command +- Adds an _Open Visual File History_ command to the new _File History_ submenu on existing context menus +- Allows the _Repositories_ view for virtual repositories +- Honors the `git.repositoryScanIgnoredFolders` VS Code setting +- Adds _Share_, _Open Changes_, and _Open on Remote (Web)_ submenus to the new editor line numbers (gutter) context menu +- Adds an _Open Line Commit Details_ command to the _Open Changes_ submenus on editor context menus +- Adds an _Open Changes_ submenu to the row context menu on the _Commit Graph_ + +### Changed + +- Refines and reorders many of the GitLens context menus and additions to VS Code context menus + - Moves _Copy Remote \* URL_ commands from the _Copy As_ submenu into the _Share_ submenu in GitLens views + - Adds a _Share_ submenu to Source Control items + - Moves _Copy SHA_ and _Copy Message_ commands on commits from the _Copy As_ submenu into the root of the context menu + - Moves _Copy Relative Path_ command on files from the _Copy As_ submenu into the root of the context menu + - Moves file history commands into a _File History_ submenu + - Moves _Open \* on Remote_ commands into _Open on Remote (Web)_ submenu + - Renames the _Commit Changes_ submenu to _Open Changes_ + - Renames _Show Commit_ command to _Quick Show Commit_ and _Show Line Commit_ command to _Quick Show Line Commit_ for better clarity as it opens a quick pick menu +- Changes the file icons shown in many GitLens views to use the file type's theme icon (by default) rather than the status icon + - Adds a `gitlens.views.commits.files.icon` setting to specify how the _Commits_ view will display file icons + - Adds a `gitlens.views.repositories.files.icon` setting to specify how the _Repositories_ view will display file icons + - Adds a `gitlens.views.branches.files.icon` setting to specify how the _Branches_ view will display file icons + - Adds a `gitlens.views.remotes.files.icon` setting to specify how the _Remotes_ view will display file icons + - Adds a `gitlens.views.stashes.files.icon` setting to specify how the _Stashes_ view will display file icons + - Adds a `gitlens.views.tags.files.icon` setting to specify how the _Tags_ view will display file icons + - Adds a `gitlens.views.worktrees.files.icon` setting to specify how the _Worktrees_ view will display file icons + - Adds a `gitlens.views.contributors.files.icon` setting to specify how the _Contributors_ view will display file icons + - Adds a `gitlens.views.searchAndCompare.files.icon` setting to specify how the _Search & Compare_ view will display file icons +- Renames _Delete Stash..._ command to _Drop Stash..._ in the _Stashes_ view +- Removes the commit icon when hiding avatars in the _Commits_ view to allow for a more compact layout +- Limits Git CodeLens on docker files — closes [#2153](https://github.com/gitkraken/vscode-gitlens/issues/2153) +- Shows progress notification for deep links earlier in the process — closes [#2662](https://github.com/gitkraken/vscode-gitlens/issues/2662) + +### Fixed + +- Fixes [#2664](https://github.com/gitkraken/vscode-gitlens/issues/2664) - Terminal run Git command can be "corrupted" if there is previous text waiting in the terminal +- Fixes [#2660](https://github.com/gitkraken/vscode-gitlens/issues/2660) - Commands executed in the terminal fail to honor found Git path +- Fixes [#2654](https://github.com/gitkraken/vscode-gitlens/issues/2654) - Toggle zen mode not working until you restart vscode +- Fixes [#2629](https://github.com/gitkraken/vscode-gitlens/issues/2629) - When on VSCode web, add handling for failing repo discovery +- Fixes many issues with using GitLens over [Visual Studio Live Share](https://visualstudio.microsoft.com/services/live-share/) sessions +- Fixes mouse scrubbing issues with the minimap on the _Commit Graph_ +- Fixes _Refresh Repository Access_ and _Reset Repository Access Cache_ commands to always be available +- Fixes state not being restored on the Home webview +- Fixes getting the oldest unpushed commit when there is more than 1 remote +- Fixes an issue with the quick input on the _Git Command Palette_ unexpectedly going back to the previous step +- Fixes GitLens access tooltip not being visible when hovering in the _Commit Graph_ +- Fixes last fetched messaging in the _Commit Graph_ when its never been fetched + +### Removed + +- Removes "Open Commit on Remote" command from the VS Code Timeline view as it can no longer be supported — see [microsoft/vscode/#177319](https://github.com/microsoft/vscode/issues/177319) + +## [13.5.0] - 2023-04-07 + +### Added + +- Adds the ability to switch to an alternate panel layout for the _Commit Graph_ — closes [#2602](https://github.com/gitkraken/vscode-gitlens/issues/2602) and [#2537](https://github.com/gitkraken/vscode-gitlens/issues/2537) + - Adds a new context menu from the _Commit Graph Settings_ (cog) to switch between the "Editor" and "Panel" layouts + - Adds a `gitlens.graph.layout` setting to specify the layout of the _Commit Graph_ + - `editor` - Shows the _Commit Graph_ in an editor tab + - `panel` - Shows the _Commit Graph_ in the bottom panel with an additional _Commit Graph Details_ view alongside on the right +- Adds new _Commit Graph_ features and improvements + - Adds a compact layout to the Graph column of the _Commit Graph_ + - Adds a context menu option to the header to toggle between the "Compact" and "Default" layouts — closes [#2611](https://github.com/gitkraken/vscode-gitlens/pull/2611) + - Shows pull request icons on local branches when their upstream branch is associated with a pull request + - Adds tooltips to work-in-progress (WIP) and stash nodes + - Adds a "Publish Branch" context menu action to local branches without an upstream branch — closes [#2619](https://github.com/gitkraken/vscode-gitlens/pull/2619) + - Lowers the minimum width of the "Branch / Tag" column +- Adds actions to _Focus_ Pull Requests + - Switch to or create a local branch + - Create or open a worktree from the branch +- Adds a _Generate Commit Message (Experimental)..._ command to the SCM context menus + +### Changed + +- Reduces the size of the GitLens (desktop) bundle which reduces memory usage and improves startup time — ~7% smaller (1.21MB -> 1.13MB) + - Consolidates the "extension" side of all the GitLens webviews/webview-views into a unified controller and code-splits each webview/webview-view into its own bundle + - Allows for very minimal code to be loaded for each webview/webview-view until its used, so if you never use a webview you never "pay" the cost of loading it +- Changes _Open Associated Pull Request_ command to support opening associated pull requests with the current branch or the HEAD commit if no branch association was found — closes [#2559](https://github.com/gitkraken/vscode-gitlens/issues/2559) +- Improves the "pinning" of the _Commit Details_ view + - Avoids automatically pinning + - Changes the pinned state to be much more apparent +- Changes _Commit Details_ to always open diffs in the same editor group as the currently active editor — closes [#2537](https://github.com/gitkraken/vscode-gitlens/issues/2537) + +### Fixed + +- Fixes [#2597](https://github.com/gitkraken/vscode-gitlens/issues/2597) - Allow disabling "Open worktree for pull request via GitLens..." from repository context menu +- Fixes [#2612](https://github.com/gitkraken/vscode-gitlens/issues/2612) - Clarify GitLens telemetry settings +- Fixes [#2583](https://github.com/gitkraken/vscode-gitlens/issues/2583) - Regression with _Open Worktree for Pull Request via GitLens..._ command +- Fixes [#2252](https://github.com/gitkraken/vscode-gitlens/issues/2252) - "Copy As"/"Copy Remote File Url" copies %23 instead of # in case of Gitea — thanks to [PR [#2603](https://github.com/gitkraken/vscode-gitlens/issues/2603)](https://github.com/gitkraken/vscode-gitlens/pull/2603) by WofWca ([@WofWca](https://github.com/WofWca)) +- Fixes [#2582](https://github.com/gitkraken/vscode-gitlens/issues/2582) - _Visual File History_ background color when in a panel +- Fixes [#2609](https://github.com/gitkraken/vscode-gitlens/issues/2609) - If you check out a branch that is hidden, GitLens should show the branch still +- Fixes [#2595](https://github.com/gitkraken/vscode-gitlens/issues/2595) - Error when stashing changes +- Fixes tooltips sometimes failing to show in _Commit Graph_ rows when the Date column is hidden +- Fixes an issue with incorrectly showing associated pull requests with branches that are partial matches of the true branch the pull request is associated with + +## [13.4.0] - 2023-03-16 + +### Added + +- Adds an experimental _Generate Commit Message (Experimental)_ command to use OpenAI to generate a commit message for staged changes + - Adds a `gitlens.experimental.generateCommitMessagePrompt` setting to specify the prompt to use to tell OpenAI how to structure or format the generated commit message — can have fun with it and make your commit messages in the style of a pirate, etc +- Adds auto-detection for `.git-blame-ignore-revs` files and excludes the commits listed within from the blame annotations +- Adds a _Open Git Worktree..._ command to jump directly to opening a worktree in the _Git Command Palette_ +- Adds a _Copy Relative Path_ context menu action for active editors and file nodes in sidebar views +- Adds the ability to see branches and tags on remote repositories (e.g. GitHub) on the _Commit Graph_ + - Currently limited to only showing them for commits on the current branch, as we aren't yet able to show all commits on all branches + +### Changed + +- Improves the display of items in the _Commit Graph_ + - When showing local branches, we now always display the upstream branches in the minimap, scrollbar markers, and graph rows + - When laying out lanes in the Graph column, we now bias to be left aligned when possible for an easier to read and compact graph visualization +- Improves _Open Worktree for Pull Request via GitLens..._ command to use the qualified remote branch name, e.g. `owner/branch`, when creating the worktree +- Removes Insiders edition in favor of the pre-release edition + +### Fixed + +- Fixes [#2550](https://github.com/gitkraken/vscode-gitlens/issues/2550) - Related pull request disappears after refresh +- Fixes [#2549](https://github.com/gitkraken/vscode-gitlens/issues/2549) - toggle code lens does not work with gitlens.codeLens.enabled == false +- Fixes [#2553](https://github.com/gitkraken/vscode-gitlens/issues/2553) - Can't add remote url with git@ format +- Fixes [#2083](https://github.com/gitkraken/vscode-gitlens/issues/2083), [#2539](https://github.com/gitkraken/vscode-gitlens/issues/2539) - Fix stashing staged changes — thanks to [PR [#2540](https://github.com/gitkraken/vscode-gitlens/issues/2540)](https://github.com/gitkraken/vscode-gitlens/pull/2540) by Nafiur Rahman Khadem ([@ShafinKhadem](https://github.com/ShafinKhadem)) +- Fixes [#1968](https://github.com/gitkraken/vscode-gitlens/issues/1968) & [#1027](https://github.com/gitkraken/vscode-gitlens/issues/1027) - Fetch-> fatal: could not read Username — thanks to [PR [#2481](https://github.com/gitkraken/vscode-gitlens/issues/2481)](https://github.com/gitkraken/vscode-gitlens/pull/2481) by Skyler Dawson ([@foxwoods369](https://github.com/foxwoods369)) +- Fixes [#2495](https://github.com/gitkraken/vscode-gitlens/issues/2495) - Cannot use gitlens+ feature on public repo in some folders +- Fixes [#2530](https://github.com/gitkraken/vscode-gitlens/issues/2530) - Error when creating worktrees in certain conditions +- Fixed [#2566](https://github.com/gitkraken/vscode-gitlens/issues/2566) - hide context menu in output panel — thanks to [PR [#2568](https://github.com/gitkraken/vscode-gitlens/issues/2568)](https://github.com/gitkraken/vscode-gitlens/pull/2568) by hahaaha ([@hahaaha](https://github.com/hahaaha)) + +## [13.3.2] - 2023-03-06 + +### Changed + +- Reduces the size of the GitLens bundle which improves startup time + - GitLens' extension bundle for desktop (node) is now ~24% smaller (1.58MB -> 1.21MB) + - GitLens' extension bundle for web (vscode.dev/github.dev) is now ~6% smaller (1.32MB -> 1.24MB) + +### Fixed + +- Fixes [#2533](https://github.com/gitkraken/vscode-gitlens/issues/2533) - Current Branch Only graph filter sometimes fails +- Fixes [#2504](https://github.com/gitkraken/vscode-gitlens/issues/2504) - Graph header theme colors were referencing the titlebar color properties +- Fixes [#2527](https://github.com/gitkraken/vscode-gitlens/issues/2527) - shows added files for Open All Changes +- Fixes [#2530](https://github.com/gitkraken/vscode-gitlens/issues/2530) (potentially) - Error when creating worktrees in certain conditions +- Fixes an issue where trial status can be shown rather than a purchased license + +## [13.3.1] - 2023-02-24 + +### Fixed + +- Fixes graph issue where scroll markers do not update until mouseover when changing the `gitlens.graph.scrollMarkers.additionalTypes` setting. + +## [13.3.0] - 2023-02-23 + +### Added + +- ✨ Adds a preview of the all-new **Focus**, a [GitLens+ feature](https://gitkraken.com/gitlens/pro-features) — provides you with a comprehensive list of all your most important work across your connected GitHub repos: + - My Pull Requests: shows all GitHub PRs opened by you, assigned to you, or awaiting your review + - My Issues: shows all issues created by you, assigned to you, or that mention you + - Open it via _GitLens+: Show Focus_ from the Command Palette +- Adds new _Commit Graph_ features and improvements + - Adds a new experimental minimap of commit activity to the _Commit Graph_ + - Adds a new experimental _Changes_ column visualizing commit changes + - Adds markers to the _Commit Graph_ scroll area indicating the location of the selected row, search results, current branch, upstream, and more + - Adds the ability to show upstream (ahead/behind) status on local branches with an upstream + - Adds a double-click action on the status to pull (when behind) or push (when ahead) pending changes + - Adds context menu actions to _Push_, _Pull_, and _Fetch_ the local branch + - Adds a `gitlens.graph.showUpstreamStatus` setting to toggle upstream (ahead/behind) indicators on branches + - Adds the ability to show any associated pull requests with branches + - Adds a double-click action on the PR icon to open the PR in the browser + - Adds context menu actions to _Open Pull Request on Remote_ and _Copy_ the PR URL + - Adds a `gitlens.graph.pullRequests.enabled` setting to toggle PR icons — closes [#2450](https://github.com/gitkraken/vscode-gitlens/issues/2450) + - Adds a context menu to the WIP row — closes [#2458](https://github.com/gitkraken/vscode-gitlens/issues/2458) + - Adds a double-click action on commit rows to open the _Commit Details_ view + - Improves Author and Avatar tooltips to now also show the contributor's email address, if available + - Improves Date tooltips to now always show both the absolute and relative date +- Adds the ability to copy and share links directly to repositories, branches, commits, and tags in the _Commit Graph_ + - Adds context menu actions to copy direct links in the _Share_ submenu +- Improves the Worktree creation experience + - Adds a prompt after the worktree is created to choose how to open the worktree + - Adds a `worktrees.openAfterCreate` setting to specify how and when to open a worktree after it is created + - Ensures new worktrees are created from the "main" repo, if already in a worktree +- Adds a new _remote_ command to the _Git Command Palette_ to add, prune, and remove remotes +- Adds a _Open Worktree for Pull Request via GitLens..._ context menu command on pull requests in the _GitHub Pull Requests and Issues_ extension's views + - Opens an associated worktree, if one exists, otherwise it creates a new worktree for the pull request +- Adds settings to control the format of commits in the GitLens views + +### Changed + +- Greatly reduces the size of many of GitLens' bundles which improves startup time + - GitLens' extension bundle for desktop (node) is now ~18% smaller (1.91MB -> 1.57MB) + - GitLens' extension bundle for web (vscode.dev/github.dev) is now ~37% smaller (2.05MB -> (1.30MB) + - GitLens' Commit Graph webview bundle is now ~31% smaller (1.03MB -> 734KB) +- Changes the _Contributors_ view to be shown by default on the _GitLens_ sidebar + +### Removed + +- Removes the use of an external color library for the _File Heatmap_ annotations and webview themes — reduces the bundled extension size + +### Fixed + +- Fixes [#2355](https://github.com/gitkraken/vscode-gitlens/issues/2355) - Search by changes stops working in version 13.x.x +- Fixes [#2473](https://github.com/gitkraken/vscode-gitlens/issues/2473) - Commit graph status bar show wrong last fetched date +- Fixes [#2409](https://github.com/gitkraken/vscode-gitlens/issues/2409) - Commit Graph Show Current Branch Only shows unrelated commits from other branches +- Fixes an issue where pinning not being respected in Commit Details view +- Fixes graph issue where search results that are merge commits are not highlighted when the `gitlens.graph.dimMergeCommits` setting is enabled +- Fixes graph issue where rows with tags belonging to a hovered branch are not highlighted when the `gitlens.graph.highlightRowsOnRefHover` setting is enabled + +## [13.2.0] - 2022-12-20 + +### Added + +- Adds many all-new _Commit Graph_ features and improvements + - Adds the ability to filter commits, branches, stashes, and tags + - Adds a new _Filter Graph_ dropdown button at the start of the search bar + - Adds ability to quickly switch between _Show All Local Branches_ and _Show Current Branch Only_ branch filtering options + - _Show All Local Branches_ — displays all local branches (default) + - _Show Current Branch Only_ — displays only the current branch and it's upstream remote (if exists and _Hide Remote Branches_ isn't enabled) + - Adds ability to hide all remote branches, stashes, and tags + - Adds the ability to dim (deemphasize) merge commits + - Adds a new header bar to provide quick access to common actions + - Shows the currently selected repository with the ability to switch repositories when clicked (if multiple repositories are open) + - Shows the current branch with the ability to switch branches when clicked + - Provides a fetch action which also shows the last fetched time + - Also, moves GitLens+ feature status and feedback links to the top right + - Adds new ability to reorder columns by dragging and dropping column headers (not all columns are reorderable) + - Adds new keyboard shortcuts + - Use `shift+down arrow` and `shift+up arrow` to move to the parent/child of the selected commit row + - Holding the `ctrl` key with a commit row selected will highlight rows for that commit's branch + - Adds new settings + - Adds a `gitlens.graph.dimMergeCommits` setting to specify whether to dim (deemphasize) merge commit rows + - Adds a `gitlens.graph.scrollRowPadding` setting to specify the number of rows from the edge at which the graph will scroll when using keyboard or search to change the selected row + +### Changed + +- Increases the delay to highlight associated rows when hovering over a branch to 1s in the _Commit Graph_ + +### Removed + +- Removes the status bar from the _Commit Graph_ as it was replaced by the new header bar + +### Fixed + +- Fixes [#2394](https://github.com/gitkraken/vscode-gitlens/issues/2394) - Work in progress file diff compares working tree with working tree, instead of working tree with head +- Fixes [#2207](https://github.com/gitkraken/vscode-gitlens/issues/2207) - Error when trying to push individual commit +- Fixes [#2301](https://github.com/gitkraken/vscode-gitlens/issues/2301) - Create Worktree button doesn't work in certain cases +- Fixes [#2382](https://github.com/gitkraken/vscode-gitlens/issues/2382) - commits disappearing from commit details view when they shouldn't +- Fixes [#2318](https://github.com/gitkraken/vscode-gitlens/issues/2318) - GitLens need to login again after VS Code insiders upgrade every day +- Fixes [#2377](https://github.com/gitkraken/vscode-gitlens/issues/2377) - Missing Azure Devops Icon +- Fixes [#2380](https://github.com/gitkraken/vscode-gitlens/issues/2380) - Autolink fails with curly braces +- Fixes [#2362](https://github.com/gitkraken/vscode-gitlens/issues/2362) - Visual File History becomes unavailable when the workspace contains private repo +- Fixes [#2381](https://github.com/gitkraken/vscode-gitlens/issues/2381) - can't use scrollbar in 'Commit Graph' view +- Fixes an issue where focusout hides toolbar actions for the graph +- Fixes an issue where _Switch to Another Branch..._ doesn't work in the Graph editor toolbar +- Fixes graph issue with row highlighting/dimming sticking when the graph loses focus +- Fixes graph issue with branches remaining hovered/extended when the mouse leaves the graph + +## [13.1.1] - 2022-11-21 + +### Fixed + +- Fixes [#2354](https://github.com/gitkraken/vscode-gitlens/issues/2354) - 'GitLens: Compare working three with...' Not able to select branch using keyboard +- Fixes [#2359](https://github.com/gitkraken/vscode-gitlens/issues/2359) - rebase view shows 2 user icons even when they're the same + +## [13.1.0] - 2022-11-17 + +### Added + +- Adds _Commit Graph_ enhancements + - Adds the ability to set keyboard shortcuts to commits and stashes on the _Commit Graph_ — closes [#2345](https://github.com/gitkraken/vscode-gitlens/issues/2345) + - Keyboard shortcuts can be applied to many of the `gitlens.graph.*` commands and should use `gitlens:webview:graph:focus && !gitlens:webview:graph:inputFocus` for their "When Expression" to only apply when the _Commit Graph_ is focused + - For example, add the following to your `keybindings.json` to allow Ctrl+C to copy the selected commit's SHA to the clipboard + ```json + { + "key": "ctrl+c", + "command": "gitlens.graph.copySha", + "when": "gitlens:webview:graph:focus && !gitlens:webview:graph:inputFocus" + } + ``` + - Automatically selects the `HEAD` commit in the _Commit Graph_ when switching branches + - Improves performance of updating the _Commit Graph_ when the repository changes + - Improves performance by avoiding unnecessary updates to the _Commit Details_ view when selection changes + - Adds a `@me` search filter to the search box + - Adds history navigation to the search box in the _Commit Graph_ + - When the search field is focused, use the `up arrow` and `down arrow` to navigate through any previous searches that yielded results + - Adds ability to reset to any commit in the _Commit Graph_ and GitLens views — closes [#2326](https://github.com/gitkraken/vscode-gitlens/issues/2326) +- Adds _Interactive Rebase Editor_ performance and UX improvements + - Changes the header and footer to always be visible + - Shows the _Commit Details_ view on commit selection + - Adds a `gitlens.rebaseEditor.showDetailsView` setting to specify when to show the _Commit Details_ view for the selected row in the _Interactive Rebase Editor_ + - Adds full (multiline) commit message + - Adds the `f` fixup shortcut key to UI + - Consolidates the UI for author and committer information into a stack of avatars + - Adds emoji support for commit messages — closes [#1789](https://github.com/gitkraken/vscode-gitlens/issues/1789) + - Ensures that large rebases show rich commit details +- Adds _Commit Details_ view improvements + - Adds custom and non-rich integration-based autolinks and improves autolink display + - Improves performance by avoiding unnecessary updates + - Avoids "pinning" commits by default when opened from the _Commit Graph_, _Visual File History_, quick picks, etc + - Adds a _Open in Commit Graph_ button even when showing uncommitted changes +- Adds new sections and settings to the GitLens Interactive Settings + - Adds a new _Commit Details_ view section + - Adds a new _Terminal Links_ section + - Adds autolink configuration to the _Hovers_ section +- Adds a `@me` search filter to commit search in the _Search & Compare_ view and quick pick +- Adds product usage telemetry + - Honors the overall VS Code telemetry settings and add a `gitlens.telemetry.enabled` setting opt-out specifically for GitLens + +### Changed + +- Changes the _Home_ view to always be available and polishes the experience +- Changes SHA terminal links to use the _Commit Details_ view — closes [#2320](https://github.com/gitkraken/vscode-gitlens/issues/2320) + - Adds a `gitlens.terminalLinks.showDetailsView` setting to specify whether to show the _Commit Details_ view when clicking on a commit link +- Changes to uses VS Code as Git's `core.editor` for terminal run commands — closes [#2134](https://github.com/gitkraken/vscode-gitlens/issues/2134) thanks to [PR [#2135](https://github.com/gitkraken/vscode-gitlens/issues/2135)](https://github.com/gitkraken/vscode-gitlens/pull/2135) by Nafiur Rahman Khadem ([@ShafinKhadem](https://github.com/ShafinKhadem)) + - Adds a `gitlens.terminal.overrideGitEditor` setting to specify whether to use VS Code as Git's `core.editor` for GitLens terminal commands +- Polishes webview (_Commit Graph_, _Interactive Rebase Editor_, etc) scroll bars to match VS Code's style and behavior + +### Fixed + +- Fixes [#2339](https://github.com/gitkraken/vscode-gitlens/issues/2339) - Commit details "Autolinks" group shows wrong count +- Fixes [#2346](https://github.com/gitkraken/vscode-gitlens/issues/2346) - Multiple cursors on the same line duplicate inline annotations — thanks to [PR [#2347](https://github.com/gitkraken/vscode-gitlens/issues/2347)](https://github.com/gitkraken/vscode-gitlens/pull/2347) by Yonatan Greenfeld ([@YonatanGreenfeld](https://github.com/YonatanGreenfeld)) +- Fixes [#2344](https://github.com/gitkraken/vscode-gitlens/issues/2344) - copying abbreviated commit SHAs is not working +- Fixes [#2342](https://github.com/gitkraken/vscode-gitlens/issues/2342) - Local remotes are incorrectly treated as private +- Fixes [#2052](https://github.com/gitkraken/vscode-gitlens/issues/2052) - Interactive Rebase fails to start when using xonsh shell due to command quoting +- Fixes [#2141](https://github.com/gitkraken/vscode-gitlens/issues/2141) - GitLens' rebase UI randomly fails loading interactive rebase when performed outside of VSC +- Fixes [#1732](https://github.com/gitkraken/vscode-gitlens/issues/1732) - Phantom rebase-merge directory (`rm -rf ".git/rebase-merge"`) +- Fixes [#1652](https://github.com/gitkraken/vscode-gitlens/issues/1652) - Closing interactive rebase editor after "git rebase --edit" aborts rebase-in-progress +- Fixes [#1549](https://github.com/gitkraken/vscode-gitlens/issues/1549) - Fetch does not work when local branch name differs from remote branch name +- Fixes [#2292](https://github.com/gitkraken/vscode-gitlens/issues/2292) - Push button in BranchTrackingStatusNode of non-current branch does not trigger "Push force" +- Fixes [#1488](https://github.com/gitkraken/vscode-gitlens/issues/1488) - Open Folder History not working with non-English language pack +- Fixes [#2303](https://github.com/gitkraken/vscode-gitlens/issues/2303) - "Googlesource" gerrit only supports two levels of domain — thanks to [PR [#2304](https://github.com/gitkraken/vscode-gitlens/issues/2304)](https://github.com/gitkraken/vscode-gitlens/pull/2304) by Matt Buckley ([@Mattadore](https://github.com/Mattadore)) +- Fixes [#2315](https://github.com/gitkraken/vscode-gitlens/issues/2315) - Commit details secondary side bar banner doesn't stay dismissed +- Fixes [#2329](https://github.com/gitkraken/vscode-gitlens/issues/2329) - Remember UI settings in Commit Details panel +- Fixes [#1606](https://github.com/gitkraken/vscode-gitlens/issues/1606) - Adjusts capitalization of "URL" — thanks to [PR [#2341](https://github.com/gitkraken/vscode-gitlens/issues/2341)](https://github.com/gitkraken/vscode-gitlens/pull/2341) by Dave Nicolson ([@dnicolson](https://github.com/dnicolson)) +- Fixes issue where we weren't honoring the default gravatar style (`gitlens.defaultGravatarsStyle`) in certain cases +- Fixes graph issue where stashes are sometimes assigned the wrong column +- Fixes graph issue with commit rows being incorrectly hidden in some cases +- Fixes graph issue with merge commits not being hidden correctly in some cases +- Fixes some graph issues with hover on branch/tag labels + +## [13.0.4] - 2022-11-03 + +### Fixed + +- Fixes [#2298](https://github.com/gitkraken/vscode-gitlens/issues/2298) - Commit Graph does not update to current branch correctly +- Fixes [#2300](https://github.com/gitkraken/vscode-gitlens/issues/2300) - extra non-functional toolbar buttons when viewing PR diffs in VSCode web +- Fixes [#2281](https://github.com/gitkraken/vscode-gitlens/issues/2281) - Push and Pull buttons missing from the commits view w/ integrations disabled +- Fixes [#2276](https://github.com/gitkraken/vscode-gitlens/issues/2276) - Search commit by Sha not working in Gitlens side bar +- Fixes issues with PR uris (scheme: `pr`) from not working properly, especially with virtual repositories + +## [13.0.3] - 2022-10-20 + +### Added + +- Adds a banner to the _Commit Details_ view to let users know they can move the view to the Secondary Side Bar + +### Changed + +- Changes the _Commit Graph_ settings for improved clarity and ordering + +### Fixed + +- Fixes [#2271](https://github.com/gitkraken/vscode-gitlens/issues/2271) - Terminal commands should wrap path with quote to deal with path contains space +- Fixes an issue where the _Commit Details_ view fails to show the full commit message and changed files when following editor lines + +## [13.0.2] - 2022-10-17 + +### Added + +- ✨ All GitLens+ features on public and local repos are now available to everyone — no account required! + - We are excited to bring the power of GitLens+ features to more people without gates +- ✨ Commit Graph is out of preview! + - Contextual right-click menus with popular actions for commits, branches, tags, and authors + - Double-click on a branch or tag to quickly switch your working tree to it + - Rich search features to find exactly what you're looking for: + - Powerful filters to search by commit, message, author, a changed file or files, or even a specific code change + - Searches look at ALL commits in a repository, not just what's shown in the graph + - PR support for connected rich integrations (GitHub/GitLab) + - Significant performance improvements when opening the graph and loading in additional commits + - Personalization of your graph experience + - Show and hide remotes, branches, tags, and columns + - Settings UI for easy fine-grain control over advanced settings + - And so much more! +- Adds an all-new GitLens _Home_ view to help you get started with GitLens and GitLens+ features +- Adds autolinks and improves formatting of the commit message in the _Commit Details_ view +- Adds `View as Tree` toggle option for changed files in the _Commit Details_ view +- Adds an `Open in Commit Graph` action to branches, commits, stashes, and tags in GitLens views, hovers, and commit quick pick menus +- Adds a `Reveal in Side Bar` action to hovers + +### Changed + +- Changes the `Show Commit` action in the hovers to `Open Details` and opens the _Commit Details_ view + +### Fixed + +- Fixes [#2203](https://github.com/gitkraken/vscode-gitlens/issues/2203) - Autolinks missing under commit details +- Fixes [#2230](https://github.com/gitkraken/vscode-gitlens/issues/2230) - j and k are inverted in ascending rebase order +- Fixes [#2195](https://github.com/gitkraken/vscode-gitlens/issues/2195) - Cannot open new files from commit details +- Fixes Commit Details view showing incorrect diffs for certain commits +- Fixes Commit Details view showing incorrect actions for uncommitted changes +- Fixes prioritization of multiple PRs associated with the same commit to choose a merged PR over others +- Fixes Graph not showing account banners when access is not allowed and trial banners were previously dismissed + +## [12.2.2] - 2022-09-06 + +### Fixed + +- Fixes [#2177](https://github.com/gitkraken/vscode-gitlens/issues/2177) - Open Changes action unresponsive in Source Control view +- Fixes [#2185](https://github.com/gitkraken/vscode-gitlens/issues/2185) - Commits view files are sometimes not shown when expanding folders +- Fixes [#2180](https://github.com/gitkraken/vscode-gitlens/issues/2180) - Tree files view of commits is broken +- Fixes [#2187](https://github.com/gitkraken/vscode-gitlens/issues/2187) - scm/title commands shown against non-Git SCM providers — thanks to [PR [#2186](https://github.com/gitkraken/vscode-gitlens/issues/2186)](https://github.com/gitkraken/vscode-gitlens/pull/2186) by Matt Seddon ([@mattseddon](https://github.com/mattseddon)) + +## [12.2.1] - 2022-09-01 + +### Fixed + +- Fixes [#2185](https://github.com/gitkraken/vscode-gitlens/issues/2185) - Commits view files are sometimes not shown when expanding folders +- Fixes [#2180](https://github.com/gitkraken/vscode-gitlens/issues/2180) - Tree files view of commits is broken +- Fixes [#2179](https://github.com/gitkraken/vscode-gitlens/issues/2179) - Commit Graph content not displayed +- Fixes regression with _Contributors_ view not working + +## [12.2.0] - 2022-08-30 + +### Added + +- ✨ Adds an all-new [**Commit Graph**](https://github.com/gitkraken/vscode-gitlens#commit-graph-), a [GitLens+ feature](https://gitkraken.com/gitlens/pro-features) — helps you to easily visualize branch structure and commit history. Not only does it help you verify your changes, but also easily see changes made by others and when + ![Commit Graph illustration](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/commit-graph-illustrated.png) +- Adds a [**Commit Details view**](https://github.com/gitkraken/vscode-gitlens#commit-details-view-) — provides rich details for commits and stashes + - Contextually updates as you navigate: + - lines in the text editor + - commits in the _Commit Graph_, _Visual File History_, or _Commits_ view + - stashes in the _Stashes_ view + - Alternatively, you can search for or choose a commit directly from the view +- ✨ Adds [**rich integration**](https://github.com/gitkraken/vscode-gitlens#remote-provider-integrations-) with GitHub Enterprise — closes [#1210](https://github.com/gitkraken/vscode-gitlens/issues/1210) + - Adds associated pull request to line annotations and hovers + ![Pull requests on line annotation and hovers](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/hovers-current-line-details.png) + - Adds associated pull request to status bar blame + ![Pull requests on status bar](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/status-bar.png) + - Adds GitHub avatars + - Adds associated pull requests to branches and commits in GitLens views + - Adds rich autolinks for GitHub issues and merge requests, including titles, status, and authors + - Adds rich support to _Autolinked Issues and Pull Requests_ within comparisons to list autolinked GitHub issues and merge requests in commit messages +- Adds new stash behaviors to use the Source Control (commit message) input box — closes [#2081](https://github.com/gitkraken/vscode-gitlens/issues/2081) + - When a stash is applied or popped and the Source Control input is empty, we will now update the Source Control input to the stash message + - When stashing changes and the Source Control input is not empty, we will now default the stash message input to the Source Control input value +- Adds the ability to search (/ or Ctrl+F) for text on the Interactive Rebase Editor — closes [#2050](https://github.com/gitkraken/vscode-gitlens/issues/2050) +- Adds stats (additions & deletions) to files nodes in comparisons — closes [#2078](https://github.com/gitkraken/vscode-gitlens/issues/2078) thanks to help via [PR [#2079](https://github.com/gitkraken/vscode-gitlens/issues/2079)](https://github.com/gitkraken/vscode-gitlens/pull/2079) by Nafiur Rahman Khadem ([@ShafinKhadem](https://github.com/ShafinKhadem)) +- Adds the ability to uniquely format uncommitted changes for the current line blame annotations — closes [#1987](https://github.com/gitkraken/vscode-gitlens/issues/1987) + - Adds a `gitlens.currentLine.uncommittedChangesFormat` setting to specify the uncommitted changes format of the current line blame annotation. **NOTE**: Setting this to an empty string will disable current line blame annotations for uncommitted changes +- Adds variable expansion support to the `gitlens.worktrees.defaultLocation` setting + - `${userHome}` — the path of the user's home folder + - `${workspaceFolder}` — the path of the folder opened in VS Code containing the specified repository + - `${workspaceFolderBasename}` — the name of the folder opened in VS Code containing the specified repository without any slashes (/) +- Adds owner avatars to remotes in the _Remotes_ view for GitHub remotes + +### Changed + +- Greatly improves performance of many view interactions when connected to a rich integration and pull request details are enabled, including: + - Showing and refreshing the _Commits_ view + - Expanding commits, branches, and worktrees +- Remembers chosen filter on files nodes in comparisons when refreshing +- Changes display of filtered state of files nodes in comparisons +- Improves diff stat parsing performance and reduced memory usage +- Disallows comparisons with the working tree on the right-side (left-side still works as expected) and disables swapping +- Uses VS Code as `core.editor` in rebase — closes [#2084](https://github.com/gitkraken/vscode-gitlens/issues/2084) thanks to [PR [#2085](https://github.com/gitkraken/vscode-gitlens/issues/2085)](https://github.com/gitkraken/vscode-gitlens/pull/2085) by Nafiur Rahman Khadem ([@ShafinKhadem](https://github.com/ShafinKhadem)) + +### Fixed + +- Fixes [#2017](https://github.com/gitkraken/vscode-gitlens/issues/2017) - Gitlens+ pro keeps signing out +- Fixes [#1935](https://github.com/gitkraken/vscode-gitlens/issues/1935) - Constant prompt "Your github credentials do not have the required access" +- Fixes [#2067](https://github.com/gitkraken/vscode-gitlens/issues/2067) - Your 'github' credentials are either invalid or expired +- Fixes [#2167](https://github.com/gitkraken/vscode-gitlens/issues/2167) - Rollup diff between working tree and fetched remote doesn't show changes +- Fixes [#2166](https://github.com/gitkraken/vscode-gitlens/issues/2166) - Don't always prompt for GitHub authentication on virtual repositories +- Fixes [#2156](https://github.com/gitkraken/vscode-gitlens/issues/2156) - Reduce extension package size +- Fixes [#2136](https://github.com/gitkraken/vscode-gitlens/issues/2136) - Search & Compare quickpick shouldn't select the mode text when opening +- Fixes [#1896](https://github.com/gitkraken/vscode-gitlens/issues/1896) - Cannot read property 'fsPath' of undefined +- Fixes [#1550](https://github.com/gitkraken/vscode-gitlens/issues/1550) - Push button in commit widget does not trigger "Push force" when ALT is pressed. +- Fixes [#1991](https://github.com/gitkraken/vscode-gitlens/issues/1991) - Git lens status bar entry has an incomprehensible accessibility label +- Fixes [#2125](https://github.com/gitkraken/vscode-gitlens/issues/2125) - "git log" command in version 12.x is very slow +- Fixes [#2121](https://github.com/gitkraken/vscode-gitlens/issues/2121) - Typo in GitLens header — thanks to [PR [#2122](https://github.com/gitkraken/vscode-gitlens/issues/2122)](https://github.com/gitkraken/vscode-gitlens/pull/2122) by Chase Knowlden ([@ChaseKnowlden](https://github.com/ChaseKnowlden)) +- Fixes [#2082](https://github.com/gitkraken/vscode-gitlens/issues/2082) - GitLens Home view unreadable in certain themes +- Fixes [#2070](https://github.com/gitkraken/vscode-gitlens/issues/2070) - Quoted HTML / JSX syntax is not escaped correctly +- Fixes [#2069](https://github.com/gitkraken/vscode-gitlens/issues/2069) - Heatmap - incorrect behavior of gitlens.heatmap.fadeLines with gitlens.heatmap.ageThreshold +- Fixes an issue where choosing "Hide Current Branch Pull Request" from the _Commits_ view overflow menu wouldn't hide the PR node +- Fixes an issue where stashes without a message aren't displayed properly +- Fixes an issue where the _Stashes_ view empty state isn't displayed properly when there are no stashes +- Fixes typos via [PR [#2086](https://github.com/gitkraken/vscode-gitlens/issues/2086)](https://github.com/gitkraken/vscode-gitlens/pull/2086) by stampyzfanz ([@stampyzfanz](https://github.com/stampyzfanz)), and [PR [#2043](https://github.com/gitkraken/vscode-gitlens/issues/2043)](https://github.com/gitkraken/vscode-gitlens/pull/2043), [PR [#2040](https://github.com/gitkraken/vscode-gitlens/issues/2040)](https://github.com/gitkraken/vscode-gitlens/pull/2040), [PR [#2042](https://github.com/gitkraken/vscode-gitlens/issues/2042)](https://github.com/gitkraken/vscode-gitlens/pull/2042) by jogo- ([@jogo-](https://github.com/jogo-)) + +## [12.1.2] - 2022-07-12 + +### Fixed + +- Fixes [#2048](https://github.com/gitkraken/vscode-gitlens/issues/2048) - Gitlens not loading in vscode.dev + +## [12.1.1] - 2022-06-16 + +### Added + +- Adds getting started tutorial video to the Welcome, Get Started walkthrough, GitLens Home view, and README + +### Fixed + +- Fixes [#2037](https://github.com/gitkraken/vscode-gitlens/issues/2037) - Autolinks can end up getting saved with invalid (cached) properties + +## [12.1.0] - 2022-06-14 + +### Added + +- ✨ Adds [**rich integration**](https://github.com/gitkraken/vscode-gitlens#remote-provider-integrations-) with GitLab and GitLab self-managed instances — closes [#1236](https://github.com/gitkraken/vscode-gitlens/issues/1236) + - Adds associated pull request to line annotations and hovers + ![Pull requests on line annotation and hovers](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/hovers-current-line-details.png) + - Adds associated pull request to status bar blame + ![Pull requests on status bar](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/status-bar.png) + - Adds GitLab avatars + - Adds associated pull requests to branches and commits in GitLens views + - Adds rich autolinks for GitLab issues and merge requests, including titles, status, and authors + - Adds rich support to _Autolinked Issues and Pull Requests_ within comparisons to list autolinked GitLab issues and merge requests in commit messages + - Additional thanks to Kevin Paxton ([kpaxton](https://github.com/kpaxton)) for help and contributions on this feature +- Adds editor line highlighting and code fading (dimming) to the _File Heatmap_ annotations to make it easier to tell recent vs old lines of code + - Adds a `line` option to `gitlens.heatmap.locations` setting to specify whether to add a line highlight to the _File Heatmap_ annotations + - Adds a `gitlens.heatmap.fadeLines` setting to specify whether to fade out older lines when showing the _File Heatmap_ annotations +- Adds editor line highlighting to the _File Changes_ annotations for easier discovery of the added or changed lines + - Adds a `line` option to `gitlens.changes.locations` setting to specify whether to add a line highlight to the _File Changes_ annotations +- Adds "vanilla" [Gerrit](https://www.gerritcodereview.com/) remote provider support — closes [#1953](https://github.com/gitkraken/vscode-gitlens/issues/1953) thanks to [PR [#1954](https://github.com/gitkraken/vscode-gitlens/issues/1954)](https://github.com/gitkraken/vscode-gitlens/pull/1954) by Felipe Santos ([@felipecrs](https://github.com/felipecrs)) +- Adds "Oldest first" toggle to Interactive Rebase — closes [#1190](https://github.com/gitkraken/vscode-gitlens/issues/1190) + - Adds a `gitlens.rebaseEditor.ordering` setting to specify how Git commits are displayed in the _Interactive Rebase Editor_ +- Adds new and improved Autolink support + - Adds an _Autolinks_ section in the _GitLens Settings Editor_ to visually add and update autolink entries — closes [#1315](https://github.com/gitkraken/vscode-gitlens/issues/1315) + - Adds improved support to _Autolinked Issues and Pull Requests_ within comparisons to list autolinked issues in commit messages + - You can now see all autolinks found in the commits in the comparison regardless of whether it's a provider-based autolink or a custom (user-provided) autolink +- Adds _Open Current Branch on Remote_ to the Command Palette — closes [#1718](https://github.com/gitkraken/vscode-gitlens/issues/1718) + +### Changed + +- Improves how stashes are shown in the _Stashes_ view by separating the associated branch from the stash message — closes [#1523](https://github.com/gitkraken/vscode-gitlens/issues/1523) +- Changes previous Gerrit remote support to Google Source remote support — thanks to [PR [#1954](https://github.com/gitkraken/vscode-gitlens/issues/1954)](https://github.com/gitkraken/vscode-gitlens/pull/1954) by Felipe Santos ([@felipecrs](https://github.com/felipecrs)) +- Renames "Gutter Blame" annotations to "File Blame" +- Renames "Gutter Changes" annotations to "File Changes" +- Renames "Gutter Heatmap" annotations to "File Heatmap" + +### Fixed + +- Fixes [#2033](https://github.com/gitkraken/vscode-gitlens/issues/2033) - Diffing, applying, and restoring untracked files in a stash doesn't work +- Fixes [#2028](https://github.com/gitkraken/vscode-gitlens/issues/2028) - Branch names with special characters '<' also causes errors on the command line — thanks to [PR [#2030](https://github.com/gitkraken/vscode-gitlens/issues/2030)](https://github.com/gitkraken/vscode-gitlens/pull/2030) by mcy-kylin ([@mcy-kylin](https://github.com/mcy-kylin)) +- Fixes [#2028](https://github.com/gitkraken/vscode-gitlens/issues/2028) - Branch names with special characters like ';$|>' causes errors on the command line (terminal executed git commands) +- Fixes [#2021](https://github.com/gitkraken/vscode-gitlens/issues/2021) - GitLab remote provider uses legacy routes — thanks to [PR [#2022](https://github.com/gitkraken/vscode-gitlens/issues/2022)](https://github.com/gitkraken/vscode-gitlens/pull/2022) by Brian Williams ([@Brcrwilliams](https://github.com/Brcrwilliams)) +- Fixes [#1998](https://github.com/gitkraken/vscode-gitlens/issues/1998) - Settings: time format reads 'Example date' instead of 'Example time' — thanks to [PR [#1999](https://github.com/gitkraken/vscode-gitlens/issues/1999)](https://github.com/gitkraken/vscode-gitlens/pull/1999) by Barney Carroll ([@barneycarroll](https://github.com/barneycarroll)) +- Fixes [#2012](https://github.com/gitkraken/vscode-gitlens/issues/2012) - 'Gitlens: Open Changes with Revision...' results in error +- Fixes [#2014](https://github.com/gitkraken/vscode-gitlens/issues/2014) - '#' encoded incorrectly +- Fixes [#1787](https://github.com/gitkraken/vscode-gitlens/issues/1787) - Remove '-review' from Gerrit Remote reviewDomain() — thanks to [PR [#1954](https://github.com/gitkraken/vscode-gitlens/issues/1954)](https://github.com/gitkraken/vscode-gitlens/pull/1954) by Felipe Santos ([@felipecrs](https://github.com/felipecrs)) +- Fixes [#1902](https://github.com/gitkraken/vscode-gitlens/issues/1902) - Support replacing mirror/replica domain with main domain for remote provider — thanks to [PR [#1954](https://github.com/gitkraken/vscode-gitlens/issues/1954)](https://github.com/gitkraken/vscode-gitlens/pull/1954) by Felipe Santos ([@felipecrs](https://github.com/felipecrs)) + +## [12.0.7] - 2022-05-25 + +### Fixed + +- Fixes [#1979](https://github.com/gitkraken/vscode-gitlens/issues/1979) - GitLens stopped working in v12.0.0 and later +- Fixes [#1882](https://github.com/gitkraken/vscode-gitlens/issues/1882) - Blame annotations not showing anymore after update +- Fixes [#1776](https://github.com/gitkraken/vscode-gitlens/issues/1776) - Can't follow symlinks +- Fixes [#2000](https://github.com/gitkraken/vscode-gitlens/issues/2000) - File Changes annotations fail to display in certain cases +- Fixes [#1936](https://github.com/gitkraken/vscode-gitlens/issues/1936) - Broken repositories view +- Fixes an issue where commit messages in views incorrectly had ellipsis at the end +- Fixes an issue where clicking on tokens on the Settings editor popup wouldn't add the token into the input + +## [12.0.6] - 2022-04-12 + +### Fixed + +- Fixes [#1928](https://github.com/gitkraken/vscode-gitlens/issues/1928) - Unable to get absolute uri between ex.txt and z:; Base path 'z:' must be an absolute path — thanks to [PR [#1929](https://github.com/gitkraken/vscode-gitlens/issues/1929)](https://github.com/gitkraken/vscode-gitlens/pull/1929) by Ross Smith II ([@rasa](https://github.com/rasa)) +- Fixes [#1932](https://github.com/gitkraken/vscode-gitlens/issues/1932) - Pull request autolink doesn't work for Bitbucket Server 7 — thanks to [PR [#1933](https://github.com/gitkraken/vscode-gitlens/issues/1933)](https://github.com/gitkraken/vscode-gitlens/pull/1933) by Sam Martin ([@smartinio](https://github.com/smartinio)) +- Fixes [#1938](https://github.com/gitkraken/vscode-gitlens/issues/1938) - Git CodeLens causes line jumping on new virtual files +- Fixes [#1925](https://github.com/gitkraken/vscode-gitlens/issues/1925) - Branches from remotes outside the repo aren't showing associated pull requests (for connected remotes) +- Fixes [#1920](https://github.com/gitkraken/vscode-gitlens/issues/1920) - Can't view tags on torvalds/linux +- Fixes [#1923](https://github.com/gitkraken/vscode-gitlens/issues/1923) - View titles fail to update properly when number of "opened" repos changes +- Fixes smooth scrolling and TOC jumping issues on the GitLens Interactive Settings + +## [12.0.5] - 2022-03-17 + +### Changed + +- Changes the current line blame hover to show at the cursor, rather than the start of the line, when showing the hover over the whole line (e.g. line & annotation) +- Changes [**_Gutter Changes_**](https://github.com/gitkraken/vscode-gitlens#gutter-changes-) file annotations to be theme-aware +- Changes to honor the new(ish) `git.repositoryScanMaxDepth` setting if the `gitlens.advanced.repositorySearchDepth` setting isn't specified + +### Fixed + +- Fixes [#1909](https://github.com/gitkraken/vscode-gitlens/issues/1909) - Should still "detect" repos directly in the workspace folder(s) even if `git.autoRepositoryDetection` is `false` +- Fixes [#1829](https://github.com/gitkraken/vscode-gitlens/issues/1829) - Reduce re-rendering by disabling animation in blame info in the status bar +- Fixes [#1864](https://github.com/gitkraken/vscode-gitlens/issues/1864) - Worktrees fail to load in working path with spaces +- Fixes [#1881](https://github.com/gitkraken/vscode-gitlens/issues/1881) - Worktrees icon is very small +- Fixes [#1898](https://github.com/gitkraken/vscode-gitlens/issues/1898) - Hovers display old Gravatar — thanks to [PR [#1899](https://github.com/gitkraken/vscode-gitlens/issues/1899)](https://github.com/gitkraken/vscode-gitlens/pull/1899) by Leo Dan Peña ([@amouxaden](https://github.com/amouxaden)) +- Fixes an issue where the [**_Gutter Changes_**](https://github.com/gitkraken/vscode-gitlens#gutter-changes-) file annotations could be rendered on the wrong lines in certain cases + +## [12.0.4] - 2022-03-10 + +### Added + +- Adds ability to paste in an authorization URL to complete a GitLens+ sign in + +### Fixed + +- Fixes [#1888](https://github.com/gitkraken/vscode-gitlens/issues/1888) - Gitlens breaks vscode auto repository detection settings +- Fixes an issue where the Visual File History wasn't correctly opening the commit file details quick pick menu +- Fixes an issue where the _Open Visual File History of Active File_ command wasn't showing in the Command Palette + +## [12.0.3] - 2022-03-10 + +### Fixed + +- Fixes [#1897](https://github.com/gitkraken/vscode-gitlens/issues/1897) - Repeated GitHub errors when offline + +## [12.0.2] - 2022-03-09 + +### Added + +- Adds proxy support to network requests + - By default, uses a proxy configuration based on VS Code settings or OS configuration + - Adds a `gitlens.proxy` setting to specify a GitLens specific proxy configuration + +### Changed + +- Changes local repositories to be considered public rather than private for GitLens+ features (so only a free account would be required) +- Changes relative dates >= 1 year but < 2 years to be shown in months for better granularity - related to [#1546](https://github.com/gitkraken/vscode-gitlens/issues/1546) + +### Fixed + +- Fixes [#1895](https://github.com/gitkraken/vscode-gitlens/issues/1895) - Honor defaultDateShortFormat setting on Visual File History +- Fixes [#1890](https://github.com/gitkraken/vscode-gitlens/issues/1890) - can no longer see untracked files in stashes + +## [12.0.1] - 2022-03-03 + +### Added + +- Adds `gitlens.defaultDateFormat` setting to specify the locale, a [BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag#List_of_major_primary_language_subtags), to use for date formatting + +### Changed + +- Removes dependency on GitKraken Authentication extension +- Changes date formatting to follow the VS Code language locale by default +- Changes framing of premium features into GitLens+ +- Changes repository naming to better reflect its folder name, related to [#1854](https://github.com/gitkraken/vscode-gitlens/issues/1854) + +### Fixed + +- Fixes [#2117](https://github.com/gitkraken/vscode-gitlens/issues/2117) - Gitlens freaks out when I'm off VPN +- Fixes [#1859](https://github.com/gitkraken/vscode-gitlens/issues/1859) - GitLens dates use system locale instead of vscode language setting +- Fixes [#1854](https://github.com/gitkraken/vscode-gitlens/issues/1854) - All repos have the same name +- Fixes [#1866](https://github.com/gitkraken/vscode-gitlens/issues/1866) - Copy SHA and Copy Message don't work from the views (commits, branches, etc) +- Fixes [#1865](https://github.com/gitkraken/vscode-gitlens/issues/1865) - Value shortOffset out of range for Intl.DateTimeFormat options property timeZoneName +- Fixes [#1742](https://github.com/gitkraken/vscode-gitlens/issues/1742) - New file lines keep jumping down +- Fixes [#1846](https://github.com/gitkraken/vscode-gitlens/issues/1846) - Restoring (checkout) a deleted file from a commit doesn't work +- Fixes [#1844](https://github.com/gitkraken/vscode-gitlens/issues/1844) - Autolinked issues aren't properly paged when there are too many commits +- Fixes [#1843](https://github.com/gitkraken/vscode-gitlens/issues/1843) - Compare references doesn't work if you have multiple repos open + +## [12.0.0] - 2022-02-28 + +### Added + +- Adds (preview) VS Code for Web support! + - Get the power and insights of GitLens for any GitHub repository directly in your browser on vscode.dev or github.dev +- Introducing GitLens+ features — [learn about GitLens+ features](https://gitkraken.com/gitlens/pro-features) + - GitLens+ adds all-new, completely optional, features that enhance your current GitLens experience when you sign in with a free account. A free GitLens+ account gives you access to these new GitLens+ features on local and public repos, while a paid account allows you to use them on private repos. All other GitLens features will continue to be free without an account, so you won't lose access to any of the GitLens features you know and love, EVER. + - Visual File History — a visual way to analyze and explore changes to a file + - The Visual File History allows you to quickly see the evolution of a file, including when changes were made, how large they were, and who made them + + ![Visual File History view](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/visual-file-history-illustrated.png) + + - Worktrees — allow multiple branches to be checked-out at once + - Worktrees allow you to easily work on different branches of a repository simultaneously. You can create multiple working trees, each of which can be opened in individual windows or all together in a single workspace + + ![Worktrees view](https://raw.githubusercontent.com/gitkraken/vscode-gitlens/main/images/docs/worktrees-illustrated.png) + +- Adds a new GitLens Home view — see welcome content, help resources, and subscription information +- Adds a _Get Started with GitLens_ walkthrough to introduce new (and existing) users to many of the powerful features of GitLens — try it via _GitLens: Get Started_ from the Command Palette +- Adds a new _Autolinked Issues and Pull Requests_ node to comparisons to list autolinked issues and pull requests in commit messages to quickly see all the issues fixed in a release and more + - Currently only supported for connected GitHub remote providers +- Adds the ability to choose a stash when opening or comparing file revisions, via the _Open Changes with Revision..._ & _Open File at Revision..._ commands +- Adds improved hover information, including status and color-coding, shown on pull requests in the GitLens views +- Adds a `gitlens.codeLens.dateFormat` setting to specify how to format absolute dates in the Git CodeLens +- Adds an easier method to choose a specific commit to the _Git Command Palette_'s _merge_ & _rebase_ commands +- Adds a new commit format token: `${link}` + +### Changed + +- Completely refactors the internals of GitLens into a new flexible Git provider model to allow GitLens to work on the web and in virtual environments like vscode.dev and github.dev +- Improves the user experience of the commit details and file details quick pick menus + - Commands are now grouped and easier to understand and access — thanks to Tyler Leonhardt ([@tylerLeonhardt](https://github.com/tylerLeonhardt)) on the VS Code team for the quick pick API additions +- Improves performance and reduces latency across many workflows +- Improves startup performance on previously opened workspaces by remembering details from the last time the workspace was opened +- Improves performance of the all GitLens webviews, most noticeable on the GitLens settings editor +- Improves GitLens view refreshing when folders are added or removed from a workspace +- Changes the icon of the _Open Changes_ action on the hovers to be clearer +- Changes footnotes in hovers to be above the command bar rather than below +- Reworks many internal Git parsers to reduce memory usage and improve performance + +### Fixed + +- Fixes [#1818](https://github.com/gitkraken/vscode-gitlens/issues/1818) - Ambiguous error message on GitHub authentication errors +- Fixes [#1645](https://github.com/gitkraken/vscode-gitlens/issues/1645) - Possible catastrophic backtracking with large inputs +- Fixes [#1506](https://github.com/gitkraken/vscode-gitlens/issues/1506) - Annoying Github login request +- Fixes [#1735](https://github.com/gitkraken/vscode-gitlens/issues/1735) - "gitlens.hovers.detailsMarkdownFormat" edit error +- Fixes [#1745](https://github.com/gitkraken/vscode-gitlens/issues/1745) - autolinks.url encodes hash char +- Fixes [#1572](https://github.com/gitkraken/vscode-gitlens/issues/1572) - Forced regular expression search in changes +- Fixes [#1473](https://github.com/gitkraken/vscode-gitlens/issues/1473) - Support VSCodium in interactive rebase editor +- Fixes [#1699](https://github.com/gitkraken/vscode-gitlens/issues/1699) - Exception has occurred: RangeError [ERR_OUT_OF_RANGE] +- Fixes [#1601](https://github.com/gitkraken/vscode-gitlens/issues/1601) - Add a better time sample in "Dates & Times" setting +- Fixes performance issue with the rich hover on the status bar blame +- Fixes cross repository branch switching via the _Git Command Palette_ +- Fixes an issue with TOC entries in the VS Code settings editor +- Fixes issues using quotes when searching for commits in certain scenarios +- Fixes issues when revealing items in GitLens views the item wouldn't get selected properly +- Fixes issues with retries on _Git Command Palette_ command steps +- Fixes code splitting issue where GitHub support wasn't split out of the main bundle for better loading performance +- Fixes issue with quotes and commit search +- Fixes a leaked disposable on cancellable promises + +## [11.7.0] - 2021-11-18 + +### Added + +- Adds a new rich commit details hover to the blame information in the status bar + - Adds a `gitlens.statusBar.tooltipFormat` setting to specify the format (in markdown) of hover shown over the blame information in the status bar +- Adds a new rich hover to the GitLens mode in the status bar +- Adds functional groupings to all GitLens settings when using the VS Code settings UI. Groups will be displayed in the table of contents in the settings UI — thanks to Raymond Zhao ([@rzhao271](https://github.com/rzhao271)) on the VS Code team for allowing extensions to add groups to VS Code settings UI +- Adds new action buttons on many quick pick menu options, including in the _Git Command Palette_ — thanks to Tyler Leonhardt ([@tylerLeonhardt](https://github.com/tylerLeonhardt)) on the VS Code team for the API support +- Adds [Gerrit](https://www.gerritcodereview.com/) remote provider support — closes [#720](https://github.com/gitkraken/vscode-gitlens/issues/720) thanks to [PR [#1535](https://github.com/gitkraken/vscode-gitlens/issues/1535)](https://github.com/gitkraken/vscode-gitlens/pull/1535) by Andrew Savage ([@andrewsavage1](https://github.com/andrewsavage1)) +- Adds new _Open File_ command (with _Open Revision_ as an `alt-click`) to files in comparisons — closes [#1710](https://github.com/gitkraken/vscode-gitlens/issues/1710) +- Adds a new _Cherry Pick without Committing_ confirmation option to the _Git Command Palette_'s _cherry-pick_ command — closes [#1693](https://github.com/gitkraken/vscode-gitlens/issues/1693) +- Adds a new _Merge without Fast-Forwarding or Committing_ confirmation option to the _Git Command Palette_'s _merge_ command — closes [#1178](https://github.com/gitkraken/vscode-gitlens/issues/1178) thanks to [PR [#1621](https://github.com/gitkraken/vscode-gitlens/issues/1621)](https://github.com/gitkraken/vscode-gitlens/pull/1621) by Dmitry Ulupov ([@dimaulupov](https://github.com/dimaulupov)) +- Adds commit message autolinking of merged pull requests for Azure Repos — closes [#1486](https://github.com/gitkraken/vscode-gitlens/issues/1486) thanks to [PR [#1487](https://github.com/gitkraken/vscode-gitlens/issues/1487)](https://github.com/gitkraken/vscode-gitlens/pull/1487) by Mark Molinaro ([@markjm](https://github.com/markjm)) +- Adds a new `AzureDevOps` type to `gitlens.remotes` to better support Azure DevOps remote matching — thanks to [PR [#1487](https://github.com/gitkraken/vscode-gitlens/issues/1487)](https://github.com/gitkraken/vscode-gitlens/pull/1487) by Dmitry Gurovich ([@yrtimiD](https://github.com/yrtimiD)) + +### Changed + +- Changes the _No Fast-forward Merge_ confirmation option in the _Git Command Palette_'s _merge_ command to _Merge without Fast-Forwarding_ + +### Fixed + +- Fixes [#1669](https://github.com/gitkraken/vscode-gitlens/issues/1669) - Workitem Link (Hover ) for Repository (DevOps) with Blank is broken +- Fixes [#1695](https://github.com/gitkraken/vscode-gitlens/issues/1695) - gitlens.remotes: ${repo} has '%2520' instead of '%20' for a space +- Fixes [#1531](https://github.com/gitkraken/vscode-gitlens/issues/1531) - Typo in `gitlens.defaultGravatarsStyle` options — thanks to [PR [#1532](https://github.com/gitkraken/vscode-gitlens/issues/1532)](https://github.com/gitkraken/vscode-gitlens/pull/1532) by Alwin Wang ([@alwinw](https://github.com/alwinw)) +- Fixes [#1511](https://github.com/gitkraken/vscode-gitlens/issues/1511) - Avatars are blurry on retina displays — thanks to [PR [#1595](https://github.com/gitkraken/vscode-gitlens/issues/1595)](https://github.com/gitkraken/vscode-gitlens/pull/1595) by Adaex Yang ([@adaex](https://github.com/adaex)) +- Fixes [#1609](https://github.com/gitkraken/vscode-gitlens/issues/1609) - X.globalState.setKeysForSync is not a function — thanks to [PR [#1610](https://github.com/gitkraken/vscode-gitlens/issues/1610)](https://github.com/gitkraken/vscode-gitlens/pull/1610) by Stanislav Lvovsky ([@slavik-lvovsky](https://github.com/slavik-lvovsky)) +- Fixes [#1131](https://github.com/gitkraken/vscode-gitlens/issues/1131) - Order matters for search filters in 'search commits' — with help from [PR [#1575](https://github.com/gitkraken/vscode-gitlens/issues/1575)](https://github.com/gitkraken/vscode-gitlens/pull/1575) by Lior Kletter ([@Git-Lior](https://github.com/Git-Lior)) +- Fixes [#1583](https://github.com/gitkraken/vscode-gitlens/issues/1583) - Should hide the context menu on unrelated tabs — thanks to [PR [#1589](https://github.com/gitkraken/vscode-gitlens/issues/1589)](https://github.com/gitkraken/vscode-gitlens/pull/1589) by Takashi Tamura ([@tamuratak](https://github.com/tamuratak)) +- Fixes [#1587](https://github.com/gitkraken/vscode-gitlens/issues/1587) - Hover on blame can duplicate — thanks to [PR [#1588](https://github.com/gitkraken/vscode-gitlens/issues/1588)](https://github.com/gitkraken/vscode-gitlens/pull/1588) by Takashi Tamura ([@tamuratak](https://github.com/tamuratak)) + +## [11.6.1] - 2021-10-08 + +### Changed + +- GitLens joins forces with GitKraken! — [Learn more](https://gitkraken.com/blog/gitkraken-acquires-gitlens-for-visual-studio-code) + +## [11.6.0] - 2021-07-13 + +### Added + +- Adds new _Open Previous Changes with Working File_ command to commit files in views — closes [#1529](https://github.com/gitkraken/vscode-gitlens/issues/1529) +- Adopts new vscode `createStatusBarItem` API to allow for independent toggling — closes [#1543](https://github.com/gitkraken/vscode-gitlens/issues/1543) + +### Changed + +- Dynamically generates hashes and nonces for webview `