1
1
// The module 'vscode' contains the VS Code extensibility API
2
2
// Import the module and reference it with the alias vscode in your code below
3
3
import * as vscode from 'vscode' ;
4
- import { GitExtension } from './types/git' ;
4
+ import { GitExtension , Repository } from './types/git' ;
5
5
import GetCommitTypes , { CommitType } from './config/commit-type' ;
6
6
import {
7
7
GetCommitDetailType ,
@@ -37,9 +37,7 @@ export function activate(context: vscode.ExtensionContext) {
37
37
38
38
//获取是否在git扩展内 Gets whether it is in the git extension
39
39
function getGitExtension ( ) {
40
- const vscodeGit = vscode . extensions . getExtension < GitExtension > ( 'vscode.git' ) ;
41
- const gitExtension = vscodeGit && vscodeGit . exports ;
42
- return gitExtension ;
40
+ return vscode . extensions . getExtension < GitExtension > ( 'vscode.git' ) ?. exports ;
43
41
}
44
42
//Commit message config
45
43
const message_config : GitMessage = {
@@ -100,8 +98,15 @@ export function activate(context: vscode.ExtensionContext) {
100
98
return false ;
101
99
}
102
100
103
- //获取当前的 git仓库实例 Get git repo instance
104
- let repo : any = gitExtension . getAPI ( 1 ) . repositories [ 0 ] ;
101
+ const getSelectedRepo = ( ) : Repository | null => {
102
+ const repositories = gitExtension . getAPI ( 1 ) . repositories ;
103
+
104
+ if ( repositories ?. length > 0 ) {
105
+ return repositories . find ( rp => rp . ui . selected ) || repositories [ 0 ] ;
106
+ }
107
+
108
+ return null ;
109
+ } ;
105
110
106
111
//输入提交详情 Input message detail
107
112
const inputMessageDetail = ( _key : string | number ) => {
@@ -127,13 +132,20 @@ export function activate(context: vscode.ExtensionContext) {
127
132
} ) ;
128
133
} ;
129
134
//是否存在模板 If has template
130
- const existTemplete = ( ) => {
135
+ const existTemplate = ( ) => {
131
136
return Array . isArray ( CommitTemplate ) && CommitTemplate . length > 0 ;
132
137
} ;
133
138
//完成输入 Complete input message
134
139
const completeInputMessage = ( select ?: boolean ) => {
135
140
vscode . commands . executeCommand ( 'workbench.view.scm' ) ;
136
- if ( existTemplete ( ) && ! select ) {
141
+ const repo = getSelectedRepo ( ) ;
142
+
143
+ if ( ! repo ) {
144
+ vscode . window . showErrorMessage ( 'No repositories found' , ...[ 'ok' ] ) ;
145
+ return ;
146
+ }
147
+
148
+ if ( existTemplate ( ) && ! select ) {
137
149
const defaultTemp = CommitTemplate . find ( item => item . default ) ;
138
150
if ( defaultTemp !== undefined ) {
139
151
message_config . templateName = defaultTemp . templateName ;
@@ -153,9 +165,8 @@ export function activate(context: vscode.ExtensionContext) {
153
165
) ;
154
166
_CommitDetailType . map ( ( item : any ) => {
155
167
if ( item . isEdit ) {
156
- item . description = `${ item . description } 👍 >> ${
157
- message_config [ item . key || '' ]
158
- } `;
168
+ item . description = `${ item . description } 👍 >> ${ message_config [ item . key || '' ]
169
+ } `;
159
170
}
160
171
return item ;
161
172
} ) ;
@@ -225,20 +236,9 @@ export function activate(context: vscode.ExtensionContext) {
225
236
} ) ;
226
237
} ;
227
238
//点击图标触发快捷选项 Click the icon to trigger shortcut options
228
- let disposable = vscode . commands . registerCommand (
229
- 'extension.showGitCommit' ,
230
- ( uri ?) => {
231
- if ( uri ) {
232
- //如果有多个repo 寻找当前的 进行填充 If there are multiple repos looking for the current to populate
233
- repo = gitExtension . getAPI ( 1 ) . repositories . find ( repo => {
234
- return repo . rootUri . path === uri . _rootUri . path ;
235
- } ) ;
236
- }
237
- startMessageInput ( ) ;
238
- } ,
239
- ) ;
239
+ const disposable = vscode . commands . registerCommand ( 'extension.showGitCommit' , ( ) => startMessageInput ( ) ) ;
240
240
context . subscriptions . push ( disposable ) ;
241
241
}
242
242
243
243
// this method is called when your extension is deactivated
244
- export function deactivate ( ) { }
244
+ export function deactivate ( ) { }
0 commit comments