From 3767f97bc32b815802ceeac007a142c56581ca8b Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Tue, 12 Jan 2021 12:01:06 -0500 Subject: [PATCH] Adds onDidPublish to Git api --- extensions/git/src/api/api1.ts | 6 +++++- extensions/git/src/api/git.d.ts | 6 ++++++ extensions/git/src/commands.ts | 11 ++++++++++- extensions/git/src/model.ts | 10 +++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts index 0a309c6f96b..2ba9608459b 100644 --- a/extensions/git/src/api/api1.ts +++ b/extensions/git/src/api/api1.ts @@ -5,7 +5,7 @@ import { Model } from '../model'; import { Repository as BaseRepository, Resource } from '../repository'; -import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, RemoteSourceProvider, CredentialsProvider, BranchQuery, PushErrorHandler } from './git'; +import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, RemoteSourceProvider, CredentialsProvider, BranchQuery, PushErrorHandler, PublishEvent } from './git'; import { Event, SourceControlInputBox, Uri, SourceControl, Disposable, commands } from 'vscode'; import { mapEvent } from '../util'; import { toGitUri } from '../uri'; @@ -237,6 +237,10 @@ export class ApiImpl implements API { return this._model.onDidChangeState; } + get onDidPublish(): Event { + return this._model.onDidPublish; + } + get onDidOpenRepository(): Event { return mapEvent(this._model.onDidOpenRepository, r => new ApiRepository(r)); } diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts index b9a09632b66..be1389828da 100644 --- a/extensions/git/src/api/git.d.ts +++ b/extensions/git/src/api/git.d.ts @@ -231,9 +231,15 @@ export interface PushErrorHandler { export type APIState = 'uninitialized' | 'initialized'; +export interface PublishEvent { + repository: Repository; + branch?: string; +} + export interface API { readonly state: APIState; readonly onDidChangeState: Event; + readonly onDidPublish: Event; readonly git: Git; readonly repositories: Repository[]; readonly onDidOpenRepository: Event; diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index bb6c0215c2f..6314c204e97 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -2355,11 +2355,16 @@ export class CommandCenter { } await provider.publishRepository!(new ApiRepository(repository)); + this.model.firePublishEvent(repository, branchName); + return; } if (remotes.length === 1) { - return await repository.pushTo(remotes[0].name, branchName, true); + await repository.pushTo(remotes[0].name, branchName, true); + this.model.firePublishEvent(repository, branchName); + + return; } const addRemote = new AddRemoteItem(this); @@ -2376,9 +2381,13 @@ export class CommandCenter { if (newRemote) { await repository.pushTo(newRemote, branchName, true); + + this.model.firePublishEvent(repository, branchName); } } else { await repository.pushTo(choice.label, branchName, true); + + this.model.firePublishEvent(repository, branchName); } } diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index 5b4b10c91f0..47043bbb3ad 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -12,10 +12,11 @@ import * as path from 'path'; import * as fs from 'fs'; import * as nls from 'vscode-nls'; import { fromGitUri } from './uri'; -import { APIState as State, RemoteSourceProvider, CredentialsProvider, PushErrorHandler } from './api/git'; +import { APIState as State, RemoteSourceProvider, CredentialsProvider, PushErrorHandler, PublishEvent } from './api/git'; import { Askpass } from './askpass'; import { IRemoteSourceProviderRegistry } from './remoteProvider'; import { IPushErrorHandlerRegistry } from './pushError'; +import { ApiRepository } from './api/api1'; const localize = nls.loadMessageBundle(); @@ -69,6 +70,13 @@ export class Model implements IRemoteSourceProviderRegistry, IPushErrorHandlerRe private _onDidChangeState = new EventEmitter(); readonly onDidChangeState = this._onDidChangeState.event; + private _onDidPublish = new EventEmitter(); + readonly onDidPublish = this._onDidPublish.event; + + firePublishEvent(repository: Repository, branch?: string) { + this._onDidPublish.fire({ repository: new ApiRepository(repository), branch: branch }); + } + private _state: State = 'uninitialized'; get state(): State { return this._state; }