@@ -117,7 +117,7 @@ pub fn cherry_pick(
117117            ) ) ; 
118118        } 
119119
120-         let  mut  sig = signature ( repo) ?; 
120+         let  mut  sig = commit_signature ( repo) ?; 
121121        if  let  ( Some ( name) ,  Some ( email) )  = ( sig. name ( ) ,  sig. email ( ) )  { 
122122            // For simple rebases, preserve the original commit time 
123123            sig = git2:: Signature :: new ( name,  email,  & cherry_commit. time ( ) ) ?. to_owned ( ) ; 
@@ -309,7 +309,7 @@ impl UserSign {
309309
310310                let  signing_key = config. get_string ( "user.signingkey" ) . or_else ( 
311311                    |_| -> Result < _ ,  git2:: Error >  { 
312-                         let  sig = signature ( repo) ?; 
312+                         let  sig = commit_signature ( repo) ?; 
313313                        Ok ( sig. to_string ( ) ) 
314314                    } , 
315315                ) ?; 
@@ -326,7 +326,7 @@ impl UserSign {
326326
327327                let  signing_key = config. get_string ( "user.signingkey" ) . or_else ( 
328328                    |_| -> Result < _ ,  git2:: Error >  { 
329-                         let  sig = signature ( repo) ?; 
329+                         let  sig = commit_signature ( repo) ?; 
330330                        Ok ( sig. to_string ( ) ) 
331331                    } , 
332332                ) ?; 
@@ -347,7 +347,7 @@ impl UserSign {
347347                    . unwrap_or_else ( |_| -> Result < _ ,  git2:: Error >  { 
348348                        get_default_ssh_signing_key ( config) ?. map ( Ok ) . unwrap_or_else ( 
349349                            || -> Result < _ ,  git2:: Error >  { 
350-                                 let  sig = signature ( repo) ?; 
350+                                 let  sig = commit_signature ( repo) ?; 
351351                                Ok ( sig. to_string ( ) ) 
352352                            } , 
353353                        ) 
@@ -669,61 +669,54 @@ fn get_default_ssh_signing_key(config: &git2::Config) -> Result<Option<String>,
669669    Ok ( Some ( default_key. to_owned ( ) ) ) 
670670} 
671671
672- /// Replacement for [`git2::Repository::signature`] that respects env variables 
672+ #[ doc( hidden) ]  
673+ #[ deprecated(  
674+     since = "0.4.3" ,  
675+     note = "Replaced with `commit_signature`, `author_signature`"  
676+ ) ] 
673677pub  fn  signature ( repo :  & git2:: Repository )  -> Result < git2:: Signature < ' _ > ,  git2:: Error >  { 
674-     let  config_sig = repo. signature ( ) ?; 
678+     commit_signature ( repo) 
679+ } 
675680
676-     let  name = std:: env:: var_os ( "GIT_COMMITTER_NAME" ) 
677-         . map ( |os| { 
678-             os. into_string ( ) . map_err ( |os| { 
679-                 git2:: Error :: new ( 
680-                     git2:: ErrorCode :: Unmerged , 
681-                     git2:: ErrorClass :: Invalid , 
682-                     format ! ( 
683-                         "`GIT_COMMITTER_NAME` is not valid UTF-8: {}" , 
684-                         os. to_string_lossy( ) 
685-                     ) , 
686-                 ) 
687-             } ) 
688-         } ) 
689-         . unwrap_or_else ( || { 
690-             config_sig. name ( ) . map ( ToOwned :: to_owned) . ok_or_else ( || { 
691-                 git2:: Error :: new ( 
692-                     git2:: ErrorCode :: Unmerged , 
693-                     git2:: ErrorClass :: Invalid , 
694-                     format ! ( 
695-                         "name is not valid UTF-8: {}" , 
696-                         String :: from_utf8_lossy( config_sig. name_bytes( ) ) 
697-                     ) , 
698-                 ) 
699-             } ) 
700-         } ) ?; 
681+ /// Lookup the configured committer's signature 
682+ pub  fn  commit_signature ( repo :  & git2:: Repository )  -> Result < git2:: Signature < ' _ > ,  git2:: Error >  { 
683+     let  config = repo. config ( ) ?; 
684+     let  name = read_signature_field ( & config,  "GIT_COMMITTER_NAME" ,  "committer.name" ,  "user.name" ) ?; 
685+     let  email = read_signature_field ( 
686+         & config, 
687+         "GIT_COMMITTER_EMAIL" , 
688+         "committer.email" , 
689+         "user.email" , 
690+     ) ?; 
691+ 
692+     git2:: Signature :: now ( & name,  & email) 
693+ } 
694+ 
695+ /// Lookup the configured author's signature 
696+ pub  fn  author_signature ( repo :  & git2:: Repository )  -> Result < git2:: Signature < ' _ > ,  git2:: Error >  { 
697+     let  config = repo. config ( ) ?; 
698+     let  name = read_signature_field ( & config,  "GIT_AUTHOR_NAME" ,  "author.name" ,  "user.name" ) ?; 
699+     let  email = read_signature_field ( & config,  "GIT_AUTHOR_EMAIL" ,  "author.email" ,  "user.email" ) ?; 
701700
702-     let  email = std:: env:: var_os ( "GIT_COMMITTER_EMAIL" ) 
701+     git2:: Signature :: now ( & name,  & email) 
702+ } 
703+ 
704+ fn  read_signature_field ( 
705+     config :  & git2:: Config , 
706+     env_var :  & str , 
707+     specialized_key :  & str , 
708+     general_key :  & str , 
709+ )  -> Result < String ,  git2:: Error >  { 
710+     std:: env:: var_os ( env_var) 
703711        . map ( |os| { 
704712            os. into_string ( ) . map_err ( |os| { 
705713                git2:: Error :: new ( 
706714                    git2:: ErrorCode :: Unmerged , 
707715                    git2:: ErrorClass :: Invalid , 
708-                     format ! ( 
709-                         "`GIT_COMMITTER_EMAIL` is not valid UTF-8: {}" , 
710-                         os. to_string_lossy( ) 
711-                     ) , 
716+                     format ! ( "`{}` is not valid UTF-8: {}" ,  env_var,  os. to_string_lossy( ) ) , 
712717                ) 
713718            } ) 
714719        } ) 
715-         . unwrap_or_else ( || { 
716-             config_sig. email ( ) . map ( ToOwned :: to_owned) . ok_or_else ( || { 
717-                 git2:: Error :: new ( 
718-                     git2:: ErrorCode :: Unmerged , 
719-                     git2:: ErrorClass :: Invalid , 
720-                     format ! ( 
721-                         "email is not valid UTF-8: {}" , 
722-                         String :: from_utf8_lossy( config_sig. email_bytes( ) ) 
723-                     ) , 
724-                 ) 
725-             } ) 
726-         } ) ?; 
727- 
728-     git2:: Signature :: new ( & name,  & email,  & config_sig. when ( ) ) 
720+         . or_else ( || config. get_string ( specialized_key) . ok ( ) . map ( Ok ) ) 
721+         . unwrap_or_else ( || config. get_string ( general_key) ) 
729722} 
0 commit comments