git: cleanup

This commit is contained in:
Joao Moreno
2017-02-17 14:37:17 +01:00
parent 47e5582d87
commit a09c57d62a
3 changed files with 18 additions and 17 deletions

View File

@@ -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)
);
}

View File

@@ -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,

View File

@@ -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);
}
}