mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-28 12:33:35 +01:00
git: cleanup
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
'use strict';
|
||||
|
||||
import { workspace, Uri, Disposable, Event, EventEmitter } from 'vscode';
|
||||
import { filterEvent } from './util';
|
||||
import { Model } from './model';
|
||||
|
||||
export class GitContentProvider {
|
||||
@@ -18,12 +17,9 @@ export class GitContentProvider {
|
||||
|
||||
private uris = new Set<Uri>();
|
||||
|
||||
constructor(private model: Model, onWorkspaceChange: Event<Uri>) {
|
||||
const onGitChange = filterEvent(onWorkspaceChange, uri => /^\.git\//.test(workspace.asRelativePath(uri)));
|
||||
const onRelevantGitChange = filterEvent(onGitChange, uri => !/\/\.git\/index\.lock$/.test(uri.fsPath));
|
||||
|
||||
constructor(private model: Model) {
|
||||
this.disposables.push(
|
||||
onRelevantGitChange(this.fireChangeEvents, this),
|
||||
model.onDidChangeRepository(this.fireChangeEvents, this),
|
||||
workspace.registerTextDocumentContentProvider('git', this)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import { Model } from './model';
|
||||
import { GitSCMProvider } from './scmProvider';
|
||||
import { CommandCenter } from './commands';
|
||||
import { CheckoutStatusBar, SyncStatusBar } from './statusbar';
|
||||
import { anyEvent } from './util';
|
||||
import { GitContentProvider } from './contentProvider';
|
||||
import { AutoFetcher } from './autofetch';
|
||||
import { MergeDecorator } from './merge';
|
||||
@@ -34,13 +33,10 @@ async function init(disposables: Disposable[]): Promise<void> {
|
||||
return;
|
||||
}
|
||||
|
||||
const fsWatcher = workspace.createFileSystemWatcher('**');
|
||||
const onWorkspaceChange = anyEvent(fsWatcher.onDidChange, fsWatcher.onDidCreate, fsWatcher.onDidDelete);
|
||||
|
||||
const pathHint = workspace.getConfiguration('git').get<string>('path');
|
||||
const info = await findGit(pathHint);
|
||||
const git = new Git({ gitPath: info.path, version: info.version });
|
||||
const model = new Model(git, rootPath, onWorkspaceChange);
|
||||
const model = new Model(git, rootPath);
|
||||
|
||||
outputChannel.appendLine(localize('using git', "Using git {0} from {1}", info.version, info.path));
|
||||
git.onOutput(str => outputChannel.append(str), null, disposables);
|
||||
@@ -48,7 +44,7 @@ async function init(disposables: Disposable[]): Promise<void> {
|
||||
const commitHandler = new CommitController();
|
||||
const commandCenter = new CommandCenter(model, outputChannel);
|
||||
const provider = new GitSCMProvider(model, commandCenter);
|
||||
const contentProvider = new GitContentProvider(model, onWorkspaceChange);
|
||||
const contentProvider = new GitContentProvider(model);
|
||||
const checkoutStatusBar = new CheckoutStatusBar(model);
|
||||
const syncStatusBar = new SyncStatusBar(model);
|
||||
const autoFetcher = new AutoFetcher(model);
|
||||
@@ -59,7 +55,6 @@ async function init(disposables: Disposable[]): Promise<void> {
|
||||
commandCenter,
|
||||
provider,
|
||||
contentProvider,
|
||||
fsWatcher,
|
||||
checkoutStatusBar,
|
||||
syncStatusBar,
|
||||
autoFetcher,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
import { Uri, EventEmitter, Event, SCMResource, SCMResourceDecorations, SCMResourceGroup, Disposable, window, workspace } from 'vscode';
|
||||
import { Git, Repository, Ref, Branch, Remote, PushOptions, Commit, GitErrorCodes, GitError } from './git';
|
||||
import { anyEvent, eventToPromise, filterEvent, mapEvent, EmptyDisposable, combinedDisposable } from './util';
|
||||
import { anyEvent, eventToPromise, filterEvent, mapEvent, EmptyDisposable, combinedDisposable, dispose } from './util';
|
||||
import { memoize, throttle, debounce } from './decorators';
|
||||
import { watch } from './watch';
|
||||
import * as path from 'path';
|
||||
@@ -221,6 +221,9 @@ export interface CommitOptions {
|
||||
|
||||
export class Model implements Disposable {
|
||||
|
||||
private _onDidChangeRepository = new EventEmitter<Uri>();
|
||||
readonly onDidChangeRepository: Event<Uri> = this._onDidChangeRepository.event;
|
||||
|
||||
private _onDidChangeState = new EventEmitter<State>();
|
||||
readonly onDidChangeState: Event<State> = this._onDidChangeState.event;
|
||||
|
||||
@@ -303,13 +306,18 @@ export class Model implements Disposable {
|
||||
this._onDidChangeResources.fire(this.resources);
|
||||
}
|
||||
|
||||
private onWorkspaceChange: Event<Uri>;
|
||||
private repositoryDisposable: Disposable = EmptyDisposable;
|
||||
private disposables: Disposable[] = [];
|
||||
|
||||
constructor(
|
||||
private git: Git,
|
||||
private rootPath: string,
|
||||
private onWorkspaceChange: Event<Uri>
|
||||
) {
|
||||
const fsWatcher = workspace.createFileSystemWatcher('**');
|
||||
this.onWorkspaceChange = anyEvent(fsWatcher.onDidChange, fsWatcher.onDidCreate, fsWatcher.onDidDelete);
|
||||
this.disposables.push(fsWatcher);
|
||||
|
||||
this.status();
|
||||
}
|
||||
|
||||
@@ -480,12 +488,13 @@ export class Model implements Disposable {
|
||||
this.repository = this.git.open(repositoryRoot);
|
||||
|
||||
const dotGitPath = path.join(repositoryRoot, '.git');
|
||||
const { event, disposable: watcher } = watch(dotGitPath);
|
||||
const { event: onRawGitChange, disposable: watcher } = watch(dotGitPath);
|
||||
disposables.push(watcher);
|
||||
|
||||
const onGitChange = mapEvent(event, ({ filename }) => Uri.file(path.join(dotGitPath, filename)));
|
||||
const onGitChange = mapEvent(onRawGitChange, ({ filename }) => Uri.file(path.join(dotGitPath, filename)));
|
||||
const onRelevantGitChange = filterEvent(onGitChange, uri => !/\/\.git\/index\.lock$/.test(uri.fsPath));
|
||||
onRelevantGitChange(this.onFSChange, this, disposables);
|
||||
onRelevantGitChange(this._onDidChangeRepository.fire, this._onDidChangeRepository, disposables);
|
||||
|
||||
const onNonGitChange = filterEvent(this.onWorkspaceChange, uri => !/\/\.git\//.test(uri.fsPath));
|
||||
onNonGitChange(this.onFSChange, this, disposables);
|
||||
@@ -596,5 +605,6 @@ export class Model implements Disposable {
|
||||
|
||||
dispose(): void {
|
||||
this.repositoryDisposable.dispose();
|
||||
this.disposables = dispose(this.disposables);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user