@@ -472,6 +472,24 @@ static int option_parse_recurse_submodules(const struct option *opt,
472
472
return 0 ;
473
473
}
474
474
475
+ static void set_push_cert_flags (int * flags , int v )
476
+ {
477
+ switch (v ) {
478
+ case SEND_PACK_PUSH_CERT_NEVER :
479
+ * flags &= ~(TRANSPORT_PUSH_CERT_ALWAYS | TRANSPORT_PUSH_CERT_IF_ASKED );
480
+ break ;
481
+ case SEND_PACK_PUSH_CERT_ALWAYS :
482
+ * flags |= TRANSPORT_PUSH_CERT_ALWAYS ;
483
+ * flags &= ~TRANSPORT_PUSH_CERT_IF_ASKED ;
484
+ break ;
485
+ case SEND_PACK_PUSH_CERT_IF_ASKED :
486
+ * flags |= TRANSPORT_PUSH_CERT_IF_ASKED ;
487
+ * flags &= ~TRANSPORT_PUSH_CERT_ALWAYS ;
488
+ break ;
489
+ }
490
+ }
491
+
492
+
475
493
static int git_push_config (const char * k , const char * v , void * cb )
476
494
{
477
495
int * flags = cb ;
@@ -487,6 +505,23 @@ static int git_push_config(const char *k, const char *v, void *cb)
487
505
else
488
506
* flags &= ~TRANSPORT_PUSH_FOLLOW_TAGS ;
489
507
return 0 ;
508
+ } else if (!strcmp (k , "push.gpgsign" )) {
509
+ const char * value ;
510
+ if (!git_config_get_value ("push.gpgsign" , & value )) {
511
+ switch (git_config_maybe_bool ("push.gpgsign" , value )) {
512
+ case 0 :
513
+ set_push_cert_flags (flags , SEND_PACK_PUSH_CERT_NEVER );
514
+ break ;
515
+ case 1 :
516
+ set_push_cert_flags (flags , SEND_PACK_PUSH_CERT_ALWAYS );
517
+ break ;
518
+ default :
519
+ if (value && !strcasecmp (value , "if-asked" ))
520
+ set_push_cert_flags (flags , SEND_PACK_PUSH_CERT_IF_ASKED );
521
+ else
522
+ return error ("Invalid value for '%s'" , k );
523
+ }
524
+ }
490
525
}
491
526
492
527
return git_default_config (k , v , NULL );
@@ -538,6 +573,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
538
573
packet_trace_identity ("push" );
539
574
git_config (git_push_config , & flags );
540
575
argc = parse_options (argc , argv , prefix , options , push_usage , 0 );
576
+ set_push_cert_flags (& flags , push_cert );
541
577
542
578
if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR ))))
543
579
die (_ ("--delete is incompatible with --all, --mirror and --tags" ));
@@ -552,20 +588,6 @@ int cmd_push(int argc, const char **argv, const char *prefix)
552
588
set_refspecs (argv + 1 , argc - 1 , repo );
553
589
}
554
590
555
- switch (push_cert ) {
556
- case SEND_PACK_PUSH_CERT_NEVER :
557
- flags &= ~(TRANSPORT_PUSH_CERT_ALWAYS | TRANSPORT_PUSH_CERT_IF_ASKED );
558
- break ;
559
- case SEND_PACK_PUSH_CERT_ALWAYS :
560
- flags |= TRANSPORT_PUSH_CERT_ALWAYS ;
561
- flags &= ~TRANSPORT_PUSH_CERT_IF_ASKED ;
562
- break ;
563
- case SEND_PACK_PUSH_CERT_IF_ASKED :
564
- flags |= TRANSPORT_PUSH_CERT_IF_ASKED ;
565
- flags &= ~TRANSPORT_PUSH_CERT_ALWAYS ;
566
- break ;
567
- }
568
-
569
591
rc = do_push (repo , flags );
570
592
if (rc == -1 )
571
593
usage_with_options (push_usage , options );
0 commit comments