@@ -15,7 +15,7 @@ use std::fmt::Write;
15
15
use std:: time:: SystemTime ;
16
16
17
17
use git_branchless_invoke:: CommandContext ;
18
- use git_branchless_opts:: RecordArgs ;
18
+ use git_branchless_opts:: { RecordArgs , SignOptions } ;
19
19
use itertools:: Itertools ;
20
20
use lib:: core:: check_out:: { check_out_commit, CheckOutCommitOptions } ;
21
21
use lib:: core:: config:: get_restack_preserve_timestamps;
@@ -53,6 +53,7 @@ pub fn command_main(ctx: CommandContext, args: RecordArgs) -> EyreExitOr<()> {
53
53
create,
54
54
detach,
55
55
insert,
56
+ sign_options,
56
57
} = args;
57
58
record (
58
59
& effects,
@@ -62,6 +63,7 @@ pub fn command_main(ctx: CommandContext, args: RecordArgs) -> EyreExitOr<()> {
62
63
create,
63
64
detach,
64
65
insert,
66
+ & sign_options,
65
67
)
66
68
}
67
69
@@ -74,6 +76,7 @@ fn record(
74
76
branch_name : Option < String > ,
75
77
detach : bool ,
76
78
insert : bool ,
79
+ sign_options : & SignOptions ,
77
80
) -> EyreExitOr < ( ) > {
78
81
let now = SystemTime :: now ( ) ;
79
82
let repo = Repo :: from_dir ( & git_run_info. working_directory ) ?;
@@ -147,19 +150,29 @@ fn record(
147
150
& snapshot,
148
151
event_tx_id,
149
152
message. as_deref( ) ,
153
+ sign_options,
150
154
) ?) ;
151
155
}
152
156
} else {
153
- let args = {
154
- let mut args = vec ! [ "commit" ] ;
155
- if let Some ( message) = & message {
156
- args. extend ( [ "--message" , message] ) ;
157
- }
158
- if working_copy_changes_type == WorkingCopyChangesType :: Unstaged {
159
- args. push ( "--all" ) ;
157
+ let mut args = vec ! [ "commit" ] ;
158
+ if let Some ( message) = & message {
159
+ args. extend ( [ "--message" , message] ) ;
160
+ }
161
+ if working_copy_changes_type == WorkingCopyChangesType :: Unstaged {
162
+ args. push ( "--all" ) ;
163
+ }
164
+ let mut gpg_flag;
165
+ if let Some ( keyid) = & sign_options. gpg_sign {
166
+ gpg_flag = String :: from ( "--gpg-sign" ) ;
167
+ if !keyid. is_empty ( ) {
168
+ gpg_flag. push ( '=' ) ;
169
+ gpg_flag. push_str ( keyid) ;
160
170
}
161
- args
162
- } ;
171
+ args. push ( & gpg_flag) ;
172
+ } else if sign_options. no_gpg_sign {
173
+ args. push ( "--no-gpg-sign" ) ;
174
+ }
175
+
163
176
try_exit_code ! ( git_run_info. run_direct_no_wrapping( Some ( event_tx_id) , & args) ?) ;
164
177
}
165
178
@@ -224,6 +237,7 @@ fn record_interactive(
224
237
snapshot : & WorkingCopySnapshot ,
225
238
event_tx_id : EventTransactionId ,
226
239
message : Option < & str > ,
240
+ sign_options : & SignOptions ,
227
241
) -> EyreExitOr < ( ) > {
228
242
let old_tree = snapshot. commit_stage0 . get_tree ( ) ?;
229
243
let new_tree = snapshot. commit_unstaged . get_tree ( ) ?;
@@ -332,13 +346,22 @@ fn record_interactive(
332
346
& update_index_script,
333
347
) ?;
334
348
335
- let args = {
336
- let mut args = vec ! [ "commit" ] ;
337
- if let Some ( message) = message {
338
- args. extend ( [ "--message" , message] ) ;
349
+ let mut args = vec ! [ "commit" ] ;
350
+ if let Some ( message) = message {
351
+ args. extend ( [ "--message" , message] ) ;
352
+ }
353
+ let mut gpg_flag;
354
+ if let Some ( keyid) = & sign_options. gpg_sign {
355
+ gpg_flag = String :: from ( "--gpg-sign" ) ;
356
+ if !keyid. is_empty ( ) {
357
+ gpg_flag. push ( '=' ) ;
358
+ gpg_flag. push_str ( keyid) ;
339
359
}
340
- args
341
- } ;
360
+ args. push ( & gpg_flag) ;
361
+ } else if sign_options. no_gpg_sign {
362
+ args. push ( "--no-gpg-sign" ) ;
363
+ }
364
+
342
365
git_run_info. run_direct_no_wrapping ( Some ( event_tx_id) , & args)
343
366
}
344
367
0 commit comments