diff --git a/extensions/git/src/autofetch.ts b/extensions/git/src/autofetch.ts index a663338a6a9..3e119e9fec7 100644 --- a/extensions/git/src/autofetch.ts +++ b/extensions/git/src/autofetch.ts @@ -7,7 +7,7 @@ import { workspace, Disposable } from 'vscode'; import { GitErrorCodes } from './git'; -import { Model } from './model'; +import { Repository } from './repository'; import { throttle } from './decorators'; export class AutoFetcher { @@ -16,7 +16,7 @@ export class AutoFetcher { private disposables: Disposable[] = []; private timer: NodeJS.Timer; - constructor(private model: Model) { + constructor(private model: Repository) { workspace.onDidChangeConfiguration(this.onConfiguration, this, this.disposables); this.onConfiguration(); } diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index db910fc64c9..f78fc8db31a 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -7,7 +7,7 @@ import { Uri, commands, scm, Disposable, window, workspace, QuickPickItem, OutputChannel, Range, WorkspaceEdit, Position, LineChange, SourceControlResourceState, TextDocumentShowOptions, ViewColumn } from 'vscode'; import { Ref, RefType, Git, GitErrorCodes, Branch } from './git'; -import { Model, Resource, Status, CommitOptions, WorkingTreeGroup, IndexGroup, MergeGroup } from './model'; +import { Repository, Resource, Status, CommitOptions, WorkingTreeGroup, IndexGroup, MergeGroup } from './repository'; import { ModelRegistry } from './modelRegistry'; import { toGitUri, fromGitUri } from './uri'; import { applyLineChanges, intersectDiffWithRange, toLineRanges, invertLineChange } from './staging'; @@ -27,7 +27,7 @@ class CheckoutItem implements QuickPickItem { constructor(protected ref: Ref) { } - async run(model: Model): Promise { + async run(model: Repository): Promise { const ref = this.treeish; if (!ref) { @@ -70,7 +70,7 @@ class BranchDeleteItem implements QuickPickItem { constructor(private ref: Ref) { } - async run(model: Model, force?: boolean): Promise { + async run(model: Repository, force?: boolean): Promise { if (!this.branchName) { return; } @@ -85,7 +85,7 @@ class MergeItem implements QuickPickItem { constructor(protected ref: Ref) { } - async run(model: Model): Promise { + async run(model: Repository): Promise { await model.merge(this.ref.name! || this.ref.commit!); } } @@ -95,7 +95,7 @@ class CreateBranchItem implements QuickPickItem { get label(): string { return localize('create branch', '$(plus) Create new branch'); } get description(): string { return ''; } - async run(model: Model): Promise { + async run(model: Repository): Promise { await commands.executeCommand('git.branch'); } } @@ -145,7 +145,7 @@ export class CommandCenter { }); } - private groupByModel(resources: Uri[]): [Model | undefined, Uri[]][] { + private groupByModel(resources: Uri[]): [Repository | undefined, Uri[]][] { return resources.reduce((result, resource) => { const model = this.modelRegistry.getModel(resource); const pair = result.filter(p => p[0] === model)[0]; @@ -157,20 +157,20 @@ export class CommandCenter { } return result; - }, [] as [Model | undefined, Uri[]][]); + }, [] as [Repository | undefined, Uri[]][]); } @command('git.refresh', { model: true }) - async refresh(model: Model): Promise { + async refresh(model: Repository): Promise { await model.status(); } @command('git.openResource', { model: true }) - async openResource(model: Model, resource: Resource): Promise { + async openResource(model: Repository, resource: Resource): Promise { await this._openResource(model, resource); } - private async _openResource(model: Model, resource: Resource, preview?: boolean): Promise { + private async _openResource(model: Repository, resource: Resource, preview?: boolean): Promise { const left = this.getLeftResource(resource); const right = this.getRightResource(model, resource); const title = this.getTitle(resource); @@ -216,7 +216,7 @@ export class CommandCenter { } } - private getRightResource(model: Model, resource: Resource): Uri | undefined { + private getRightResource(model: Repository, resource: Resource): Uri | undefined { switch (resource.type) { case Status.INDEX_MODIFIED: case Status.INDEX_ADDED: @@ -322,7 +322,7 @@ export class CommandCenter { } @command('git.openFile', { model: true }) - async openFile(model: Model, arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise { + async openFile(model: Repository, arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise { let uris: Uri[] | undefined; if (arg instanceof Uri) { @@ -372,7 +372,7 @@ export class CommandCenter { } @command('git.openHEADFile', { model: true }) - async openHEADFile(model: Model, arg?: Resource | Uri): Promise { + async openHEADFile(model: Repository, arg?: Resource | Uri): Promise { let resource: Resource | undefined = undefined; if (arg instanceof Resource) { @@ -398,7 +398,7 @@ export class CommandCenter { } @command('git.openChange', { model: true }) - async openChange(model: Model, arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise { + async openChange(model: Repository, arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise { let resources: Resource[] | undefined = undefined; if (arg instanceof Uri) { @@ -462,13 +462,13 @@ export class CommandCenter { } @command('git.stageAll', { model: true }) - async stageAll(model: Model): Promise { + async stageAll(model: Repository): Promise { return await model.add(); } // TODO@Joao does this command really receive a model? @command('git.stageSelectedRanges', { model: true, diff: true }) - async stageSelectedRanges(model: Model, diffs: LineChange[]): Promise { + async stageSelectedRanges(model: Repository, diffs: LineChange[]): Promise { const textEditor = window.activeTextEditor; if (!textEditor) { @@ -500,7 +500,7 @@ export class CommandCenter { // TODO@Joao does this command really receive a model? @command('git.revertSelectedRanges', { model: true, diff: true }) - async revertSelectedRanges(model: Model, diffs: LineChange[]): Promise { + async revertSelectedRanges(model: Repository, diffs: LineChange[]): Promise { const textEditor = window.activeTextEditor; if (!textEditor) { @@ -545,7 +545,7 @@ export class CommandCenter { } @command('git.unstage', { model: true }) - async unstage(model: Model, ...resourceStates: SourceControlResourceState[]): Promise { + async unstage(model: Repository, ...resourceStates: SourceControlResourceState[]): Promise { if (resourceStates.length === 0 || !(resourceStates[0].resourceUri instanceof Uri)) { const resource = this.getSCMResource(); @@ -569,13 +569,13 @@ export class CommandCenter { } @command('git.unstageAll', { model: true }) - async unstageAll(model: Model): Promise { + async unstageAll(model: Repository): Promise { return await model.revertFiles(); } // TODO@Joao does this command really receive a model? @command('git.unstageSelectedRanges', { model: true, diff: true }) - async unstageSelectedRanges(model: Model, diffs: LineChange[]): Promise { + async unstageSelectedRanges(model: Repository, diffs: LineChange[]): Promise { const textEditor = window.activeTextEditor; if (!textEditor) { @@ -613,7 +613,7 @@ export class CommandCenter { } @command('git.clean', { model: true }) - async clean(model: Model, ...resourceStates: SourceControlResourceState[]): Promise { + async clean(model: Repository, ...resourceStates: SourceControlResourceState[]): Promise { if (resourceStates.length === 0 || !(resourceStates[0].resourceUri instanceof Uri)) { const resource = this.getSCMResource(); @@ -660,7 +660,7 @@ export class CommandCenter { } @command('git.cleanAll', { model: true }) - async cleanAll(model: Model): Promise { + async cleanAll(model: Repository): Promise { const config = workspace.getConfiguration('git'); let scope = config.get('discardAllScope') || 'prompt'; let resources = model.workingTreeGroup.resources; @@ -712,7 +712,7 @@ export class CommandCenter { } private async smartCommit( - model: Model, + model: Repository, getCommitMessage: () => Promise, opts?: CommitOptions ): Promise { @@ -767,7 +767,7 @@ export class CommandCenter { return true; } - private async commitWithAnyInput(model: Model, opts?: CommitOptions): Promise { + private async commitWithAnyInput(model: Repository, opts?: CommitOptions): Promise { const message = scm.inputBox.value; const getCommitMessage = async () => { if (message) { @@ -789,12 +789,12 @@ export class CommandCenter { } @command('git.commit', { model: true }) - async commit(model: Model): Promise { + async commit(model: Repository): Promise { await this.commitWithAnyInput(model); } @command('git.commitWithInput', { model: true }) - async commitWithInput(model: Model): Promise { + async commitWithInput(model: Repository): Promise { if (!scm.inputBox.value) { return; } @@ -807,37 +807,37 @@ export class CommandCenter { } @command('git.commitStaged', { model: true }) - async commitStaged(model: Model): Promise { + async commitStaged(model: Repository): Promise { await this.commitWithAnyInput(model, { all: false }); } @command('git.commitStagedSigned', { model: true }) - async commitStagedSigned(model: Model): Promise { + async commitStagedSigned(model: Repository): Promise { await this.commitWithAnyInput(model, { all: false, signoff: true }); } @command('git.commitStagedAmend', { model: true }) - async commitStagedAmend(model: Model): Promise { + async commitStagedAmend(model: Repository): Promise { await this.commitWithAnyInput(model, { all: false, amend: true }); } @command('git.commitAll', { model: true }) - async commitAll(model: Model): Promise { + async commitAll(model: Repository): Promise { await this.commitWithAnyInput(model, { all: true }); } @command('git.commitAllSigned', { model: true }) - async commitAllSigned(model: Model): Promise { + async commitAllSigned(model: Repository): Promise { await this.commitWithAnyInput(model, { all: true, signoff: true }); } @command('git.commitAllAmend', { model: true }) - async commitAllAmend(model: Model): Promise { + async commitAllAmend(model: Repository): Promise { await this.commitWithAnyInput(model, { all: true, amend: true }); } @command('git.undoCommit', { model: true }) - async undoCommit(model: Model): Promise { + async undoCommit(model: Repository): Promise { const HEAD = model.HEAD; if (!HEAD || !HEAD.commit) { @@ -850,7 +850,7 @@ export class CommandCenter { } @command('git.checkout', { model: true }) - async checkout(model: Model, treeish: string): Promise { + async checkout(model: Repository, treeish: string): Promise { if (typeof treeish === 'string') { return await model.checkout(treeish); } @@ -883,7 +883,7 @@ export class CommandCenter { } @command('git.branch', { model: true }) - async branch(model: Model): Promise { + async branch(model: Repository): Promise { const result = await window.showInputBox({ placeHolder: localize('branch name', "Branch name"), prompt: localize('provide branch name', "Please provide a branch name"), @@ -899,7 +899,7 @@ export class CommandCenter { } @command('git.deleteBranch', { model: true }) - async deleteBranch(model: Model, name: string, force?: boolean): Promise { + async deleteBranch(model: Repository, name: string, force?: boolean): Promise { let run: (force?: boolean) => Promise; if (typeof name === 'string') { run = force => model.deleteBranch(name, force); @@ -936,7 +936,7 @@ export class CommandCenter { } @command('git.merge', { model: true }) - async merge(model: Model): Promise { + async merge(model: Repository): Promise { const config = workspace.getConfiguration('git'); const checkoutType = config.get('checkoutType') || 'all'; const includeRemotes = checkoutType === 'all' || checkoutType === 'remote'; @@ -970,7 +970,7 @@ export class CommandCenter { } @command('git.createTag', { model: true }) - async createTag(model: Model): Promise { + async createTag(model: Repository): Promise { const inputTagName = await window.showInputBox({ placeHolder: localize('tag name', "Tag name"), prompt: localize('provide tag name', "Please provide a tag name"), @@ -993,7 +993,7 @@ export class CommandCenter { } @command('git.pullFrom', { model: true }) - async pullFrom(model: Model): Promise { + async pullFrom(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1023,7 +1023,7 @@ export class CommandCenter { } @command('git.pull', { model: true }) - async pull(model: Model): Promise { + async pull(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1035,7 +1035,7 @@ export class CommandCenter { } @command('git.pullRebase', { model: true }) - async pullRebase(model: Model): Promise { + async pullRebase(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1047,7 +1047,7 @@ export class CommandCenter { } @command('git.push', { model: true }) - async push(model: Model): Promise { + async push(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1059,7 +1059,7 @@ export class CommandCenter { } @command('git.pushWithTags', { model: true }) - async pushWithTags(model: Model): Promise { + async pushWithTags(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1073,7 +1073,7 @@ export class CommandCenter { } @command('git.pushTo', { model: true }) - async pushTo(model: Model): Promise { + async pushTo(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1099,7 +1099,7 @@ export class CommandCenter { } @command('git.sync', { model: true }) - async sync(model: Model): Promise { + async sync(model: Repository): Promise { const HEAD = model.HEAD; if (!HEAD || !HEAD.upstream) { @@ -1126,7 +1126,7 @@ export class CommandCenter { } @command('git.publish', { model: true }) - async publish(model: Model): Promise { + async publish(model: Repository): Promise { const remotes = model.remotes; if (remotes.length === 0) { @@ -1152,7 +1152,7 @@ export class CommandCenter { } @command('git.ignore', { model: true }) - async ignore(model: Model, ...resourceStates: SourceControlResourceState[]): Promise { + async ignore(model: Repository, ...resourceStates: SourceControlResourceState[]): Promise { if (resourceStates.length === 0 || !(resourceStates[0].resourceUri instanceof Uri)) { const uri = window.activeTextEditor && window.activeTextEditor.document.uri; @@ -1175,7 +1175,7 @@ export class CommandCenter { } @command('git.stash', { model: true }) - async stash(model: Model): Promise { + async stash(model: Repository): Promise { if (model.workingTreeGroup.resources.length === 0) { window.showInformationMessage(localize('no changes stash', "There are no changes to stash.")); return; @@ -1194,7 +1194,7 @@ export class CommandCenter { } @command('git.stashPop', { model: true }) - async stashPop(model: Model): Promise { + async stashPop(model: Repository): Promise { const stashes = await model.getStashes(); if (stashes.length === 0) { @@ -1214,7 +1214,7 @@ export class CommandCenter { } @command('git.stashPopLatest', { model: true }) - async stashPopLatest(model: Model): Promise { + async stashPopLatest(model: Repository): Promise { const stashes = await model.getStashes(); if (stashes.length === 0) { diff --git a/extensions/git/src/contentProvider.ts b/extensions/git/src/contentProvider.ts index d99d31fd572..1023b422c96 100644 --- a/extensions/git/src/contentProvider.ts +++ b/extensions/git/src/contentProvider.ts @@ -8,7 +8,7 @@ import { workspace, Uri, Disposable, Event, EventEmitter, window } from 'vscode'; import { debounce } from './decorators'; import { fromGitUri } from './uri'; -import { Model } from './model'; +import { Repository } from './repository'; interface CacheRow { uri: Uri; @@ -30,7 +30,7 @@ export class GitContentProvider { private cache: Cache = Object.create(null); private disposables: Disposable[] = []; - constructor(private model: Model) { + constructor(private model: Repository) { this.disposables.push( model.onDidChangeRepository(this.eventuallyFireChangeEvents, this), workspace.registerTextDocumentContentProvider('git', this) diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index 2db3c8df324..981ef95417d 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -9,7 +9,7 @@ import * as nls from 'vscode-nls'; const localize = nls.config(process.env.VSCODE_NLS_CONFIG)(); import { ExtensionContext, workspace, window, Disposable, commands, Uri } from 'vscode'; import { findGit, Git, IGit } from './git'; -import { Model } from './model'; +import { Repository } from './repository'; import { ModelRegistry } from './modelRegistry'; import { GitSCMProvider } from './scmProvider'; import { CommandCenter } from './commands'; @@ -46,8 +46,8 @@ async function init(context: ExtensionContext, disposables: Disposable[]): Promi } const workspaceRoot = Uri.file(workspaceRootPath); - const model = new Model(git, workspaceRoot); - modelRegistry.register(workspaceRoot, model); + const repository = new Repository(git, workspaceRoot); + modelRegistry.register(workspaceRoot, repository); outputChannel.appendLine(localize('using git', "Using git {0} from {1}", info.version, info.path)); @@ -56,17 +56,17 @@ async function init(context: ExtensionContext, disposables: Disposable[]): Promi disposables.push(toDisposable(() => git.onOutput.removeListener('log', onOutput))); const commandCenter = new CommandCenter(git, modelRegistry, outputChannel, telemetryReporter); - const statusBarCommands = new StatusBarCommands(model); - const provider = new GitSCMProvider(model, statusBarCommands); - const contentProvider = new GitContentProvider(model); - const autoFetcher = new AutoFetcher(model); + const statusBarCommands = new StatusBarCommands(repository); + const provider = new GitSCMProvider(repository, statusBarCommands); + const contentProvider = new GitContentProvider(repository); + const autoFetcher = new AutoFetcher(repository); disposables.push( commandCenter, provider, contentProvider, autoFetcher, - model + repository ); await checkGitVersion(info); diff --git a/extensions/git/src/modelRegistry.ts b/extensions/git/src/modelRegistry.ts index 0ff90cf3ba0..703d3214146 100644 --- a/extensions/git/src/modelRegistry.ts +++ b/extensions/git/src/modelRegistry.ts @@ -6,7 +6,7 @@ 'use strict'; import { Uri, window, QuickPickItem } from 'vscode'; -import { Model } from './model'; +import { Repository } from './repository'; import { memoize } from './decorators'; import * as path from 'path'; import * as nls from 'vscode-nls'; @@ -16,18 +16,18 @@ const localize = nls.loadMessageBundle(); class ModelPick implements QuickPickItem { @memoize get label(): string { return path.basename(this.repositoryRoot.fsPath); } @memoize get description(): string { return path.dirname(this.repositoryRoot.fsPath); } - constructor(protected repositoryRoot: Uri, public readonly model: Model) { } + constructor(protected repositoryRoot: Uri, public readonly model: Repository) { } } export class ModelRegistry { - private models: Map = new Map(); + private models: Map = new Map(); register(uri: Uri, model): void { this.models.set(uri, model); } - async pickModel(): Promise { + async pickModel(): Promise { const picks = Array.from(this.models.entries(), ([uri, model]) => new ModelPick(uri, model)); const placeHolder = localize('pick repo', "Choose a repository"); const pick = await window.showQuickPick(picks, { placeHolder }); @@ -35,7 +35,7 @@ export class ModelRegistry { return pick && pick.model; } - getModel(resource: Uri): Model | undefined { + getModel(resource: Uri): Repository | undefined { const resourcePath = resource.fsPath; for (let [repositoryRoot, model] of this.models) { @@ -50,7 +50,7 @@ export class ModelRegistry { return undefined; } - async resolve(resource: Uri): Promise { + async resolve(resource: Uri): Promise { const model = this.getModel(resource); if (model) { diff --git a/extensions/git/src/model.ts b/extensions/git/src/repository.ts similarity index 99% rename from extensions/git/src/model.ts rename to extensions/git/src/repository.ts index 0c0ba8bd24b..cbf93710190 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/repository.ts @@ -6,7 +6,7 @@ 'use strict'; import { Uri, Command, EventEmitter, Event, SourceControlResourceState, SourceControlResourceDecorations, Disposable, ProgressLocation, window, workspace, WorkspaceEdit } from 'vscode'; -import { Git, Repository, Ref, Branch, Remote, Commit, GitErrorCodes, Stash } from './git'; +import { Git, Repository as BaseRepository, Ref, Branch, Remote, Commit, GitErrorCodes, Stash } from './git'; import { anyEvent, eventToPromise, filterEvent, EmptyDisposable, combinedDisposable, dispose, find } from './util'; import { memoize, throttle, debounce } from './decorators'; import * as path from 'path'; @@ -295,7 +295,7 @@ export interface CommitOptions { signCommit?: boolean; } -export class Model implements Disposable { +export class Repository implements Disposable { private _onDidChangeRepository = new EventEmitter(); readonly onDidChangeRepository: Event = this._onDidChangeRepository.event; @@ -349,7 +349,7 @@ export class Model implements Disposable { private _operations = new OperationsImpl(); get operations(): Operations { return this._operations; } - private repository: Repository; + private repository: BaseRepository; private _state = State.Uninitialized; get state(): State { return this._state; } diff --git a/extensions/git/src/scmProvider.ts b/extensions/git/src/scmProvider.ts index 80a413b65d2..2b8ccc8465b 100644 --- a/extensions/git/src/scmProvider.ts +++ b/extensions/git/src/scmProvider.ts @@ -6,7 +6,7 @@ 'use strict'; import { scm, Uri, Disposable, SourceControl, SourceControlResourceGroup, Event, workspace, commands } from 'vscode'; -import { Model, State, Status } from './model'; +import { Repository, State, Status } from './repository'; import { StatusBarCommands } from './statusbar'; import { mapEvent } from './util'; import { toGitUri } from './uri'; @@ -58,7 +58,7 @@ export class GitSCMProvider { private workingTreeGroup: SourceControlResourceGroup; constructor( - private model: Model, + private model: Repository, private statusBarCommands: StatusBarCommands ) { this._sourceControl = scm.createSourceControl('git', 'Git'); diff --git a/extensions/git/src/statusbar.ts b/extensions/git/src/statusbar.ts index 9fe437ccec5..bf88320a8d6 100644 --- a/extensions/git/src/statusbar.ts +++ b/extensions/git/src/statusbar.ts @@ -7,7 +7,7 @@ import { Disposable, Command, EventEmitter, Event } from 'vscode'; import { RefType, Branch } from './git'; -import { Model, Operation } from './model'; +import { Repository, Operation } from './repository'; import { anyEvent, dispose } from './util'; import * as nls from 'vscode-nls'; @@ -19,7 +19,7 @@ class CheckoutStatusBar { get onDidChange(): Event { return this._onDidChange.event; } private disposables: Disposable[] = []; - constructor(private model: Model) { + constructor(private model: Repository) { model.onDidChange(this._onDidChange.fire, this._onDidChange, this.disposables); } @@ -76,7 +76,7 @@ class SyncStatusBar { this._onDidChange.fire(); } - constructor(private model: Model) { + constructor(private model: Repository) { model.onDidChange(this.onModelChange, this, this.disposables); model.onDidChangeOperations(this.onOperationsChange, this, this.disposables); this._onDidChange.fire(); @@ -149,7 +149,7 @@ export class StatusBarCommands { private checkoutStatusBar: CheckoutStatusBar; private disposables: Disposable[] = []; - constructor(model: Model) { + constructor(model: Repository) { this.syncStatusBar = new SyncStatusBar(model); this.checkoutStatusBar = new CheckoutStatusBar(model); }