Skip to content

Commit 675ed02

Browse files
committed
move RemoteSourceProvider to git api
1 parent aeeec54 commit 675ed02

4 files changed

Lines changed: 38 additions & 32 deletions

File tree

extensions/git/src/api/api1.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { Model } from '../model';
77
import { Repository as BaseRepository, Resource } from '../repository';
8-
import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, GitExtension, RefType } from './git';
8+
import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, GitExtension, RefType, RemoteSourceProvider } from './git';
99
import { Event, SourceControlInputBox, Uri, SourceControl, Disposable, commands } from 'vscode';
1010
import { mapEvent } from '../util';
1111
import { toGitUri } from '../uri';
@@ -248,6 +248,10 @@ export class ApiImpl implements API {
248248
return result ? new ApiRepository(result) : null;
249249
}
250250

251+
registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable {
252+
return this._model.registerRemoteSourceProvider(provider);
253+
}
254+
251255
constructor(private _model: Model) { }
252256
}
253257

extensions/git/src/api/git.d.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { Uri, SourceControlInputBox, Event, CancellationToken } from 'vscode';
6+
import { Uri, Event, Disposable, ProviderResult } from 'vscode';
7+
export { ProviderResult } from 'vscode';
78

89
export interface Git {
910
readonly path: string;
@@ -189,6 +190,17 @@ export interface Repository {
189190
commit(message: string, opts?: CommitOptions): Promise<void>;
190191
}
191192

193+
export interface RemoteSource {
194+
readonly name: string;
195+
readonly url: string;
196+
}
197+
198+
export interface RemoteSourceProvider {
199+
readonly name: string;
200+
readonly supportsQuery?: boolean;
201+
getRemoteSources(query?: string): ProviderResult<RemoteSource[]>;
202+
}
203+
192204
export type APIState = 'uninitialized' | 'initialized';
193205

194206
export interface API {
@@ -201,6 +213,7 @@ export interface API {
201213

202214
toGitUri(uri: Uri, ref: string): Uri;
203215
getRepository(uri: Uri): Repository | null;
216+
registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;
204217
}
205218

206219
export interface GitExtension {

extensions/git/src/commands.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import * as path from 'path';
99
import { commands, Disposable, LineChange, MessageOptions, OutputChannel, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, QuickPick } from 'vscode';
1010
import TelemetryReporter from 'vscode-extension-telemetry';
1111
import * as nls from 'vscode-nls';
12-
import { Branch, GitErrorCodes, Ref, RefType, Status, CommitOptions } from './api/git';
12+
import { Branch, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourceProvider, RemoteSource } from './api/git';
1313
import { ForcePushMode, Git, Stash } from './git';
14-
import { Model, RemoteProvider, Remote } from './model';
14+
import { Model } from './model';
1515
import { Repository, Resource, ResourceGroupType } from './repository';
1616
import { applyLineChanges, getModifiedRange, intersectDiffWithRange, invertLineChange, toLineRanges } from './staging';
1717
import { fromGitUri, toGitUri, isGitUri } from './uri';
@@ -245,11 +245,11 @@ async function getQuickPickResult<T extends QuickPickItem>(quickpick: QuickPick<
245245
return result;
246246
}
247247

248-
class RemoteProviderQuickPick {
248+
class RemoteSourceProviderQuickPick {
249249

250-
private quickpick: QuickPick<QuickPickItem & { remote?: Remote }>;
250+
private quickpick: QuickPick<QuickPickItem & { remoteSource?: RemoteSource }>;
251251

252-
constructor(private provider: RemoteProvider) {
252+
constructor(private provider: RemoteSourceProvider) {
253253
this.quickpick = window.createQuickPick();
254254
this.quickpick.ignoreFocusOut = true;
255255

@@ -269,27 +269,27 @@ class RemoteProviderQuickPick {
269269
@throttle
270270
async query(): Promise<void> {
271271
this.quickpick.busy = true;
272-
const remotes = await this.provider.getRemotes(this.quickpick.value);
272+
const remoteSources = await this.provider.getRemoteSources(this.quickpick.value) || [];
273273
this.quickpick.busy = false;
274274

275-
if (remotes.length === 0) {
275+
if (remoteSources.length === 0) {
276276
this.quickpick.items = [{
277277
label: localize('none found', "No remote repositories found."),
278278
alwaysShow: true
279279
}];
280280
} else {
281-
this.quickpick.items = remotes.map(remote => ({
282-
label: remote.name,
283-
description: remote.url,
284-
remote
281+
this.quickpick.items = remoteSources.map(remoteSource => ({
282+
label: remoteSource.name,
283+
description: remoteSource.url,
284+
remote: remoteSource
285285
}));
286286
}
287287
}
288288

289-
async pick(): Promise<Remote | undefined> {
289+
async pick(): Promise<RemoteSource | undefined> {
290290
this.query();
291291
const result = await getQuickPickResult(this.quickpick);
292-
return result?.remote;
292+
return result?.remoteSource;
293293
}
294294
}
295295

@@ -514,7 +514,7 @@ export class CommandCenter {
514514
@command('git.clone')
515515
async clone(url?: string, parentPath?: string): Promise<void> {
516516
if (!url) {
517-
const quickpick = window.createQuickPick<(QuickPickItem & { provider?: RemoteProvider })>();
517+
const quickpick = window.createQuickPick<(QuickPickItem & { provider?: RemoteSourceProvider })>();
518518
quickpick.ignoreFocusOut = true;
519519

520520
const providers = this.model.getRemoteProviders()
@@ -544,7 +544,7 @@ export class CommandCenter {
544544

545545
if (result) {
546546
if (result.provider) {
547-
const quickpick = new RemoteProviderQuickPick(result.provider);
547+
const quickpick = new RemoteSourceProviderQuickPick(result.provider);
548548
const remote = await quickpick.pick();
549549
url = remote?.url;
550550
} else {

extensions/git/src/model.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import * as path from 'path';
1212
import * as fs from 'fs';
1313
import * as nls from 'vscode-nls';
1414
import { fromGitUri } from './uri';
15-
import { GitErrorCodes, APIState as State } from './api/git';
15+
import { GitErrorCodes, APIState as State, RemoteSourceProvider } from './api/git';
1616

1717
const localize = nls.loadMessageBundle();
1818

@@ -44,17 +44,6 @@ interface OpenRepository extends Disposable {
4444
repository: Repository;
4545
}
4646

47-
export interface Remote {
48-
readonly name: string;
49-
readonly url: string;
50-
}
51-
52-
export interface RemoteProvider {
53-
readonly name: string;
54-
readonly supportsQuery?: boolean;
55-
getRemotes(query?: string): Remote[] | Promise<Remote[]>;
56-
}
57-
5847
export class Model {
5948

6049
private _onDidOpenRepository = new EventEmitter<Repository>();
@@ -85,7 +74,7 @@ export class Model {
8574
this._onDidChangeState.fire(state);
8675
}
8776

88-
private remoteProviders = new Set<RemoteProvider>();
77+
private remoteProviders = new Set<RemoteSourceProvider>();
8978

9079
private disposables: Disposable[] = [];
9180

@@ -460,12 +449,12 @@ export class Model {
460449
return undefined;
461450
}
462451

463-
registerRemoteProvider(provider: RemoteProvider): Disposable {
452+
registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable {
464453
this.remoteProviders.add(provider);
465454
return toDisposable(() => this.remoteProviders.delete(provider));
466455
}
467456

468-
getRemoteProviders(): RemoteProvider[] {
457+
getRemoteProviders(): RemoteSourceProvider[] {
469458
return [...this.remoteProviders.values()];
470459
}
471460

0 commit comments

Comments
 (0)