1+ import * as os from 'os' ;
12import * as vscode from 'vscode' ;
23import { AvatarManager } from './avatarManager' ;
34import { getConfig } from './config' ;
@@ -6,15 +7,15 @@ import { CodeReviewData, CodeReviews, ExtensionState } from './extensionState';
67import { GitGraphView } from './gitGraphView' ;
78import { Logger } from './logger' ;
89import { RepoManager } from './repoManager' ;
9- import { GitExecutable , UNABLE_TO_FIND_GIT_MSG , abbrevCommit , abbrevText , getPathFromUri , getRelativeTimeDiff , getRepoName , isPathInWorkspace , resolveToSymbolicPath , showErrorMessage , showInformationMessage } from './utils' ;
10+ import { GitExecutable , UNABLE_TO_FIND_GIT_MSG , abbrevCommit , abbrevText , copyToClipboard , getExtensionVersion , getPathFromUri , getRelativeTimeDiff , getRepoName , isPathInWorkspace , resolveToSymbolicPath , showErrorMessage , showInformationMessage } from './utils' ;
1011import { Disposable } from './utils/disposable' ;
1112import { Event } from './utils/event' ;
1213
1314/**
1415 * Manages the registration and execution of Git Graph Commands.
1516 */
1617export class CommandManager extends Disposable {
17- private readonly extensionPath : string ;
18+ private readonly context : vscode . ExtensionContext ;
1819 private readonly avatarManager : AvatarManager ;
1920 private readonly dataSource : DataSource ;
2021 private readonly extensionState : ExtensionState ;
@@ -33,9 +34,9 @@ export class CommandManager extends Disposable {
3334 * @param onDidChangeGitExecutable The Event emitting the Git executable for Git Graph to use.
3435 * @param logger The Git Graph Logger instance.
3536 */
36- constructor ( extensionPath : string , avatarManger : AvatarManager , dataSource : DataSource , extensionState : ExtensionState , repoManager : RepoManager , gitExecutable : GitExecutable | null , onDidChangeGitExecutable : Event < GitExecutable > , logger : Logger ) {
37+ constructor ( context : vscode . ExtensionContext , avatarManger : AvatarManager , dataSource : DataSource , extensionState : ExtensionState , repoManager : RepoManager , gitExecutable : GitExecutable | null , onDidChangeGitExecutable : Event < GitExecutable > , logger : Logger ) {
3738 super ( ) ;
38- this . extensionPath = extensionPath ;
39+ this . context = context ;
3940 this . avatarManager = avatarManger ;
4041 this . dataSource = dataSource ;
4142 this . extensionState = extensionState ;
@@ -50,6 +51,7 @@ export class CommandManager extends Disposable {
5051 this . registerCommand ( 'git-graph.endAllWorkspaceCodeReviews' , ( ) => this . endAllWorkspaceCodeReviews ( ) ) ;
5152 this . registerCommand ( 'git-graph.endSpecificWorkspaceCodeReview' , ( ) => this . endSpecificWorkspaceCodeReview ( ) ) ;
5253 this . registerCommand ( 'git-graph.resumeWorkspaceCodeReview' , ( ) => this . resumeWorkspaceCodeReview ( ) ) ;
54+ this . registerCommand ( 'git-graph.version' , ( ) => this . version ( ) ) ;
5355
5456 this . registerDisposable (
5557 onDidChangeGitExecutable ( ( gitExecutable ) => {
@@ -92,7 +94,7 @@ export class CommandManager extends Disposable {
9294 loadRepo = this . repoManager . getRepoContainingFile ( getPathFromUri ( vscode . window . activeTextEditor . document . uri ) ) ;
9395 }
9496
95- GitGraphView . createOrShow ( this . extensionPath , this . dataSource , this . extensionState , this . avatarManager , this . repoManager , this . logger , loadRepo !== null ? { repo : loadRepo , commitDetails : null } : null ) ;
97+ GitGraphView . createOrShow ( this . context . extensionPath , this . dataSource , this . extensionState , this . avatarManager , this . repoManager , this . logger , loadRepo !== null ? { repo : loadRepo , commitDetails : null } : null ) ;
9698 }
9799
98100 /**
@@ -210,7 +212,7 @@ export class CommandManager extends Disposable {
210212 } ) . then ( ( item ) => {
211213 if ( item ) {
212214 const commitHashes = item . codeReviewId . split ( '-' ) ;
213- GitGraphView . createOrShow ( this . extensionPath , this . dataSource , this . extensionState , this . avatarManager , this . repoManager , this . logger , {
215+ GitGraphView . createOrShow ( this . context . extensionPath , this . dataSource , this . extensionState , this . avatarManager , this . repoManager , this . logger , {
214216 repo : item . codeReviewRepo ,
215217 commitDetails : {
216218 commitHash : commitHashes [ commitHashes . length > 1 ? 1 : 0 ] ,
@@ -223,6 +225,27 @@ export class CommandManager extends Disposable {
223225 } ) ;
224226 }
225227
228+ /**
229+ * The method run when the `git-graph.version` command is invoked.
230+ */
231+ private async version ( ) {
232+ try {
233+ const gitGraphVersion = await getExtensionVersion ( this . context ) ;
234+ const information = 'Git Graph: ' + gitGraphVersion + '\nVisual Studio Code: ' + vscode . version + '\nOS: ' + os . type ( ) + ' ' + os . arch ( ) + ' ' + os . release ( ) + '\nGit: ' + ( this . gitExecutable !== null ? this . gitExecutable . version : '(none)' ) ;
235+ vscode . window . showInformationMessage ( information , { modal : true } , 'Copy' ) . then ( ( selectedItem ) => {
236+ if ( selectedItem === 'Copy' ) {
237+ copyToClipboard ( information ) . then ( ( result ) => {
238+ if ( result !== null ) {
239+ showErrorMessage ( result ) ;
240+ }
241+ } ) ;
242+ }
243+ } , ( ) => { } ) ;
244+ } catch ( _ ) {
245+ showErrorMessage ( 'An unexpected error occurred while retrieving version information.' ) ;
246+ }
247+ }
248+
226249
227250 /* Helper Methods */
228251
0 commit comments