forked from mhutchie/vscode-git-graph
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextension.ts
91 lines (81 loc) · 3.66 KB
/
extension.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import * as vscode from 'vscode';
import { AvatarManager } from './avatarManager';
import { CommandManager } from './commands';
import { getConfig } from './config';
import { DataSource } from './dataSource';
import { DiffDocProvider } from './diffDocProvider';
import { ExtensionState } from './extensionState';
import { onStartUp } from './life-cycle/startup';
import { Logger } from './logger';
import { RepoManager } from './repoManager';
import { StatusBarItem } from './statusBarItem';
import { GitExecutable, UNABLE_TO_FIND_GIT_MSG, findGit, getGitExecutableFromPaths, showErrorMessage, showInformationMessage } from './utils';
import { EventEmitter } from './utils/event';
/**
* Activate Git Graph.
* @param context The context of the extension.
*/
export async function activate(context: vscode.ExtensionContext) {
const logger = new Logger();
logger.log('Starting Git Graph ...');
const gitExecutableEmitter = new EventEmitter<GitExecutable>();
const onDidChangeGitExecutable = gitExecutableEmitter.subscribe;
const extensionState = new ExtensionState(context, onDidChangeGitExecutable);
let gitExecutable: GitExecutable | null;
try {
gitExecutable = await findGit(extensionState);
gitExecutableEmitter.emit(gitExecutable);
logger.log('Using ' + gitExecutable.path + ' (version: ' + gitExecutable.version + ')');
} catch (_) {
gitExecutable = null;
showErrorMessage(UNABLE_TO_FIND_GIT_MSG);
logger.logError(UNABLE_TO_FIND_GIT_MSG);
}
const configurationEmitter = new EventEmitter<vscode.ConfigurationChangeEvent>();
const onDidChangeConfiguration = configurationEmitter.subscribe;
const dataSource = new DataSource(gitExecutable, onDidChangeConfiguration, onDidChangeGitExecutable, logger);
const avatarManager = new AvatarManager(dataSource, extensionState, logger);
const repoManager = new RepoManager(dataSource, extensionState, onDidChangeConfiguration, logger);
const statusBarItem = new StatusBarItem(repoManager.getNumRepos(), repoManager.onDidChangeRepos, onDidChangeConfiguration, logger);
const commandManager = new CommandManager(context, avatarManager, dataSource, extensionState, repoManager, gitExecutable, onDidChangeGitExecutable, logger);
const diffDocProvider = new DiffDocProvider(dataSource);
context.subscriptions.push(
vscode.workspace.registerTextDocumentContentProvider(DiffDocProvider.scheme, diffDocProvider),
vscode.workspace.onDidChangeConfiguration((event) => {
if (event.affectsConfiguration('git-graph')) {
configurationEmitter.emit(event);
} else if (event.affectsConfiguration('git.path')) {
const paths = getConfig().gitPaths;
if (paths.length === 0) return;
getGitExecutableFromPaths(paths).then((gitExecutable) => {
gitExecutableEmitter.emit(gitExecutable);
const msg = 'Git Graph is now using ' + gitExecutable.path + ' (version: ' + gitExecutable.version + ')';
showInformationMessage(msg);
logger.log(msg);
repoManager.searchWorkspaceForRepos();
}, () => {
const msg = 'The new value of "git.path" ("' + paths.join('", "') + '") does not ' + (paths.length > 1 ? 'contain a string that matches' : 'match') + ' the path and filename of a valid Git executable.';
showErrorMessage(msg);
logger.logError(msg);
});
}
}),
diffDocProvider,
commandManager,
statusBarItem,
repoManager,
avatarManager,
dataSource,
configurationEmitter,
extensionState,
gitExecutableEmitter,
logger
);
logger.log('Started Git Graph - Ready to use!');
extensionState.expireOldCodeReviews();
onStartUp(context).catch(() => { });
}
/**
* Deactivate Git Graph.
*/
export function deactivate() { }