@@ -472,6 +472,24 @@ static int option_parse_recurse_submodules(const struct option *opt,
472472 return 0 ;
473473}
474474
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+
475493static int git_push_config (const char * k , const char * v , void * cb )
476494{
477495 int * flags = cb ;
@@ -487,6 +505,23 @@ static int git_push_config(const char *k, const char *v, void *cb)
487505 else
488506 * flags &= ~TRANSPORT_PUSH_FOLLOW_TAGS ;
489507 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+ }
490525 }
491526
492527 return git_default_config (k , v , NULL );
@@ -538,6 +573,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
538573 packet_trace_identity ("push" );
539574 git_config (git_push_config , & flags );
540575 argc = parse_options (argc , argv , prefix , options , push_usage , 0 );
576+ set_push_cert_flags (& flags , push_cert );
541577
542578 if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR ))))
543579 die (_ ("--delete is incompatible with --all, --mirror and --tags" ));
@@ -552,20 +588,6 @@ int cmd_push(int argc, const char **argv, const char *prefix)
552588 set_refspecs (argv + 1 , argc - 1 , repo );
553589 }
554590
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-
569591 rc = do_push (repo , flags );
570592 if (rc == -1 )
571593 usage_with_options (push_usage , options );
0 commit comments