- 'use strict';
- import { commands, ExtensionContext, extensions, window, workspace } from 'vscode';
- import { Commands, registerCommands } from './commands';
- import { Config, configuration, Configuration } from './configuration';
- import { CommandContext, extensionQualifiedId, GlobalState, GlyphChars, setCommandContext } from './constants';
- import { Container } from './container';
- import { GitCommit, GitService, GitUri } from './git/gitService';
- import { Logger } from './logger';
- import { Messages } from './messages';
- import { Strings, Versions } from './system';
- import { ModeConfig } from './ui/config';
- // import { Telemetry } from './telemetry';
-
- export async function activate(context: ExtensionContext) {
- const start = process.hrtime();
-
- // Pretend we are enabled (until we know otherwise) and set the view contexts to reduce flashing on load
- setCommandContext(CommandContext.Enabled, true);
-
- Logger.configure(context, o => {
- if (o instanceof GitUri) {
- return `GitUri(${o.toString(true)}${o.repoPath ? ` repoPath=${o.repoPath}` : ''}${
- o.sha ? ` sha=${o.sha}` : ''
- })`;
- }
-
- if (o instanceof GitCommit) {
- return `GitCommit(${o.sha ? ` sha=${o.sha}` : ''}${o.repoPath ? ` repoPath=${o.repoPath}` : ''})`;
- }
-
- return undefined;
- });
-
- const gitlens = extensions.getExtension(extensionQualifiedId)!;
- const gitlensVersion = gitlens.packageJSON.version;
-
- const enabled = workspace.getConfiguration('git', null!).get<boolean>('enabled', true);
- if (!enabled) {
- Logger.log(`GitLens(v${gitlensVersion}) was NOT activated -- "git.enabled": false`);
- setCommandContext(CommandContext.Enabled, false);
-
- void Messages.showGitDisabledErrorMessage();
-
- return;
- }
-
- Configuration.configure(context);
-
- const cfg = configuration.get<Config>();
-
- const previousVersion = context.globalState.get<string>(GlobalState.GitLensVersion);
- await migrateSettings(context, previousVersion);
-
- try {
- await GitService.initialize();
- }
- catch (ex) {
- Logger.error(ex, `GitLens(v${gitlensVersion}).activate`);
- setCommandContext(CommandContext.Enabled, false);
-
- if (ex.message.includes('Unable to find git')) {
- await window.showErrorMessage(
- `GitLens was unable to find Git. Please make sure Git is installed. Also ensure that Git is either in the PATH, or that 'git.path' is pointed to its installed location.`
- );
- }
-
- return;
- }
-
- Container.initialize(context, cfg);
-
- registerCommands(context);
-
- const gitVersion = GitService.getGitVersion();
-
- // Telemetry.configure(ApplicationInsightsKey);
-
- // const telemetryContext: { [id: string]: any } = Object.create(null);
- // telemetryContext.version = gitlensVersion;
- // telemetryContext['git.version'] = gitVersion;
- // Telemetry.setContext(telemetryContext);
-
- notifyOnUnsupportedGitVersion(gitVersion);
- void showWelcomePage(gitlensVersion, previousVersion);
-
- context.globalState.update(GlobalState.GitLensVersion, gitlensVersion);
-
- // Constantly over my data cap so stop collecting initialized event
- // Telemetry.trackEvent('initialized', Objects.flatten(cfg, 'config', true));
-
- Logger.log(`GitLens(v${gitlensVersion}) activated ${GlyphChars.Dot} ${Strings.getDurationMilliseconds(start)} ms`);
- }
-
- export function deactivate() {}
-
- async function migrateSettings(context: ExtensionContext, previousVersion: string | undefined) {
- if (previousVersion === undefined) return;
-
- const previous = Versions.fromString(previousVersion);
-
- try {
- if (Versions.compare(previous, Versions.from(9, 0, 0)) !== 1) {
- await configuration.migrate(
- 'gitExplorer.autoRefresh',
- configuration.name('views')('repositories')('autoRefresh').value
- );
- await configuration.migrate(
- 'gitExplorer.branches.layout',
- configuration.name('views')('repositories')('branches')('layout').value
- );
- await configuration.migrate(
- 'gitExplorer.enabled',
- configuration.name('views')('repositories')('enabled').value
- );
- await configuration.migrate(
- 'gitExplorer.files.compact',
- configuration.name('views')('repositories')('files')('compact').value
- );
- await configuration.migrate(
- 'gitExplorer.files.layout',
- configuration.name('views')('repositories')('files')('layout').value
- );
- await configuration.migrate(
- 'gitExplorer.files.threshold',
- configuration.name('views')('repositories')('files')('threshold').value
- );
- await configuration.migrate(
- 'gitExplorer.includeWorkingTree',
- configuration.name('views')('repositories')('includeWorkingTree').value
- );
- await configuration.migrate(
- 'gitExplorer.location',
- configuration.name('views')('repositories')('location').value
- );
- await configuration.migrate(
- 'gitExplorer.showTrackingBranch',
- configuration.name('views')('repositories')('showTrackingBranch').value
- );
-
- await configuration.migrate(
- 'historyExplorer.avatars',
- configuration.name('views')('fileHistory')('avatars').value
- );
- await configuration.migrate(
- 'historyExplorer.enabled',
- configuration.name('views')('fileHistory')('enabled').value
- );
- await configuration.migrate(
- 'historyExplorer.location',
- configuration.name('views')('fileHistory')('location').value
- );
-
- await configuration.migrate(
- 'historyExplorer.avatars',
- configuration.name('views')('lineHistory')('avatars').value
- );
- await configuration.migrate(
- 'historyExplorer.enabled',
- configuration.name('views')('lineHistory')('enabled').value
- );
- await configuration.migrate(
- 'historyExplorer.location',
- configuration.name('views')('lineHistory')('location').value
- );
-
- await configuration.migrate(
- 'resultsExplorer.files.compact',
- configuration.name('views')('compare')('files')('compact').value
- );
- await configuration.migrate(
- 'resultsExplorer.files.layout',
- configuration.name('views')('compare')('files')('layout').value
- );
- await configuration.migrate(
- 'resultsExplorer.files.threshold',
- configuration.name('views')('compare')('files')('threshold').value
- );
- await configuration.migrate(
- 'resultsExplorer.location',
- configuration.name('views')('compare')('location').value
- );
-
- await configuration.migrate(
- 'resultsExplorer.files.compact',
- configuration.name('views')('search')('files')('compact').value
- );
- await configuration.migrate(
- 'resultsExplorer.files.layout',
- configuration.name('views')('search')('files')('layout').value
- );
- await configuration.migrate(
- 'resultsExplorer.files.threshold',
- configuration.name('views')('search')('files')('threshold').value
- );
- await configuration.migrate(
- 'resultsExplorer.location',
- configuration.name('views')('search')('location').value
- );
-
- await configuration.migrate('explorers.avatars', configuration.name('views')('avatars').value);
- await configuration.migrate(
- 'explorers.commitFileFormat',
- configuration.name('views')('commitFileFormat').value
- );
- await configuration.migrate('explorers.commitFormat', configuration.name('views')('commitFormat').value);
- await configuration.migrate(
- 'explorers.defaultItemLimit',
- configuration.name('views')('defaultItemLimit').value
- );
- await configuration.migrate(
- 'explorers.files.compact',
- configuration.name('views')('files')('compact').value
- );
- await configuration.migrate('explorers.files.layout', configuration.name('views')('files')('layout').value);
- await configuration.migrate(
- 'explorers.files.threshold',
- configuration.name('views')('files')('threshold').value
- );
- await configuration.migrate(
- 'explorers.stashFileFormat',
- configuration.name('views')('stashFileFormat').value
- );
- await configuration.migrate('explorers.stashFormat', configuration.name('views')('stashFormat').value);
- await configuration.migrate(
- 'explorers.statusFileFormat',
- configuration.name('views')('statusFileFormat').value
- );
-
- await configuration.migrate<
- {
- [key: string]: {
- name: string;
- statusBarItemName?: string;
- description?: string;
- codeLens?: boolean;
- currentLine?: boolean;
- explorers?: boolean;
- hovers?: boolean;
- statusBar?: boolean;
- };
- },
- {
- [key: string]: ModeConfig;
- }
- >('modes', configuration.name('modes').value, {
- migrationFn: v => {
- const modes = Object.create(null);
-
- for (const k in v) {
- const { explorers, ...mode } = v[k];
- modes[k] = { ...mode, views: explorers };
- }
-
- return modes;
- }
- });
- }
- }
- catch (ex) {
- Logger.error(ex, 'migrateSettings');
- }
- }
-
- function notifyOnUnsupportedGitVersion(version: string) {
- if (GitService.compareGitVersion('2.2.0') !== -1) return;
-
- // If git is less than v2.2.0
- void Messages.showGitVersionUnsupportedErrorMessage(version);
- }
-
- async function showWelcomePage(version: string, previousVersion: string | undefined) {
- if (previousVersion === undefined) {
- Logger.log(`GitLens first-time install`);
-
- if (Container.config.showWhatsNewAfterUpgrades) {
- await commands.executeCommand(Commands.ShowWelcomePage);
- }
-
- return;
- }
-
- if (previousVersion !== version) {
- Logger.log(`GitLens upgraded from v${previousVersion} to v${version}`);
- }
-
- const [major, minor] = version.split('.');
- const [prevMajor, prevMinor] = previousVersion.split('.');
- if (
- (major === prevMajor && minor === prevMinor) ||
- // Don't notify on downgrades
- (major < prevMajor || (major === prevMajor && minor < prevMinor))
- ) {
- return;
- }
-
- if (Container.config.showWhatsNewAfterUpgrades) {
- await commands.executeCommand(Commands.ShowWelcomePage);
- }
- else {
- await Messages.showWhatsNewMessage(version);
- }
- }
|