Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/editTelemetry/browser/telemetry/scmAdapter.ts
4798 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 { WeakCachedFunction } from '../../../../../base/common/cache.js';
7
import { Event } from '../../../../../base/common/event.js';
8
import { observableSignalFromEvent, IReader, IObservable, derived } from '../../../../../base/common/observable.js';
9
import { URI } from '../../../../../base/common/uri.js';
10
import { ISCMRepository, ISCMService } from '../../../scm/common/scm.js';
11
12
export class ScmAdapter {
13
private readonly _repos = new WeakCachedFunction((repo: ISCMRepository) => new ScmRepoAdapter(repo));
14
15
private readonly _reposChangedSignal;
16
17
constructor(
18
@ISCMService private readonly _scmService: ISCMService
19
) {
20
this._reposChangedSignal = observableSignalFromEvent(this, Event.any(this._scmService.onDidAddRepository, this._scmService.onDidRemoveRepository));
21
}
22
23
public getRepo(uri: URI, reader: IReader | undefined): ScmRepoAdapter | undefined {
24
this._reposChangedSignal.read(reader);
25
const repo = this._scmService.getRepository(uri);
26
if (!repo) {
27
return undefined;
28
}
29
return this._repos.get(repo);
30
}
31
}
32
33
export class ScmRepoAdapter {
34
public readonly headBranchNameObs: IObservable<string | undefined> = derived(reader => this._repo.provider.historyProvider.read(reader)?.historyItemRef.read(reader)?.name);
35
public readonly headCommitHashObs: IObservable<string | undefined> = derived(reader => this._repo.provider.historyProvider.read(reader)?.historyItemRef.read(reader)?.revision);
36
37
constructor(
38
private readonly _repo: ISCMRepository
39
) {
40
}
41
42
async isIgnored(uri: URI): Promise<boolean> {
43
return false;
44
}
45
}
46
47