mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 03:54:24 +01:00
Improve layering for git model (#272857)
* Improve layering for git model - Git clone doesn't belong in the model, removed it - All the extra repo picking didn't seem to fit into `Git` though, as that is really about git operations - Added a `CloneUtils` namespace for all the clone stuff to live. * Update extensions/git/src/clone.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * CloneManager class * public/private
This commit is contained in:
@@ -27,6 +27,7 @@ import { GitPostCommitCommandsProvider } from './postCommitCommands';
|
||||
import { GitEditSessionIdentityProvider } from './editSessionIdentityProvider';
|
||||
import { GitCommitInputBoxCodeActionsProvider, GitCommitInputBoxDiagnosticsManager } from './diagnostics';
|
||||
import { GitBlameController } from './blame';
|
||||
import { CloneManager } from './cloneManager';
|
||||
|
||||
const deactivateTasks: { (): Promise<any> }[] = [];
|
||||
|
||||
@@ -36,7 +37,7 @@ export async function deactivate(): Promise<any> {
|
||||
}
|
||||
}
|
||||
|
||||
async function createModel(context: ExtensionContext, logger: LogOutputChannel, telemetryReporter: TelemetryReporter, disposables: Disposable[]): Promise<Model> {
|
||||
async function createModel(context: ExtensionContext, logger: LogOutputChannel, telemetryReporter: TelemetryReporter, disposables: Disposable[]): Promise<{ model: Model; cloneManager: CloneManager }> {
|
||||
const pathValue = workspace.getConfiguration('git').get<string | string[]>('path');
|
||||
let pathHints = Array.isArray(pathValue) ? pathValue : pathValue ? [pathValue] : [];
|
||||
|
||||
@@ -90,6 +91,7 @@ async function createModel(context: ExtensionContext, logger: LogOutputChannel,
|
||||
});
|
||||
const model = new Model(git, askpass, context.globalState, context.workspaceState, logger, telemetryReporter);
|
||||
disposables.push(model);
|
||||
const cloneManager = new CloneManager(model, telemetryReporter, model.repositoryCache);
|
||||
|
||||
const onRepository = () => commands.executeCommand('setContext', 'gitOpenRepositoryCount', `${model.repositories.length}`);
|
||||
model.onDidOpenRepository(onRepository, null, disposables);
|
||||
@@ -108,7 +110,7 @@ async function createModel(context: ExtensionContext, logger: LogOutputChannel,
|
||||
git.onOutput.addListener('log', onOutput);
|
||||
disposables.push(toDisposable(() => git.onOutput.removeListener('log', onOutput)));
|
||||
|
||||
const cc = new CommandCenter(git, model, context.globalState, logger, telemetryReporter);
|
||||
const cc = new CommandCenter(git, model, context.globalState, logger, telemetryReporter, cloneManager);
|
||||
disposables.push(
|
||||
cc,
|
||||
new GitFileSystemProvider(model, logger),
|
||||
@@ -134,7 +136,7 @@ async function createModel(context: ExtensionContext, logger: LogOutputChannel,
|
||||
checkGitVersion(info);
|
||||
commands.executeCommand('setContext', 'gitVersion2.35', git.compareGitVersionTo('2.35') >= 0);
|
||||
|
||||
return model;
|
||||
return { model, cloneManager };
|
||||
}
|
||||
|
||||
async function isGitRepository(folder: WorkspaceFolder): Promise<boolean> {
|
||||
@@ -210,13 +212,18 @@ export async function _activate(context: ExtensionContext): Promise<GitExtension
|
||||
const onEnabled = filterEvent(onConfigChange, () => workspace.getConfiguration('git', null).get<boolean>('enabled') === true);
|
||||
const result = new GitExtensionImpl();
|
||||
|
||||
eventToPromise(onEnabled).then(async () => result.model = await createModel(context, logger, telemetryReporter, disposables));
|
||||
eventToPromise(onEnabled).then(async () => {
|
||||
const { model, cloneManager } = await createModel(context, logger, telemetryReporter, disposables);
|
||||
result.model = model;
|
||||
result.cloneManager = cloneManager;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
try {
|
||||
const model = await createModel(context, logger, telemetryReporter, disposables);
|
||||
return new GitExtensionImpl(model);
|
||||
const { model, cloneManager } = await createModel(context, logger, telemetryReporter, disposables);
|
||||
|
||||
return new GitExtensionImpl({ model, cloneManager });
|
||||
} catch (err) {
|
||||
console.warn(err.message);
|
||||
logger.warn(`[main] Failed to create model: ${err}`);
|
||||
|
||||
Reference in New Issue
Block a user