1
>
/*---------------------------------------------------------------------------------------------
scm.ts
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 { URI } from '../../../../base/common/uri.js';
7
>
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
8
>
import { Event } from '../../../../base/common/event.js';
9
>
import { IDisposable } from '../../../../base/common/lifecycle.js';
10
>
import { Command } from '../../../../editor/common/languages.js';
11
>
import { IAction } from '../../../../base/common/actions.js';
12
>
import { IMenu } from '../../../../platform/actions/common/actions.js';
13
>
import { ThemeIcon } from '../../../../base/common/themables.js';
14
>
import { IMarkdownString } from '../../../../base/common/htmlContent.js';
15
>
import { ResourceTree } from '../../../../base/common/resourceTree.js';
16
>
import { ISCMHistoryProvider } from './history.js';
17
>
import { ITextModel } from '../../../../editor/common/model.js';
18
>
import { IObservable } from '../../../../base/common/observable.js';
19
>
import { ISCMArtifact, ISCMArtifactGroup, ISCMArtifactProvider } from './artifact.js';
20
>
21
>
export const VIEWLET_ID = 'workbench.view.scm';
22
>
export const VIEW_PANE_ID = 'workbench.scm';
23
>
export const REPOSITORIES_VIEW_PANE_ID = 'workbench.scm.repositories';
24
>
export const HISTORY_VIEW_PANE_ID = 'workbench.scm.history';
25
>
26
>
export const enum ViewMode {
27
>
List = 'list',
28
>
Tree = 'tree'
29
>
}
30
>
31
>
export interface IBaselineResourceProvider {
32
>
getBaselineResource(resource: URI): Promise<URI>;
33
>
}
34
>
35
>
export const ISCMService = createDecorator<ISCMService>('scm');
36
>
37
>
export interface ISCMResourceDecorations {
38
>
icon?: URI | ThemeIcon;
39
>
iconDark?: URI | ThemeIcon;
40
>
tooltip?: string;
41
>
strikeThrough?: boolean;
42
>
faded?: boolean;
43
>
}
44
>
45
>
export interface ISCMResource {
46
>
readonly resourceGroup: ISCMResourceGroup;
47
>
readonly sourceUri: URI;
48
>
readonly decorations: ISCMResourceDecorations;
49
>
readonly contextValue: string | undefined;
50
>
readonly command: Command | undefined;
51
>
readonly multiDiffEditorOriginalUri: URI | undefined;
52
>
readonly multiDiffEditorModifiedUri: URI | undefined;
53
>
open(preserveFocus: boolean): Promise<void>;
54
>
}
55
>
56
>
export interface ISCMResourceGroup {
57
>
readonly id: string;
58
>
readonly provider: ISCMProvider;
59
>
60
>
readonly resources: readonly ISCMResource[];
61
>
readonly resourceTree: ResourceTree<ISCMResource, ISCMResourceGroup>;
62
>
readonly onDidChangeResources: Event<void>;
63
>
64
>
readonly label: string;
65
>
contextValue: string | undefined;
66
>
readonly hideWhenEmpty: boolean;
67
>
readonly onDidChange: Event<void>;
68
>
69
>
readonly multiDiffEditorEnableViewChanges: boolean;
70
>
}
71
>
72
>
export interface ISCMProvider extends IDisposable {
73
>
readonly id: string;
74
>
readonly parentId?: string;
75
>
readonly providerId: string;
76
>
readonly label: string;
77
>
readonly name: string;
78
>
79
>
readonly groups: readonly ISCMResourceGroup[];
80
>
readonly onDidChangeResourceGroups: Event<void>;
81
>
readonly onDidChangeResources: Event<void>;
82
>
83
>
readonly rootUri?: URI;
84
>
readonly iconPath?: URI | { light: URI; dark: URI } | ThemeIcon;
85
>
readonly isHidden?: boolean;
86
>
readonly inputBoxTextModel: ITextModel;
87
>
readonly contextValue: IObservable<string | undefined>;
88
>
readonly count: IObservable<number | undefined>;
89
>
readonly commitTemplate: IObservable<string>;
90
>
readonly artifactProvider: IObservable<ISCMArtifactProvider | undefined>;
91
>
readonly historyProvider: IObservable<ISCMHistoryProvider | undefined>;
92
>
readonly acceptInputCommand?: Command;
93
>
readonly actionButton: IObservable<ISCMActionButtonDescriptor | undefined>;
94
>
readonly statusBarCommands: IObservable<readonly Command[] | undefined>;
95
>
96
>
getOriginalResource(uri: URI): Promise<URI | null>;
97
>
}
98
>
99
>
export interface ISCMInputValueProviderContext {
100
>
readonly resourceGroupId: string;
101
>
readonly resources: readonly URI[];
102
>
}
103
>
104
>
export const enum InputValidationType {
105
>
Error = 0,
106
>
Warning = 1,
107
>
Information = 2
108
>
}
109
>
110
>
export interface IInputValidation {
111
>
message: string | IMarkdownString;
112
>
type: InputValidationType;
113
>
}
114
>
115
>
export interface IInputValidator {
116
>
(value: string, cursorPosition: number): Promise<IInputValidation | undefined>;
117
>
}
118
>
119
>
export enum SCMInputChangeReason {
120
>
HistoryPrevious,
121
>
HistoryNext
122
>
}
123
>
124
>
export interface ISCMInputChangeEvent {
125
>
readonly value: string;
126
>
readonly reason?: SCMInputChangeReason;
127
>
}
128
>
129
>
export interface ISCMActionButtonDescriptor {
130
>
command: Command & { shortTitle?: string };
131
>
secondaryCommands?: Command[][];
132
>
enabled: boolean;
133
>
}
134
>
135
>
export interface ISCMActionButton {
136
>
readonly type: 'actionButton';
137
>
readonly repository: ISCMRepository;
138
>
readonly button: ISCMActionButtonDescriptor;
139
>
}
140
>
141
>
export interface ISCMInput {
142
>
readonly repository: ISCMRepository;
143
>
144
>
readonly value: string;
145
>
setValue(value: string, fromKeyboard: boolean): void;
146
>
readonly onDidChange: Event<ISCMInputChangeEvent>;
147
>
148
>
placeholder: string;
149
>
readonly onDidChangePlaceholder: Event<string>;
150
>
151
>
validateInput: IInputValidator;
152
>
readonly onDidChangeValidateInput: Event<void>;
153
>
154
>
enabled: boolean;
155
>
readonly onDidChangeEnablement: Event<boolean>;
156
>
157
>
visible: boolean;
158
>
readonly onDidChangeVisibility: Event<boolean>;
159
>
160
>
setFocus(): void;
161
>
readonly onDidChangeFocus: Event<void>;
162
>
163
>
showValidationMessage(message: string | IMarkdownString, type: InputValidationType): void;
164
>
readonly onDidChangeValidationMessage: Event<IInputValidation>;
165
>
166
>
clearValidation(): void;
167
>
readonly onDidClearValidation: Event<void>;
168
>
169
>
showNextHistoryValue(): void;
170
>
showPreviousHistoryValue(): void;
171
>
}
172
>
173
>
export interface ISCMRepository extends IDisposable {
174
>
readonly id: string;
175
>
readonly provider: ISCMProvider;
176
>
readonly input: ISCMInput;
177
>
}
178
>
179
>
export interface ISCMService {
180
>
181
>
readonly _serviceBrand: undefined;
182
>
readonly onDidAddRepository: Event<ISCMRepository>;
183
>
readonly onDidRemoveRepository: Event<ISCMRepository>;
184
>
readonly repositories: Iterable<ISCMRepository>;
185
>
readonly repositoryCount: number;
186
>
187
>
registerSCMProvider(provider: ISCMProvider): ISCMRepository;
188
>
189
>
getRepository(id: string): ISCMRepository | undefined;
190
>
getRepository(resource: URI): ISCMRepository | undefined;
191
>
}
192
>
193
>
export interface ISCMTitleMenu {
194
>
readonly actions: IAction[];
195
>
readonly secondaryActions: IAction[];
196
>
readonly onDidChangeTitle: Event<void>;
197
>
readonly menu: IMenu;
198
>
}
199
>
200
>
export interface ISCMRepositoryMenus {
201
>
readonly titleMenu: ISCMTitleMenu;
202
>
getRepositoryMenu(repository: ISCMRepository): IMenu;
203
>
getRepositoryContextMenu(repository: ISCMRepository): IMenu;
204
>
getResourceGroupMenu(group: ISCMResourceGroup): IMenu;
205
>
getResourceMenu(resource: ISCMResource): IMenu;
206
>
getResourceFolderMenu(group: ISCMResourceGroup): IMenu;
207
>
getArtifactGroupMenu(artifactGroup: ISCMArtifactGroup): IMenu;
208
>
getArtifactMenu(artifactGroup: ISCMArtifactGroup, artifact: ISCMArtifact): IMenu;
209
>
}
210
>
211
>
export interface ISCMMenus {
212
>
getRepositoryMenus(provider: ISCMProvider): ISCMRepositoryMenus;
213
>
}
214
>
215
>
export const enum ISCMRepositorySortKey {
216
>
DiscoveryTime = 'discoveryTime',
217
>
Name = 'name',
218
>
Path = 'path'
219
>
}
220
>
221
>
export const enum ISCMRepositorySelectionMode {
222
>
Single = 'single',
223
>
Multiple = 'multiple'
224
>
}
225
>
226
>
export const ISCMViewService = createDecorator<ISCMViewService>('scmView');
227
>
228
>
export interface ISCMViewVisibleRepositoryChangeEvent {
229
>
readonly added: Iterable<ISCMRepository>;
230
>
readonly removed: Iterable<ISCMRepository>;
231
>
}
232
>
233
>
export interface ISCMViewService {
234
>
readonly _serviceBrand: undefined;
235
>
236
>
readonly menus: ISCMMenus;
237
>
readonly selectionModeConfig: IObservable<ISCMRepositorySelectionMode>;
238
>
readonly explorerEnabledConfig: IObservable<boolean>;
239
>
readonly graphShowIncomingChangesConfig: IObservable<boolean>;
240
>
readonly graphShowOutgoingChangesConfig: IObservable<boolean>;
241
>
242
>
repositories: ISCMRepository[];
243
>
readonly onDidChangeRepositories: Event<ISCMViewVisibleRepositoryChangeEvent>;
244
>
readonly didFinishLoadingRepositories: IObservable<boolean>;
245
>
246
>
visibleRepositories: readonly ISCMRepository[];
247
>
readonly onDidChangeVisibleRepositories: Event<ISCMViewVisibleRepositoryChangeEvent>;
248
>
249
>
isVisible(repository: ISCMRepository): boolean;
250
>
toggleVisibility(repository: ISCMRepository, visible?: boolean): void;
251
>
252
>
toggleSortKey(sortKey: ISCMRepositorySortKey): void;
253
>
toggleSelectionMode(selectionMode: ISCMRepositorySelectionMode): void;
254
>
255
>
readonly focusedRepository: ISCMRepository | undefined;
256
>
readonly onDidFocusRepository: Event<ISCMRepository | undefined>;
257
>
focus(repository: ISCMRepository): void;
258
>
259
>
/**
260
>
* The active repository is the repository selected in the Source Control Repositories view
261
>
* or the repository associated with the active editor. The active repository is shown in the
262
>
* Source Control Repository status bar item.
263
>
*/
264
>
readonly activeRepository: IObservable<{ repository: ISCMRepository; pinned: boolean } | undefined>;
265
>
pinActiveRepository(repository: ISCMRepository | undefined): void;
266
>
}