1
+ import * as os from 'os' ;
1
2
import * as vscode from 'vscode' ;
2
3
import { AvatarManager } from './avatarManager' ;
3
4
import { getConfig } from './config' ;
@@ -6,15 +7,15 @@ import { CodeReviewData, CodeReviews, ExtensionState } from './extensionState';
6
7
import { GitGraphView } from './gitGraphView' ;
7
8
import { Logger } from './logger' ;
8
9
import { 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' ;
10
11
import { Disposable } from './utils/disposable' ;
11
12
import { Event } from './utils/event' ;
12
13
13
14
/**
14
15
* Manages the registration and execution of Git Graph Commands.
15
16
*/
16
17
export class CommandManager extends Disposable {
17
- private readonly extensionPath : string ;
18
+ private readonly context : vscode . ExtensionContext ;
18
19
private readonly avatarManager : AvatarManager ;
19
20
private readonly dataSource : DataSource ;
20
21
private readonly extensionState : ExtensionState ;
@@ -33,9 +34,9 @@ export class CommandManager extends Disposable {
33
34
* @param onDidChangeGitExecutable The Event emitting the Git executable for Git Graph to use.
34
35
* @param logger The Git Graph Logger instance.
35
36
*/
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 ) {
37
38
super ( ) ;
38
- this . extensionPath = extensionPath ;
39
+ this . context = context ;
39
40
this . avatarManager = avatarManger ;
40
41
this . dataSource = dataSource ;
41
42
this . extensionState = extensionState ;
@@ -50,6 +51,7 @@ export class CommandManager extends Disposable {
50
51
this . registerCommand ( 'git-graph.endAllWorkspaceCodeReviews' , ( ) => this . endAllWorkspaceCodeReviews ( ) ) ;
51
52
this . registerCommand ( 'git-graph.endSpecificWorkspaceCodeReview' , ( ) => this . endSpecificWorkspaceCodeReview ( ) ) ;
52
53
this . registerCommand ( 'git-graph.resumeWorkspaceCodeReview' , ( ) => this . resumeWorkspaceCodeReview ( ) ) ;
54
+ this . registerCommand ( 'git-graph.version' , ( ) => this . version ( ) ) ;
53
55
54
56
this . registerDisposable (
55
57
onDidChangeGitExecutable ( ( gitExecutable ) => {
@@ -92,7 +94,7 @@ export class CommandManager extends Disposable {
92
94
loadRepo = this . repoManager . getRepoContainingFile ( getPathFromUri ( vscode . window . activeTextEditor . document . uri ) ) ;
93
95
}
94
96
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 ) ;
96
98
}
97
99
98
100
/**
@@ -210,7 +212,7 @@ export class CommandManager extends Disposable {
210
212
} ) . then ( ( item ) => {
211
213
if ( item ) {
212
214
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 , {
214
216
repo : item . codeReviewRepo ,
215
217
commitDetails : {
216
218
commitHash : commitHashes [ commitHashes . length > 1 ? 1 : 0 ] ,
@@ -223,6 +225,27 @@ export class CommandManager extends Disposable {
223
225
} ) ;
224
226
}
225
227
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
+
226
249
227
250
/* Helper Methods */
228
251
0 commit comments