Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/git/src/api/extension.ts
5222 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Model } from '../model';
7
import { GitExtension, Repository, API } from './git';
8
import { ApiRepository, ApiImpl } from './api1';
9
import { Event, EventEmitter } from 'vscode';
10
import { CloneManager } from '../cloneManager';
11
12
function deprecated(_target: unknown, key: string | symbol, descriptor: PropertyDescriptor): void {
13
if (typeof descriptor.value !== 'function') {
14
throw new Error('not supported');
15
}
16
17
const original = descriptor.value;
18
descriptor.value = function (this: unknown, ...args: unknown[]) {
19
console.warn(`Git extension API method '${String(key)}' is deprecated.`);
20
return original.apply(this, args);
21
};
22
}
23
24
export class GitExtensionImpl implements GitExtension {
25
26
enabled: boolean = false;
27
28
private _onDidChangeEnablement = new EventEmitter<boolean>();
29
readonly onDidChangeEnablement: Event<boolean> = this._onDidChangeEnablement.event;
30
31
private _model: Model | undefined = undefined;
32
private _cloneManager: CloneManager | undefined = undefined;
33
34
set model(model: Model | undefined) {
35
this._model = model;
36
37
const enabled = !!model;
38
39
if (this.enabled === enabled) {
40
return;
41
}
42
43
this.enabled = enabled;
44
this._onDidChangeEnablement.fire(this.enabled);
45
}
46
47
get model(): Model | undefined {
48
return this._model;
49
}
50
51
set cloneManager(cloneManager: CloneManager | undefined) {
52
this._cloneManager = cloneManager;
53
}
54
55
constructor(privates?: { model: Model; cloneManager: CloneManager }) {
56
if (privates) {
57
this.enabled = true;
58
this._model = privates.model;
59
this._cloneManager = privates.cloneManager;
60
}
61
}
62
63
@deprecated
64
async getGitPath(): Promise<string> {
65
if (!this._model) {
66
throw new Error('Git model not found');
67
}
68
69
return this._model.git.path;
70
}
71
72
@deprecated
73
async getRepositories(): Promise<Repository[]> {
74
if (!this._model) {
75
throw new Error('Git model not found');
76
}
77
78
return this._model.repositories.map(repository => new ApiRepository(repository));
79
}
80
81
getAPI(version: number): API {
82
if (!this._model || !this._cloneManager) {
83
throw new Error('Git model not found');
84
}
85
86
if (version !== 1) {
87
throw new Error(`No API version ${version} found.`);
88
}
89
90
return new ApiImpl({ model: this._model, cloneManager: this._cloneManager });
91
}
92
}
93
94